UMIhelp
Разработка дополнительного функционала => Custom макросы => Тема начата: muldy от 19 Октября 2013, 02:32:59
-
Здравствуйте!
Есть товары на сайте, у них созданы поля с датой те туда устанавливается значение до конца акции, но как становится понятно это число вычисляется и устанавливается при открытии страницы!
Но вот как сделать возможным автоматическое обновление этого числа не пойму!
Пришел к выводу что лучше использовать крон, но как и какие параметры ему задать?
-
автоматическое обновление этого числа
у вас есть поле в котором указана дата и если она меньше чем текущее время товар не выводим, так? или о какои обновлении идет речь?
-
Да именно про это и говорю, что товар не надо выводить!)
-
по крону вы можете отключать данные страницы, но можете также воспользоваться и встроенным решением Управление контентом (http://help.docs.umi-cms.ru/rabota_s_modulyami/modul_struktura/nastrojki_modulya_struktura/upravlenie_kontentom/) и тамже внизу ссылка на подробное объяснение Настройка актуальности публикации (http://help.docs.umi-cms.ru/rabota_s_modulyami/modul_struktura/redaktirovanie_stranic_ob_ektov_sajta/nastrojka_aktualnosti_publikacii/)
P.S. обратите внимание, что крон у вас должен быть включен. То есть ваш хостинг должен периодически запускать файл /cron.php
-
Это решение я видел но проблема в том что мне надо, оставить страницу а не отключать ее!
Те мне всего требуется обновлять дату в поле, и все а остальной функционал уже готов)
-
тогда я не совсем понял, для чего вам обновлять дату в поле и по какому признаку она должна обновляться.
Но, в любом случае, это скорее всего задача cron.php. Напишите event, который будет срабатывать на событие cron. Можете посмотреть как это происходит с событием обновление валют в emarket модуле (обработчик в файле /classes/modules/emarket/events.php, строчка "new umiEventListener('cron', 'emarket', 'onCronSyncCurrency');")
-
Обновляется дата и ставиться статус товара в поле!
По событию буду разбираться!
-
Решил поделится способом реализации, данной задачи!
Итак:
Есть поле "akciya" это страницы которые учавствуют в акции!
Также нужное поле с временем окончания акции "konec_akcii" и поле с отклюением акции "akciya_neaktivena".
И еще есть поле в котором указывается количество дней до окончания акции "do_konca_ostalos"
Идем в /classes/modules/catalog/, добавляем события в файл custom_events.php:
new umiEventListener("cron", "catalog", "updateObjects");
Далее создаем функцию которая будет выполнять, отбор и установку значения для товара:
public function updateObjects(){
// ВЫБИРАЕМ СТРАНИЦЫ В АКЦИЯХ
$pages = new selector('pages');
$pages->types('object-type')->id(83);
$pages->where('akciya')->equals('1');
$pages->where('akciya_neaktivena')->notequals(1);
foreach($pages as $page){
// ДАЛЕЕ ИСПОЛЬЗУЕМ ТЕКУЩУЮ ДАТУ И СРАВНИВАЕМ ЕЕ С ОКОНЧАНИЕМ АКЦИИ, ТЕ С ПОЛЕМ "konec_akcii"
И УСТАНАВЛИВАЕМ ЗНАЧЕНИИ:
$page->setValue('do_konca_ostalos', 'Здесь дни');
}
И В ИТОГЕ СОХРАНЯЕМ
$page->commit();
return true;
}
Все функция готова осталось на сервере запустить команду: /cron.php?module=catalog' с нужной переодичностью.
В итоге мы получаем, при отображении товаров Количество дней, которое осталось до конца акции для конкретного товара!