Переключение опции в зависимости от дня недели

Доброго времени суток. Может кто подскажет как решить задачку. Система: MODX и Minishop2
Имеем: например 100 товаров и 5 из них с допполем disableOrder (радиокнопка) и значением Вкл/Выкл. В определенный день недели для заказа доступен только один из этих 5 товаров (т.е. параметр стоит в положении Вкл, остальные Выкл). На текущий момент переключается это всё ручками, наступил следующий день -> захожу в предыдущий товар, отключаю -> захожу в товар, который должен быть сегодня для заказа -> включаю. При этом — в зависимости от статуса disableOrder кнопка «Заказать» меняется на «Недоступно» и отключается функционал добавления в корзину (т.е. простым условием подменяется на кнопку пустышку без функционала). При этом сами товары видны, но заказать товар нельзя. Можно ли это дело автоматизировать?
Из фенома можно изменить значение допполя (TV)?
Например:
загнать в переменную текущую дату
{set $ndt = '' | date : 'D'}
и условием проверить, если текущий день Mon, то… во тут затык. как через феном добрать до ресурса с определенным ID и установить значение disableOrder в 0 (т.е. Выкл)? Такое вообще возможно или же есть более простые способы?
Заранее благодарю за ответы или наводки на реализацию чего-то похожего.
Madao
10 июня 2019, 15:34
modx.pro
782
0

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

Наумов Алексей
10 июня 2019, 15:40
0
1. Делаем TV со значением дня недели от 1 до 5 (или 7 с выходными).
2. Запускаем сниппет msProduct с условием where, где проверяем этот tv на текущий день недели (функция date, format=N).
www.php.net/manual/ru/function.date.php
    Madao
    10 июня 2019, 16:32
    0
    Наверно я не полностью изложил свою мысль, поправил в тексте. Есть например 100 товаров, 5 из них доступны для заказа только в определенный день недели (с понедельника по пятницу). Эти 5 товаров всегда должны быть видны наравне со всеми, но кнопка заказать у них действовать не должна (по условию, завязанному на disableOrder, подменяется кнопка на пустышку). Решение с where не совсем подходит. Мне нужно переключение TV в другое значение в зависимости от дня недели, ибо кнопка заказа в 4 из 5 товарах не должна действовать в любой части сайта, где будет выводится список товаров.
    PS. Там вообще немного сложнее условие, пример: товар1 доступен для заказа только в понедельник с 12:00 до 16:00. В остальные дни и время они доступен для просмотра, но кнопка «Заказать» в нем действовать не должна. но мне хотябы понять как отключать его хотябы по одному параметру, а дальше я уже думаю, что пойму как переключать при соблюдении 2х суловий.
      Наумов Алексей
      10 июня 2019, 16:46
      0
      Такие вещи через cron решаются тогда уж.
      Запускаете скрипт по расписанию и меняете в нем у товаров что пожелаете.
        Madao
        10 июня 2019, 17:13
        0
        а есть примеры таких скриптов, с изменением значений в TV товара?
          Денис
          11 июня 2019, 09:32
          1
          0
          Зачем переключать что-то кроном, если ваш первый комментарий решит проблему. Только обработать условие нужно в шаблоне.
          Делаем tv поле флажками со значениями от 1 до 7 и назовем например его day_of_sale. И в чанках вывода товаров используем
          {if (''|date:'N') | in : ($_pls['tv.day_of_sale']|split:'||')}
              <button>Продается</button>
          {else}
             Не продается
          {/if}

          И еще по хорошему добавить такое же условие в плагин на событие msOnBeforeAddToCart, если покупка идет через минишоп, чтобы нельзя было вообще в корзину добавить товар
          switch($modx->event->name) {
              case 'msOnBeforeAddToCart':
                  $days = explode('||', $product->getTVValue('day_of_sale'));
                  if(!in_array(date('N'),$days)) {
                      $modx->event->output('Вы не можете купить этот товар сегодня.');
                  }
              break;
          }

          Все условия, естественно, можно сделать сложнее и любыми, но общий посыл думаю ясен.
          Madao
          10 июня 2019, 16:46
          0
          Поправлю себя:
          товар1 доступен для заказа только в понедельник с 12:00 до 16:00.
          товар1 доступен для заказа только в понедельник до 16:00.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        6