Здравствуйте! Создал инфоблок, "Портфолио" у которого создал свойство типа "Файл" для прикрепления изображения. В разделе портфолио вывел компонент bitrix.news.list , а список свойств пуст, причём если создать ещё свойство например типа "Строка" , оно будет в списке свойств в настройках компонента. вот свойство типа стока есть , а файла нет, хотя в инфоблоке вот так . В чём дело кто знает?
.
Веб-форма работает только для администраторов, Веб-форма работает только для администраторов (пользователей состоящих в группе Администраторы)
Неужели нет светлых мыслей? ))) Я всё больше склоняюсь к созданию в структуре сайта файла ajax.php с включенным прологом и эпилогом, создать свою форму (HTML + PHP + JS + JQUERY) и выполнить всё задуманное через этот файлик. )))
.
Веб-форма работает только для администраторов, Веб-форма работает только для администраторов (пользователей состоящих в группе Администраторы)
А ещё что это такое появляется после отправки данных с формы ? А если с той же формы отправить данные не авторизованному пользователю, то похоже какая-то ошибка происходит, потому как футер не грузится. (((
.
Веб-форма работает только для администраторов, Веб-форма работает только для администраторов (пользователей состоящих в группе Администраторы)
Здравствуйте! Хочу организовать на основе инфоблоков и веб-форм систему отзывов об организациях представленных на сайте. Для этого создал первым делом инфобок "организации", список и детальный просмотр организаций выполнен на основе компонента 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);
}
}
(пока всё отсылается на почту, для контроля переданных данных), всё работает если я авторизован под админом или пользователем из группы администраторы. При попытки оставить отзыв из под обычного пользователя - ничего не происходит. Я уже все доступы открыл и для инфоблока "Отзывы" и для формы отзывов . Всё равно ничего не отправляет ((( Не пойму почему. Точнее сказать данные с формы уходят но событие созданное в init.php - не отрабатывает. Почему? Заранее спасибо!
.
Как передать в веб-форму ID элемента инфоблока?, Как передать в веб-форму ID элемента инфоблока?
Здравствуйте! Есть инфоблок "Организации" у каждой организации есть форма "Оставить отзыв", я создал ещё один инфоблок "Отзывы организаций" для храннеия этих самых отзывов. В свойствах инфоблока "Отзывы организаций" добавил поле типа "Привязка к элементу" , чтобы конкретное сообщение (отзыв) можно было привязать по 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. Как стоит поступить? Заранее спасибо!
.
CAPTCHA в виде суммы чисел, Возможно ли настроить капчу в виде суммы чисел?
Здравствуйте! Возможно ли настроить капчу в виде суммы чисел, чтобы пользователь видел что-то подобное " 36 + 18 = __ ? " и он тупо вводил число и всё. Это удобней с точки зрения "юзабилити". В настройках капчи такого не нашёл, може кто-то сталкивался с этим и есть готовое решение? Заранее спасибо!
.
Как сохранить значение пользовательского поля?, Как сохранить значение пользовательского поля объекта BLOG_POST
Так, ну с этим вроде разобрался. Проблема теперь другая, для того чтобы отфильтровать записи по полю "Рубрика" я передаю в компонент blog.new_posts.list параметр $_REQUEST['FILTER'] в массив фильтра:
всё работает, НО битрикс всё кэширует, да так что даже при смене значения FILTER в адресной строке - ничего не происходит. =( только после clear_cache=Y страничка выводит то что нужно. Что делать? Всегда передавать clear_cache=Y , отключить кэш в компоненте blog.new_posts.list (кстати я не нашёл как это сделать), вырубить куэ во всём блоге - не вариант, в общем что подскажете ?
.
Как сохранить значение пользовательского поля?, Как сохранить значение пользовательского поля объекта BLOG_POST
Добрый день! Создал пользовательское поле "Рубрика" типа "Список" для объекта BLOG_POST. Забил список значений: "Зачатие", "Беременность и роды", "0-6 месяцев" и т.п. На странице редактирования записи блога /blog/блог_пользователя/post_edit.php в параметрах компонента bitrix:blog отобразил пользовательское поле "Рубрика" , на странице редактирования записи это выглядит так: , не пойму, почему они не сохраняются? Т.е. я выбираю нужный мне флажёк, нажимаю "Применить" или "Опубликовать" и при повторном открытии страницы редактирования записи, ни один флажёк не отмечен. =(
вывел содержание массива записей там VALUE поля тоже пусто
что делаю не так? Я хотел это поле дальше использовать чтобы отфильтровать список записей блога по переданному параметру в компоненте blog.new_posts.list вот так:
В общем "накостылил" я помелочи. Отфильтровать ещё в компоненте не получилось,так что сделал что -то такое. В инфоблоке создал 2 поля типа "Дата/Время" , "Начало событи" и "Окончание события" (Дату начала активности и дату окончания активности использовать не могу ,т.к. они влияют на видимость элемента в принципе, а мне нужно видеть их все в том числе и прошедшие и предстоящие), затем воспользовался функцией обработки времени . Код получился примерно следующий:
и дальше пошли выводится события удовлетворяющие усливию. Т.е. я взял текущую дат в 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 ? Её нельзя никак предварительно обработать перед сравнением с текущей датой? Заранее спасибо!
.
Вызов методов ядра битрикс из шаблона, Не могу идетифициовать ошибку при вызове методов ядра битриуса из файла foother.php
Конечно слышал, среди стандартных такого компонента не нашёл. Это просто написано всё на скорую руку, я потом вынесу это в отдельный компонент в отдельном пространстве имён и шаблоном и т.п. и подключу его через $APPLICATION-IncludeComponent ...меня инетересует почему он сейчас не работает для неавторизованных пользователей?
.
Вызов методов ядра битрикс из шаблона, Не могу идетифициовать ошибку при вызове методов ядра битриуса из файла foother.php
небольшой "компонентик" выводящий фотографию у которой самый высокий рейтинг. Если сидеть под админом или просто под авторизованным пользователем, всё работает отлично, стоит выйти , как всё что ниже этого кода (и он сам) перестают работать. Я проверил права доступа к инфоблоку 11, для всех пользователей стоят права на чтение. Поставил максимальный уровень отображения ошибок php - тоже ничего. В чём тут дело подскажите. Заранее спасибо!
.
Как получить ID раздела зная ID элемента этого раздела, Как получить ID (и прочие данные) раздела зная ID элемента этого раздела
Всем привет! Есть инфоблок "Фотографии пользователей" в нём при создании галереи пользователя заводится раздел с именем пользователя, в который попадают фотографии пользователя. Посетители сайта имеют возможность голосовать за эти фотографии. Я пытаюсь вывести в определённую часть сайта самую популярную фотографию. Пишу след. код:
дальше вывожу небольшой div с информацией о фотографии, выглядит всё вот так: . Проблема в том, что мне необходимо подтянуть в это блок имя раздела к которому принадлежит эта фотография. Т.е. вместо "Ната Саимунина" (сейчас это просто статичный текст) должно выводится имя раздела, т.е. имя владельца этой фотографии. В 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 который выводит записи из инфоблока "записи организаций". Для связи записи с конкретной организацией в инфоблоке "записи организаций" я создал поле типа "Привязка к элементу" (к элементу инфоблока "Организации" ) . При создании записи устанавливаю вышеупомянутую связь. Проблема в том что я не могу отфильтровать эти записи в компоненте bitrix:news.list размещёном на странице детального просмотра организации. Там в параметрах есть "Фильтр" arFilter . Его возможно задать перед вызовом компонента bitrix:news.list и отфильтровать записи имеющие связь с текущей организацией?
.
Ajax в Битрикс, Пытаюсь прикрутить jQuery Ajax к 1С Битриксу
Но ведь тогда к моему файлу "/ajax/ваш файл с компонентом " можно будет обратиться напрямую так: "www.доменю.ru//ajax/ваш файл с компонентом". А если компонент там где положено, т.е. в директории /bitrix/components/namesapce/componentname/ то прямое обращение через адресную строку, а соответственно и угроза безопасности, будет исключено. Меня просто вопросы безопасности волнуют. )
.
Ajax в Битрикс, Пытаюсь прикрутить jQuery Ajax к 1С Битриксу
Добрый день! Пытаюсь прикрутить jQuery ajax к 1С Битрикс компоненту. В частности использую . В шаблоне компонента выводится форма "Имя (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)); }
проверил с типом поля "Строка" - работает. Надо теперь помудрить как с другими типами данных работать, например с фото или видео. Если есть мысли пишите.