У меня есть список неопубликованных узлов, созданных с помощью модуля Views . Я хотел бы, чтобы задание выполнялось 3 раза в день в указанное время. Каждый раз, когда выполняется задача, должен быть опубликован только один из узлов в списке. Как я могу это сделать?
Шаги, которые я пробовал
планировщик
Модуль Scheduler требует от вас указать точное время, когда вы хотите, чтобы узел был опубликован. Это усложняет задачу, так как мне придется работать, когда каждый узел должен быть опубликован.
Представления Массовые операции + Правила + Планировщик правил
С помощью модуля « Bulk Operations » можно создать список узлов, которые доступны для модуля « Правила ». Затем правила могут действовать в списке и публиковать узел в списке. Вы можете указать правилам публиковать только определенное количество узлов.
Это работает отлично. За исключением того, что не представляется возможным запланировать выполнение правила 3 раза в день.
Вы можете связать правило с заданием Cron основного сайта, но это не очень точно, поскольку задание Cron может выполняться более 3 раз.
Существует модуль планировщика правил (подмодуль правил), но не похоже, что вы можете использовать это условие правил. Также, похоже, нет способа указать время выполнения.
Планировщик заданий
Это позволяет вам установить время, но, похоже, оно не интегрируется с правилами или представлениями .
Ответы:
Использование модулей VBO, Правила и Правила Планировщика
О вашем подходе с использованием модулей Views Bulk Operations (VBO) , Планировщика правил и правил (подмодуль правил ), для которого вы написали « не представляется возможным запланировать запуск правила 3 раза в день ». Это мне кажется «А» действительный подход.
Что вам действительно нужно сделать, так это небольшая вариация того, что объясняется в учебном руководстве « Почасовые задачи» с использованием планировщика правил : в вашем случае вы должны использовать смещение 8 часов (вместо 1).
И, как объяснено в этом уроке: сначала запустите компонент вручную. (с этого момента каждые 8 часов правило будет выполняться снова).
Использование модулей Правила и правила Один раз в день
Существует довольно новый модуль, связанный с правилами, то есть модуль « Правила один раз в день ». Вот как это работает (согласно комментарию в выпуске 2495775 от владельца модуля):
То, как я понимаю / читаю это (пока еще не экспериментировал с этим), выглядит так:
Таким образом, создав 3 аналогичных правила, вы можете запустить 1 из них (скажем) в 6 часов вечера, еще один - около 2 часов дня, а один - в 10 часов вечера.
PS: я предполагаю, что этот вопрос о D7.
источник
stringtotime()
. Если «правила один раз в день» выполняются в полночь, и я хочу, чтобы мое правило выполнялось в 18:00, будет+18 hours
ли правильный способ написатьstringtotime
команду?Вы можете достичь этого с помощью некоторого кодирования.
Представление, в котором перечислены все узлы, опубликованные для планирования. Если вы также применяете DraggableViews, вы можете позволить администраторам переупорядочивать узлы путем перетаскивания, что всегда хорошо.
Пользовательская функция PHP,
publishdaily_get_top_node()
которая выполняет приведенное выше представление и возвращает NID для верхнего узла. Я бы порекомендовал поместить это в специальный мини-модуль.Правило, которое запускается при запуске cron и проверяет, пора ли публиковать новый узел (скажем, проверяя, находится ли время между 00.00 и 00.15 - в зависимости от того, как часто работает ваш cron). Если время пришло, запускается действие «загрузить узел» и используется
publishdaily_get_top_node()
для загрузки NID. Затем он публикует загруженный узел.Если вы хотите сделать его еще более чистым, вы пишете плагин Rules вместо просто функции PHP.
Если вы хотите, чтобы он был менее чистым, вы пишете функцию непосредственно в действии для выполнения произвольного PHP-кода.
Ссылка
источник
checking if the time is between 00.00 and 00.15
Как бы вы проверили время в правилах? Спасибо.Конфигурирование заданий cron с помощью команды cron в указанное вами время.
Создайте модуль для реализации hook_cron (). Чтобы обновить ваш первый узел как
$node->status = 1
.$ node-> status = 0, означает неопубликованный.
$ node-> status = 1, означает опубликовано.
Вы можете использовать views_get_view (), чтобы получить свой nid узла
источник
Независимо от того, используете ли вы правило или код для публикации одного узла сверху вашего представления, я считаю, что самый простой способ запланировать это - использовать Ultimate Cron .
Установите планировщик в Crontab, и для конкретной задачи вы можете точно сказать , когда вы хотите его запустить. Например, если вы хотите 8:00, 12:00 и 16:00, вы можете сделать правило:
Дальнейшая информация:
Похоже, Elysia Cron позволяет выполнять пользовательские задачи cron, которые могут позволить вам настроить конкретное правило (возможно, с помощью php-кода).
источник
Создайте правило следующим образом:
В / admin / config / workflow / rules / components / add
Создайте «Набор действий»: Имя = Отменить публикацию. Переменные содержимого: Тип данных = Метка узла = Имя машины узла = узел -Продолжить-
В / admin / config / workflow / rules Создайте «правило»: Имя = Отменить публикацию Правило Реагировать на событие = Узел> После сохранения нового содержимого Ограничить по типу = тип содержимого -Save-
То есть нет необходимости фильтровать контент при создании компонента или добавлять условие типа контента в правило.
Кроме того, проверьте настройку cron на вашем сайте в разделе Администрирование >> Конфигурация >> Система >> Cron (admin / config / system / cron).
Дайте мне знать, если у вас возникнут какие-либо вопросы или сомнения по этому поводу.
источник