Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Активность элемента

00 голосов
8
Есть елементы в БД, у которых задано поле "Окончание активности". При этом эта дата уже давно прошла. Однако элемент продолжает быть "Активным" - то есть соответствующий флажок установлен.
Как переводить эти элементы в состояние "Не активен" по истечении "окончания активности"?
спросил 22 Май, 13 от Arahnid (280 баллов)

8 Ответы

00 голосов
пишите обращение в ТП - разберемся)
ответил 22 Май, 13 от Nael (220 баллов)
00 голосов
написали, но часть вопроса, все равно открыта.
При ответе на этот вопрос я просто ожидал указание "на место" (возможно /bitrix/php_interface/init.php?), где можно деактивировать элементы и как лучше (с точки зрения производительности) всего это сделать (то есть получить список, и изменить свойство у каждого из элементов).
Дело в том, что есть еще функциональность которая необходима. У элементов, в данном информационном блоке, есть некоторое свойство, которое отвечает за отображение этих элементов в определенном списке (скажим топ элементов). Но в этом списке элементы должны показывать только скажем 2 недели после даты добаления, а после истечения этого срока они должны из списка топа уходить, но продолжать еще быть активными некоторое время.
Вот для решения подобной задачи, я намеривался использовать тоже "место", и тот же подход.
ответил 23 Май, 13 от Arahnid (280 баллов)
00 голосов
Цитата
Артем пишет:
Как переводить эти элементы в состояние "Не активен" по истечении "окончания активности"?

Стандартного функционала нет. Сходу придумывается лишь некий периодический агент, который придется писать самому.
ответил 12 Авг, 13 от Pomnep (13,960 баллов)
00 голосов
Цитата
Евгений Жуков пишет:

Стандартного функционала нет. Сходу придумывается лишь некий периодический агент, который придется писать самому.
я так и подозревал. Значит напишим. тему можно считать исчерпанной ;)
ответил 12 Ноя, 13 от Arahnid (280 баллов)
00 голосов
хм... а вот вознмк все таки вопрос.
Я нашел те элементы которые нужно деактивировать. А как собственно правильно это сделать?
Проблема в том, что я пытался это сделать при помощи CIBlockElement::Update следующим образом:
Код
          $el = new CIBlockElement;
          $arProps = Array(
                       "ACTIVE"         => "N"
          );
          $res = $el->Update($arFields["ID"], $arProps);

в результате элемент становится неактивным, но при этом удаляются все его другие свойтсва. Оно и в общем очевидно, я ведь их здесь не задал.
Ладно, смотрим другой метод CIBlockElement::SetPropertyValues
Код
CIBlockElement::SetPropertyValues($arFields["ID"],$ID_IB,"N","ACTIVE");

Не работает. Видимо потому что свойство активности не добавлено мной, а явлеется предопределенным.



Суть вопроса: единственный путь который у меня есть - использовать CIBlockElement::Update, но при этом мне необходимо прочитать все остальные свойства (в том числе и созданные мной) и при использовании этого update занести их все в $arProps? или же есть способ похожий на второй?

Ибо информационный блок, с которым приходится работать имеет большое количество собственных свойств. Читать их, а потом записывать их же, как-то не рационально, тогда как достаточно было бы изменить только одно. Тем более в условиях ограниченности ресурсов веб хостинга.
ответил 19 Фев, 14 от Arahnid (280 баллов)
00 голосов
У Вас как-то CIBlockElement::Update неверно работает. Посомтрите, может уже какие-то обработчики висят на нем?
ответил 11 Июнь, 14 от Pomnep (13,960 баллов)
00 голосов
спасибо. точно :)
ответил 09 Окт, 14 от Arahnid (280 баллов)
00 голосов
Т.е. функционала автоматического изменения активности элемента в зависимости от установленных даты начала активности и даты окончания активности так и нет?
ответил 10 Фев, 15 от Evanes (100 баллов)

Похожие вопросы

0 голосов
1 ответ
0 голосов
4 ответов
+1 голос
0 ответов
спросил 25 Март, 16 от loony (540 баллов)