UMIhelp

Разработка дополнительного функционала => Custom макросы => Тема начата: muldy от 19 Октября 2013, 02:32:59

Название: Обновление товаров с помощью крон!?
Отправлено: muldy от 19 Октября 2013, 02:32:59
Здравствуйте!
Есть товары на сайте, у них созданы поля с датой те туда устанавливается значение до конца акции, но как становится понятно это число вычисляется и устанавливается  при открытии страницы!
Но вот как сделать возможным автоматическое обновление этого числа не пойму!
Пришел к выводу что лучше использовать крон, но как и какие параметры ему задать?
Название: Re:Обновление товаров с помощью крон!?
Отправлено: admin от 19 Октября 2013, 08:28:33
Цитировать
автоматическое обновление этого числа

у вас есть поле в котором указана дата и если она меньше чем текущее время товар не выводим, так? или о какои обновлении идет речь?
Название: Re:Обновление товаров с помощью крон!?
Отправлено: muldy от 20 Октября 2013, 15:37:13
Да именно про это и говорю, что товар не надо выводить!)
Название: Re:Обновление товаров с помощью крон!?
Отправлено: admin от 20 Октября 2013, 15:49:01
по крону вы можете отключать данные страницы, но можете также воспользоваться и встроенным решением Управление контентом (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
Название: Re:Обновление товаров с помощью крон!?
Отправлено: muldy от 20 Октября 2013, 15:58:10
Это решение я видел но проблема в том что мне надо, оставить страницу а не отключать ее!
Те мне всего требуется обновлять дату в поле, и все а остальной функционал уже готов)
Название: Re:Обновление товаров с помощью крон!?
Отправлено: admin от 20 Октября 2013, 16:09:55
тогда я не совсем понял, для чего вам обновлять дату в поле и по какому признаку она должна обновляться.

Но, в любом случае, это скорее всего задача cron.php. Напишите event, который будет срабатывать на событие cron. Можете посмотреть как это происходит с событием обновление валют в emarket модуле (обработчик в файле /classes/modules/emarket/events.php, строчка "new umiEventListener('cron', 'emarket', 'onCronSyncCurrency');")
Название: Re:Обновление товаров с помощью крон!?
Отправлено: muldy от 20 Октября 2013, 16:25:06
Обновляется дата и ставиться статус товара в поле!
По событию буду разбираться!
Название: Re:Обновление товаров с помощью крон!?
Отправлено: muldy от 22 Октября 2013, 19:11:09
Решил поделится способом реализации, данной задачи!

Итак:
Есть поле "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' с нужной переодичностью.

В итоге мы получаем, при отображении товаров Количество дней, которое осталось до конца акции для конкретного товара!