Неужели нет светлых мыслей? ))) Я всё больше склоняюсь к созданию в структуре сайта файла ajax.php с включенным прологом и эпилогом, создать свою форму (HTML + PHP + JS + JQUERY) и выполнить всё задуманное через этот файлик. )))
А ещё что это такое появляется после отправки данных с формы http://myscreenshot.info/i/0002/721971366885895391301386454032.png ? А если с той же формы отправить данные не авторизованному пользователю, то похоже какая-то ошибка происходит, потому как футер не грузится. (((
Здравствуйте! Хочу организовать на основе инфоблоков и веб-форм систему отзывов об организациях представленных на сайте. Для этого создал первым делом инфобок "организации", список и детальный просмотр организаций выполнен на основе компонента news.list и news.detail. Затем создал ещё один инфоблок "Отзывы" в котором создал поле "Привязка к элементу" для связи отзывов и организаций. Далее создал веб-форму с двумя полями "Имя" и "Отзыв" и кнопкой "Добавить". Далее в файле /bitrix/php_interface/init.php создал событие для обработки этой формы:
Код
//События для формфы отзывы организации
AddEventHandler('form', 'onBeforeResultAdd', 'my_onBeforeResultAdd');
function my_onBeforeResultAdd($WEB_FORM_ID, $arFields, $arrVALUES)
{
global $APPLICATION;
// действие обработчика распространяется только на форму с ID=3
if($WEB_FORM_ID==3) {
$el = new CIBlockElement;
$datetime = date("d.m.Y H:i:s");
$PROP = array();
$PROP['ORGANIZATION'] = $_POST["ORGANIZATION_ID"]; // ID организации про которую пишут отзыв
$PROP['USER_RW'] = $_POST["USER_RV_ID"]; // ID пользователя который пишет отзыв
//Если отзывы больше 499 символом он не публикуется, а отправляется на проверку модератору сайта
if(count($_POST["form_textarea_30"])>499) {$active = "N";} else {$active="Y";}
$arLoadProductArray = Array(
"MODIFIED_BY" => $_POST["USER_RV_ID"], // элемент изменен текущим пользователем
"IBLOCK_SECTION_ID" => false, // элемент лежит в корне раздела
"IBLOCK_ID" => 37, //Инфоблок "Отзывы организации"
"PROPERTY_VALUES"=> $PROP,
"NAME" => "Отзыв от ".$_POST['form_text_29']." (".$datetime.")",
"ACTIVE" => $active, // активен
"PREVIEW_TEXT" => $_POST["form_textarea_30"],
"DETAIL_TEXT" => $_POST["form_textarea_30"]
);
if($REVIEW_ID = $el->Add($arLoadProductArray))
echo $satus = "New ID: ".$REVIEW_ID;
else
echo $satus = "Error: ".$el->LAST_ERROR;
$massege = '
<div>WebForm ID: '.$WEB_FORM_ID.'</div>
<div>Name: '.$_POST["form_text_29"].'</div>
<div>Review: '.$_POST["form_textarea_30"].'</div>
<div>ID org.:'.$_POST["ORGANIZATION_ID"].'</div>
<div>ID user.:'.$_POST["USER_RV_ID"].'</div>
<div>Status: '.$satus.' </div>
';
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: www.site.ru <robot@site.ru>' . "\r\n";
mail("myemail@yandex.ru","test review form" ,$massege,$headers);
}
}
Здравствуйте! Есть инфоблок "Организации" у каждой организации есть форма "Оставить отзыв", я создал ещё один инфоблок "Отзывы организаций" для храннеия этих самых отзывов. В свойствах инфоблока "Отзывы организаций" добавил поле типа "Привязка к элементу" , чтобы конкретное сообщение (отзыв) можно было привязать по ID к определённой организации. Затем вывел форму на нужный мне шаблон (шаблон карточки организации) с помощью компонента bitrix:form. В файле /bitrix/php_interface/init.php добавил событие :
Код
//События для формфы отзывы организации
AddEventHandler('form', 'onBeforeResultAdd', 'my_onBeforeResultAdd');
function my_onBeforeResultAdd($WEB_FORM_ID, $arFields, $arrVALUES)
{
global $APPLICATION;
// действие обработчика распространяется только на форму с ID=3
if($WEB_FORM_ID==3) {
$massege = '
<div>WebForm ID: '.$WEB_FORM_ID.'</div>
<div>Name: '.$_POST['form_text_29'].'</div>
<div>Review: '.$_POST['form_textarea_30'].'</div>
';
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: www.olmama.ru <robot@olmama.ru>' . "\r\n";
mail("мой email","test review form" ,$massege,$headers);
}
}
пока всё отправляю на email, чтобы протестить что доходит, что нет. Не пойму как мне передать в эту форму ID организации, до которого я могу достучаться на странице (карточке) организации? Я думал может быть как-то в параметрах компонента, добавить новый параметр ID_ORG , в него передавать ID а в представление формы добавлять какое-нибудь поле типа hidden содержащее это ID_ORG и потом вместе с остальными данными формы ловить и обрабатывать всё в init.php. Как стоит поступить? Заранее спасибо!
Здравствуйте! Возможно ли настроить капчу в виде суммы чисел, чтобы пользователь видел что-то подобное " 36 + 18 = __ ? " и он тупо вводил число и всё. Это удобней с точки зрения "юзабилити". В настройках капчи такого не нашёл, може кто-то сталкивался с этим и есть готовое решение? Заранее спасибо!
Так, ну с этим вроде разобрался. Проблема теперь другая, для того чтобы отфильтровать записи по полю "Рубрика" я передаю в компонент blog.new_posts.list параметр $_REQUEST['FILTER'] в массив фильтра:
всё работает, НО битрикс всё кэширует, да так что даже при смене значения FILTER в адресной строке - ничего не происходит. =( только после clear_cache=Y страничка выводит то что нужно. Что делать? Всегда передавать clear_cache=Y , отключить кэш в компоненте blog.new_posts.list (кстати я не нашёл как это сделать), вырубить куэ во всём блоге - не вариант, в общем что подскажете ?
Добрый день! Создал пользовательское поле "Рубрика" типа "Список" для объекта BLOG_POST. Забил список значений: "Зачатие", "Беременность и роды", "0-6 месяцев" и т.п. На странице редактирования записи блога /blog/блог_пользователя/post_edit.php в параметрах компонента bitrix:blog отобразил пользовательское поле "Рубрика" http://myscreenshot.info/i/0002/343781366269444679364000936180.png , на странице редактирования записи это выглядит так: http://myscreenshot.info/i/0002/250971366269658556976273831001.png , не пойму, почему они не сохраняются? Т.е. я выбираю нужный мне флажёк, нажимаю "Применить" или "Опубликовать" и при повторном открытии страницы редактирования записи, ни один флажёк не отмечен. =(
вывел содержание массива записей там VALUE поля тоже пусто
что делаю не так? Я хотел это поле дальше использовать чтобы отфильтровать список записей блога по переданному параметру в компоненте blog.new_posts.list вот так:
В общем "накостылил" я помелочи. Отфильтровать ещё в компоненте не получилось,так что сделал что -то такое. В инфоблоке создал 2 поля типа "Дата/Время" , "Начало событи" и "Окончание события" (Дату начала активности и дату окончания активности использовать не могу ,т.к. они влияют на видимость элемента в принципе, а мне нужно видеть их все в том числе и прошедшие и предстоящие), затем воспользовался функцией обработки времени MakeTimeStamp() . Код получился примерно следующий:
и дальше пошли выводится события удовлетворяющие усливию. Т.е. я взял текущую дат в Unix формате даты начала и окончания события в Unix формате и тупо их сравнил. Наверное не очень правильно, но вроде работает. Может в процессе глубокого познания 1С-Битрикс, найду другое, более действенно решение. ) Спасибо за внимание!
Здравствуйте! Создал инфоблок "События" с пользовательским полем типа "Дата/Время" (DATETIME) "Дата события". Теперь на основе компонента "bitrix:news.list" пытаюсь вывести события на странице разделив их на "Сегодняшние" и "Предстоящие". Я скопировал компонент "bitrix:news.list" в отдельное пространство имён, затем в коде компонента (component.php) нашёл место где формируется массив с фильтром (приверно 161 строка) и добавил там ещё одно значение :
Код
//WHERE
$arFilter = array (
"IBLOCK_ID" => $arResult["ID"],
"IBLOCK_LID" => SITE_ID,
"ACTIVE" => "Y",
"CHECK_PERMISSIONS" => "Y",
"PROPERTY_DATETIME"=>date("d.m.Y h:i:s"), //Выводим события за сегодня
);
, но понял что данное условие :
Код
"PROPERTY_DATETIME"=>date("d.m.Y h:i:s")
сработает только в момент точного совпадения текущего времени и даты наступления события (секунда в секунду). Можно ли каким -нибудь образом задать фильтр так чтобы часы, минут и секунды не учитывались, а сравнивалась только дата? С date() всё понятно а вот что делать с PROPERTY_DATETIME ? Её нельзя никак предварительно обработать перед сравнением с текущей датой? Заранее спасибо!
Конечно слышал, среди стандартных такого компонента не нашёл. Это просто написано всё на скорую руку, я потом вынесу это в отдельный компонент в отдельном пространстве имён и шаблоном и т.п. и подключу его через $APPLICATION-IncludeComponent ...меня инетересует почему он сейчас не работает для неавторизованных пользователей?
небольшой "компонентик" выводящий фотографию у которой самый высокий рейтинг. Если сидеть под админом или просто под авторизованным пользователем, всё работает отлично, стоит выйти , как всё что ниже этого кода (и он сам) перестают работать. Я проверил права доступа к инфоблоку 11, для всех пользователей стоят права на чтение. Поставил максимальный уровень отображения ошибок php - тоже ничего. В чём тут дело подскажите. Заранее спасибо!
Всем привет! Есть инфоблок "Фотографии пользователей" в нём при создании галереи пользователя заводится раздел с именем пользователя, в который попадают фотографии пользователя. Посетители сайта имеют возможность голосовать за эти фотографии. Я пытаюсь вывести в определённую часть сайта самую популярную фотографию. Пишу след. код:
дальше вывожу небольшой div с информацией о фотографии, выглядит всё вот так: http://myscreenshot.info/i/0002/296571366097702432277100528735.png . Проблема в том, что мне необходимо подтянуть в это блок имя раздела к которому принадлежит эта фотография. Т.е. вместо "Ната Саимунина" (сейчас это просто статичный текст) должно выводится имя раздела, т.е. имя владельца этой фотографии. В 1С-Битрикс есть метод получающий информацию о разделе по его идентификатору. Но вот как мне получить ID раздела - не пойму. Я пытался добавить в этот код :
Чёта не работает. Сам ajax если без записи в инфоблок работает. А вот пытаюсь добавить элемент в инфоблок, вылетает 500 ошибка сервера.
Код
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");//ядро битрикса ?>
<?//тут обработка присланных ajax данных
if((isset($_POST["childname"]))&&(isset($_POST["yearsage"]))&&(isset($_POST["monthsage"])))
{
$Name = iconv("UTF-8","WINDOWS-1251",$_POST["childname"]);
$Yearsage = $_POST["yearsage"];
$Monthsage = $_POST["monthsage"];
$el = new CIBlockElement;
//Попытка записать всё в инфоблок
$PROP = array();
$PROP["YEARS_AGE"] = $Yearsage; // свойству с кодом YEARS_AGE присваиваем значение $Yearsage
$PROP["MONTHS_AGE"] = $Monthsage; // свойству с кодом MONTHS_AGE присваиваем значение $Monthsage
$PROP["BLOGER_PARENT"] = $_POST["userId"];
$arLoadProductArray = Array(
"MODIFIED_BY" => $USER->GetID(), // элемент изменен текущим пользователем
"IBLOCK_SECTION_ID" => false, // элемент лежит в корне раздела
"IBLOCK_ID" => 27,
"PROPERTY_VALUES"=> $PROP,
"NAME" => $Name,
"ACTIVE" => "Y" // активен
);
if($CHILDREN = $el->Add($arLoadProductArray))
echo "New ID: ".$CHILDREN;
else
echo "Error: ".$el->LAST_ERROR;
echo "<li>".$Name.", возраст ".$Yearsage." г. ".$Monthsage." мес. </li>";
}
?>
Пролог подключил. Эпилог не стал, т.к. если подключаю эпилог то ajax помимо того что должен возвращает всё что находится в foother.php в текущем шаблоне. Не понимаю почему он не добавляет в инфоблок.
Всем привет! Создаю что-то вроде блога организаций (компонент блога уже занят блогами пользователей) . У меня есть 2 типа инфоблоков: "Организации" и "Записи организации" . Инфоблок "организации" выводится в соответствующем разделе сайта компонентом bitrix:news.list , просмотр карточки организации осуществляется через bitrix:news.detail . На странице детального просмотра "/раздел_сайта/вид_организации/detail.php?ID=x" я разместил ещё один компонент bitrix:news.list который выводит записи из инфоблока "записи организаций". Для связи записи с конкретной организацией в инфоблоке "записи организаций" я создал поле типа "Привязка к элементу" (к элементу инфоблока "Организации" http://myscreenshot.info/i/0002/112771365080045542358719489842.png) . При создании записи устанавливаю вышеупомянутую связь. Проблема в том что я не могу отфильтровать эти записи в компоненте bitrix:news.list размещёном на странице детального просмотра организации. Там в параметрах есть "Фильтр" arFilter http://myscreenshot.info/i/0002/999701365080816756655972892614.png. Его возможно задать перед вызовом компонента bitrix:news.list и отфильтровать записи имеющие связь с текущей организацией?
Но ведь тогда к моему файлу "/ajax/ваш файл с компонентом " можно будет обратиться напрямую так: "www.доменю.ru//ajax/ваш файл с компонентом". А если компонент там где положено, т.е. в директории /bitrix/components/namesapce/componentname/ то прямое обращение через адресную строку, а соответственно и угроза безопасности, будет исключено. Меня просто вопросы безопасности волнуют. )
Добрый день! Пытаюсь прикрутить jQuery ajax к 1С Битрикс компоненту. В частности использую Jquery post . В шаблоне компонента выводится форма "Имя (input type text)" и кнопка "Добавить" по нажатию на кнопку добавить запускается вот такой JS скрипт:
Код
$(document).ready(function(){
$("#childAddButton" ;) .click(function(){
var dataSend = $("#childAdd" ;) .serialize();
$.post(
"<?php echo $_SERVER['REQUEST_URI'] ?>",
dataSend,
onAjaxSuccess
;) ;
function onAjaxSuccess(data)
{
// Здесь мы получаем данные, отправленные сервером и выводим их на экран.
var StringChild = $(".children_list" ;) .html();
$(".children_list" ;) .html(""+StringChild+" "+data+"" ;) ;
}
});
});
отправка данных из формы происходит на текущую страницу с компонентом
данные передаются без перезагрузки, но вот только вместо строки
Код
"<li>Ребёнок ".$_POST['childname']."</li>";
мне возвращается вся страница с добавленным туда по ajax-у пунктом [*] . Знакомые подсказали что нужно создать отдельный шаблон сайта в /bitrix/templates/ в котором подключаются файлы пролога и эпилога и выводжится один единственный мой компонент. Вот в чём вопрос, как программно заменить шаблон из компонента? Чтобы ajax не вываливал всю страницу целиком. Заранее спасибо!
Кажется нашёл!!! //Считывание значения пользовательского поля function GetUserField ($entity_id, $value_id, $property_id) { $arUF = $GLOBALS["USER_FIELD_MANAGER"]->GetUserFields ($entity_id, $value_id); return $arUF[$property_id]["VALUE"]; } //Установка значения пользовательского поля function SetUserField ($entity_id, $value_id, $uf_id, $uf_value) { return $GLOBALS["USER_FIELD_MANAGER"]->Update ($entity_id, $value_id, Array ($uf_id => $uf_value)); }
проверил с типом поля "Строка" - работает. Надо теперь помудрить как с другими типами данных работать, например с фото или видео. Если есть мысли пишите.