Менять товар каждые 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`
]]
спасибо заранее
Комментарии: 5
Была такая задача, правда товар выбирался не по чекбоксам, а указывался в TV с множественным выбором
Создаем TV product_of_the_day с типом ввода Список (множественный выбор), в возможных значениях там указываем
Дальше плагин на событие OnLoadWebDocument
Суть такова — товар выбирается по номеру дня недели, т.е. в списке первый товар будет на понедельник, второй на вторник и т.д.
В шаблоне получаем ID товара дня, можем делать с ним что угодно, в вашем случае подставить в вызов сниппета
Создаем 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}
Привет, а где надо написат это
@SELECT `pagetitle` AS `name`,`id` FROM `[[+PREFIX]]site_content` WHERE `published` = 1 AND `deleted` = 0 AND (`template` = 16) // Тут вместо 16 ваш id шаблона с товаром
@SELECT `pagetitle` AS `name`,`id` FROM `[[+PREFIX]]site_content` WHERE `published` = 1 AND `deleted` = 0 AND (`template` = 16) // Тут вместо 16 ваш id шаблона с товаром
что то все сделал как вы написали
вот код плагина
$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'=>'||'));
спасибо заранее
Все верно, в $products_of_the_day массив и должен быть, он содержит в себе ID товаров, где ключ массива это день, который получается из $day = date('N') (возвращает число от 1 до 7). Значение массива это ID товара.
Пример
Если у вас всего 3 товара, то можете указать условие для $day, что бы заменять его значение
Пример
$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)
}
сработало, спасибо за помощь)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.