Менять товар каждые 24 часа

Добрый день, суть такова, есть отдельная страница называется — Товар дня, и у него имеется таймер 24 часа, я поставил через ТВ каждому товару чекбокс с Товар дня, подскажите пожалуйста как сделать чтоб Товар дня менялся каждые 24 часа из выбранных чекбоксов? сейчас просто вывел через просто
[[!pdoPage?
                &parents=`2,3,4`
                &where=`{"template":"6"}`
                &tpl=`tpl.spec`
                &includeTVs=`typeimg,price_spec,price_old_spec,check_price`
                &limit=`1`
                &tvFilters=`check_price==1`
                 ]]

спасибо заранее
atrox
04 июня 2019, 09:37
modx.pro
1
716
0

Комментарии: 5

Андрей
04 июня 2019, 17:21
1
+3
Была такая задача, правда товар выбирался не по чекбоксам, а указывался в TV с множественным выбором

Создаем TV product_of_the_day с типом ввода Список (множественный выбор), в возможных значениях там указываем

@SELECT `pagetitle` AS `name`,`id` FROM `[[+PREFIX]]site_content` WHERE `published` = 1 AND `deleted` = 0 AND (`template` = 16) // Тут вместо 16 ваш id шаблона с товаром

Дальше плагин на событие OnLoadWebDocument
Суть такова — товар выбирается по номеру дня недели, т.е. в списке первый товар будет на понедельник, второй на вторник и т.д.
<?

// Плагин на событие OnLoadWebDocument

$products_of_the_day = $modx->getObject('modTemplateVarResource', [
	'contentid' => 4, // id ресурса к которому привязан TV
	'tmplvarid' => 80 // id TV
]);

unset($_SESSION['product_of_the_day']);

if ($products_of_the_day) {
	
	$day = date('N');
	
	$products_of_the_day = explode('||', $products_of_the_day->get('value'));
	
	if (!empty($products_of_the_day) && isset($products_of_the_day[$day - 1])) {
		$_SESSION['product_of_the_day'] = $products_of_the_day[$day - 1];
	}
	
}

В шаблоне получаем ID товара дня, можем делать с ним что угодно, в вашем случае подставить в вызов сниппета
{set $product_of_the_day_id = $.session.product_of_the_day}
    G'iyosiddin
    13 июня 2019, 16:00
    0
    Привет, а где надо написат это
    @SELECT `pagetitle` AS `name`,`id` FROM `[[+PREFIX]]site_content` WHERE `published` = 1 AND `deleted` = 0 AND (`template` = 16) // Тут вместо 16 ваш id шаблона с товаром
      atrox
      14 июня 2019, 11:12
      0
      что то все сделал как вы написали
      $products_of_the_day = explode('||', $products_of_the_day->get('value'));
      от сюда вырезал explode, так как с ним показывал массив, после того как вырезал, у меня показывает сегодня в Пятницу цифру 2, хотя откуда эта цифра не понятно, по идее как вы говорите должно показывать ID товара, и еще, у меня всего 3 товара
      вот код плагина
      <?php
      // Плагин на событие OnLoadWebDocument
      
      $products_of_the_day = $modx->getObject('modTemplateVarResource', [
      	'contentid' => 11378, // id ресурса к которому привязан TV
      	'tmplvarid' => 65 // id TV
      ]);
      
      unset($_SESSION['product_of_the_day']);
      
      if ($products_of_the_day) {
      	
      	$day = date('N');
      	
      	$products_of_the_day =  $products_of_the_day->get('value');
      		
      	if (!empty($products_of_the_day) && isset($products_of_the_day[$day - 1])) {
      		$_SESSION['product_of_the_day'] = $products_of_the_day[$day - 1];
      	}
      	
      }
      вот вызов через ТВ
      @EVAL return $modx->runSnippet('pdoResources',array('parents'=>11378,'limit'=>0,'tpl'=>'@INLINE [[+pagetitle]]==[[+id]]','outputSeparator'=>'||'));
      спасибо заранее
        Андрей
        14 июня 2019, 12:16
        +1
        Все верно, в $products_of_the_day массив и должен быть, он содержит в себе ID товаров, где ключ массива это день, который получается из $day = date('N') (возвращает число от 1 до 7). Значение массива это ID товара.

        Пример
        $products_of_the_day = [22, 33, 44, 55, 66, 77, 88] // id товаров
        // $day допустим вернул 5 - это пятница
        // $products_of_the_day[$day - 1] вернет id товара 66

        Если у вас всего 3 товара, то можете указать условие для $day, что бы заменять его значение

        // не проверял на работоспособность
        $day = date('N');
        
        $products_of_the_day = explode('||', $products_of_the_day->get('value'));
        
        if (count($products_of_the_day) < 7) {
            $day = $day - count($products_of_the_day)
        }
          atrox
          14 июня 2019, 14:25
          0
          сработало, спасибо за помощь)
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5