Михаил Митрофанов написал: Suntechnic, а Вам действительно нужно изменить только дату изменения элемента без фактического изменения какого-то поля/свойства этого элемента? Интересная задача...
да это не задача интерессная, а логика разработчиков Битрикса...
Вот так я пробовал, записывая случайный хеш, и все равно TIMESTAMP_X не меняется! И в правду интересно да!? Элемент изменен, а дата его изменения осталась прежней, БРЕД!
Обратите внимание, что этот метод изменяет значения свойств элемента, а не сам элемент. Из этого и очевидный вывод - раз элемент не меняется, зачем менять его дату последней модификации? И, должен заметить, очень удобно, что есть метод, изменяющий значения свойств без изменения даты модификации элемента. Эта фича очень помогла во многих задачах. А если по теме, то решение в лоб - через метод Update обновлять что-либо. К примеру, символьный код на тот же самый код. (Согласен, тупость (хотя как не посмотри - логично), но раз очень нужно, то вот так)
Всем здравствуйте. Думаю, что проблема в чем-то очень простом, но пока никак не могу понять в чем дело. Есть страница, на которой требуется авторизованный пользователь. Определяю константу "NEED_AUTH" до подключения пролога. На этом этапе пока все хорошо. Выводится форма авторизации, она работает. На этой же форме есть ссылка "Забыл пароль", которая в запрос добавляет GET параметр forgot_password=yes. Перехожу по ссылке, форма меняется. Предлагает ввести логин или email. Заполняю какое-либо поле (пробовал и какое-нибудь одно и оба). Нажимаю на кнопку отправки. Вываливается сообщение, что все хорошо, мол, отправили Вам на мыло сообщение с контрольной строкой и т.д. Но вот только проблема в том, что письма не приходит. Что сразу проверил: 1) Типы почтовых событий. Вроде все есть, в каждом из них прикреплен шаблон.
2) Проверил, работает ли в принципе отправка писем. Функцией mail() отправил тестовое письмо, все нормально. Да и остальные почтовые шаблоны отправляются. Так что вроде проблема не в почте.
3) Шаблон формы "Забыл пароль" кастомизирован. Проверил наличие всех полей, проверил их атрибуты name. Все соответствует дефолтному битриксовому шаблону.
Из примечательного: Проверил таблицу b_event, в ней НЕ создается записи по поводу отправки email с контрольной строкой.
В общем, пока нет идей, куда копать!
И сразу тогда вопрос/уточнение: для формы "Забыл пароль" используется тип почтового события USER_INFO?
Спасибо за ответы. Проблему не решил. Но сделал в обход немного. Создал hl блок с нужными полями и полем UF_ORDER_ID, и с помощью апи d7 выбираю нужные записи примерно следующим способом:
Все хорошо работает. В секции runtime указываем связь с созданным ранее hl блоком. Про особенности связи можно подчерпнуть вот отсюда. Конкретно мне очень помогло. Отдельное спасибо Андрею за статью и подробные ответы на вопросы в комментариях.
Да не, дело не в этом. Однако все равно попробовал! Но никаких результатов это не принесло. Кошмар на самом деле. Вот как можно было предлагать создать поле типа "Дата", сохранять ее строкой и ничего с этим не делать?! Хотя удивительно, что с этим больше никто не сталкивался... По крайней мере я не находил схожих тем. Только одну, но результатов от ее прочтения не было к сожалению!
Боюсь, вам не поможет дамп заказа, т.к. там не выбираются сами свойства. Поэтому, думаю, вам будет полезнее увидеть дамп из таблицы свойств. Но это лишь укоренит подозрения, что там просто строка и это дело никак не обрабатывается.
А так же немного об особенностях фильтрации по свойствам заказа есть прямо в документации, там и описывается момент с PROPERTY_VAL_BY_CODE_... CSaleOrder::GetList
Спасибо за ответ. Однако, судя по всему, этот фильтр предназначался для свойств инфоблока. И с этим проблем нет, фильтрация по свойствам инфоблока типа "Дата" работает на ура. А вот фильтрация по свойствам заказа типа "Дата" не отличается тем же успехом. Я и в том формате, что вы показали также пробовал фильтровать. Увы и ах.
Всем здравствуйте. Подскажите, кто знает, в чем проблема с фильтрацией по свойству заказа типа "Дата" и что делать дальше. Собственно, создаем свойство типа "Дата". http://prntscr.com/ibthbj Пишем код, который выберет нам заказы с нужной датой:
И результата ноль. Естественно, пытался впихнуть и другие форматы даты. Так же добавлял и время на всякий случай. Заказы с датами, попадающие в этот диапазон есть. Вывод напрашивается один - дата хранится строкой и в GetList'е заказов ничего не сделано по этому поводу. А фильтровать надо, без этого никак. Помогите, если кто знает, как вылечить сайт от такого тяжелого недуга. P.S. Как альтернатива - думал создать hl блок с нужными полями дат. А в свойство заказа прилепить привязку к записи из этого инфоблока в виде целого числа. А потом API d7 делать выборки со всеми нужными зависимостями. Если будут другие предложения, буду очень рад и признателен, если вы поделитесь ими.
Если для вас это темный лес, то, боюсь, вам будет очень тяжело это сделать самому, а полностью готовое решение вам просто так никто не даст. Насколько я понял, вам нужно следующее. Страница со списком объектов. По клику на объект открывается некоторая "детальная" страница этого объекта. Но на детальной отображаются элементы другого инфоблока. Значит, вам нужно примерно следующее:
Настройка ЧПУ для инфоблока "Объекты". Обычно они настроены с передачей get параметров, можно изменить на обычный путь с использованием "/", либо еще как вам угодно. Либо, если вы будете использовать отдельно два компонента, то править urlrewrite.php или через админку. При вызове компонентов также нужно будет указать пути из настроек.
Создать шаблон компонентов bitrix:news.list и bitrix:news.detai. В своем пространстве (немного о директории local) создать шаблоны для компонентов, основываясь на дефолтных. Ну, а там уже, в детальном шаблоне, можно либо добавить в result_modifier.php выборку нужных данных из ИБ "Этапы", либо уже в шаблоне вызвать еще один bitrix:news.list, но уже для ИБ "Этапы" с другим шаблоном.
Отчасти с этой целью настраивают ЧПУ, дабы в url использовать символьный код секции/элемента. В этом случае вы можете менять ИБ тысячу раз, оставляя символьный код одинаковым, тогда для СЕО не будет никаких проблем. Но, если говорить об ID секций и элементов, то, боюсь, что никак, либо я такого способа не знаю, может вам кто ответит.
Либо писать два запроса через АПИ Битрикса (сначала выбираем <значения с ограничением в количестве, затем >значения)
Либо (что будет быстрее, но лично у нас без необходимости стараются не писать напрямую запросы) выполнить sql запрос не используя АПИ инфоблоков или что вам там нужно. Как вариант, вот пример нужного вам запроса.
Если обсуждать конкретно проблему "session_register", то, открыв мануал мы видим, что это всего лишь функция для создания глобальной переменной сессии. Значит, можем заменить эту строку на $_SESSION['LANG_UI'] = LANGUAGE_ID как вариант. Так же почитайте комментарии к этому посту, судя по тому, что там пишут код исправили на более лучший. А вообще, насколько мне известно (а возможно я чего-то не знаю), не получится "нормальными", штатными способами сделать различные языковые версии без создания новых сайтов. Да и в этом есть свои плюсы (о которых вы можете почитать по ссылке на битрикс-академию). Ну, а если ну никак, тогда адаптируйте решение из 2013 года под текущие возможности и требования.
Если сделали все по мануалу, должно работать. Если судить по собственному опыту, то где вы пытаетесь в админке найти свой модуль? Если в общем списке модулей, то он будет не там. А в разделе Marketplace -> Установленные решения. Звучит глупо, но, когда писал свой первый модуль, по незнанию искал его в общем списке и также недоумевал, где мой модуль.
\Bitrix\Main\Loader::IncludeModule('iblock');
$rsElements = \Bitrix\Iblock\ElementTable::getList(array(
'select' => array('ID' /*поля, которые нужны вам*/),
'filter' => array(
'IBLOCK_ID' => $arResult["IBLOCK_ID"],
'ACTIVE' => 'Y',
'IBLOCK_SECTION_ID' => $arResult['IBLOCK_SECTION_ID']
),
'order' => array(/*!указываете сортировку по нужному полю!*/)
/* limit и offset указывать в связке с объектом пагинации нового класса d7 */
));
$arLastElements = array();
while ($arElement = $rsElements->fetch())
{
$arElement['NEAR_ELEMENTS'][] = $arLastElements;
$arResult[] = $arElement;
$arLastElements[] = $arElement['ID'];
}
В итоге у каждой новости будет массив с id элементами предыдущих новостей. Дальше с ним делайте, что хотите - формируйте ссылки, изменяйте порядок, еще что. Извиняюсь за АПИ d7, уже вошло в привычку. Если нужно через класс CIBlockElement, думаю переделать под него не составит труда. Ну и добавить эту вашу логику с LEFT и RIGHT.
Все, что пришло в голову самому - создал hightload блок, в котором сохраняю id элемента инфоблока, id пользователя и дату последнего визита странички комментариев элемента. Там, где нужно, выбираю количество из таблицы сообщений темы форума нужные (фильтрация по дате публикации). Получается что-то вроде такого:
Код
$rsCountMsg = \Bitrix\Forum\MessageTable::getList(array(
'select' => array(
'CNT'
),
'filter' => array(
'FORUM_ID' => /*ID форума*/,
'PARAM2' => /*ID элемента инфоблока*/,
'APPROVED' => 'Y', //Флаг того, что сообщение прошло модерацию
'>POST_DATE' => /*Дата последнего визита пользователем странички комментариев для выбранного элемента инфоблока*/ /*если дата публикации позже,
чем последняя дата визита, то считаем непрочитанным*/
),
'runtime' => array(
new \Bitrix\Main\Entity\ExpressionField(
'CNT',
'COUNT(*)'
)
)
));
Если у кого есть идеи, как сделать по-другому, то с удовольствием бы ознакомился с ними. Т.к. нутро подсказывает, что можно проще, просто я не знаю, как.
Александр Воробьев написал: Ну так администратор сможет же свойства редактировать. Указываете в свойстве автора любое необходимое значение. В чем проблема?
Как и сказал Александр, вам достаточно создать одного пользователя с правами на редактирования инфоблоков. Он и сможет добавлять новых авторов и привязывать их к статьям. Если вас это не устраивает: т.к. авторы - это пользователи, то допускается, что они могут зарегистрироваться на вашем новостном портале/сайте и т.д. Значит, добавлять их вручную необходимость отпадет - только модерация. Так же можно создать форму создания статьи для авторов, тогда авторы сами смогут создавать свои статьи и они будут привязываться к автору. А вам останется заниматься только модерацией. Но это все в комплексе - неплохая работа для разработчика и в рамках темы настройки компонента news нет смысла обсуждать. На ваш вопрос ответ уже дали, все остальное зависит только от того, как вы сами все это видите (или ваш заказчик). Так что, либо найдите себе разработчика, либо, если вы разработчик (т.к. форум все таки для разработчиков), изучайте документацию более детально, просмотрите курсы. Там все есть для решения вашей задачи.
Либо, как вариант, статьи - авторы, напоминает блог или форум. Можете копнуть в сторону компонентов блога и форума. Но, они недоступны в редакции Старт.
Новости - инфоблок, у которого будет свойство-привязка к автору Т.к. авторы - зарегистрированные пользователи, то, естественно, свойство-привязка будет типа "Привязка к пользователю". Дальше, просто вызываете либо комплексный компонент news с нужными параметрами (документация), настраиваете ЧПУ для инфоблока (можете поискать в курсах), правите шаблоны компонентов, если есть необходимость и все. Либо используйте по отдельности компоненты news.list и news.detail на разных страницах и, опять же, настройка ЧПУ (все можно найти в курсах и документации + много тем на форумах, которые уже отвечали на вопросы настройки компонентов news).
Создаете два инфоблока - Статьи и Авторы. Следовательно, у каждой сущности будут свои свойства. У инфоблока Статьи создаете свойство - привязка к элементам инфоблока Авторы (множественное или нет, зависит от самой задачи), Ну, в общем и целом - все. АПИ битрикса позволяет выбирать свойства инфоблоков и использовать по ним фильтрацию (если d7, то еще потребуется указать секцию runtime с ReferenceField'ами). На своей странице используете пагинацию во избежание больших нагрузок и для того, что бы просто не выводить ВСЕ записи на странице. Настраиваете ЧПУ (см. urlrewrite, либо через админку, кому как удобно), делаете детальную страницу. Вот вам и сайт. Касательно самого поиска вот ссылка из курсов. https://dev.1c-bitrix.ru/learning/course/?COURSE_ID=35&CHAPTER_ID=04507&LESSON_PATH=...
Всем здравствуйте. Суть задачи вот в чем: есть инфоблок с элементами. есть страница с возможностью оставлять комментарии к этим элементам с помощью штатного компонента forum.topic.reviews. Стоит задача проверить, есть ли непрочитанные комментарии текущим авторизованным пользователем и, если есть, получить их количество. Возможно ли штатными средствами это сделать? Или может необходимо использовать другой компонент и использовать некоторое АПИ?