При срабатывании крон должны удаляться страницы из определенного типа узла, но хук не срабатывает.

Главные вкладки

Аватар пользователя natalikarn natalikarn 8 ноября 2020 в 23:03

Всем здравия!

Есть вопрос.
Мне нужно, чтобы при срабатывании крон удалялись страницы из моего узла. Вот код, он работает я проверила в тестовом режиме, страницы удаляются, но у меня не получается повесить это задание на выполнения крон. Пишу его в модуле темы и не работает, а почему не понимаю..

function bootstrap_barrio_cron() {
  $nodes = \Drupal::entityQuery("node")
// $nodes = $this->entityQuery->get('id_num') // такой вариант с названием типа узла почему-то не работает
    ->condition('created', strtotime('-1 days'), '>=')
    ->condition('field_status', '1')
    ->execute();

  $storage_handler = \Drupal::entityTypeManager()->getStorage("node");

  if (!empty($nodes)) {
    foreach ($nodes as $key => $value) {
      $node = $storage_handler->load($value);
      $node->delete($node);
    }
  }
}

Возможно идея поместить этот хук в модуль темы в корне неправильная, тогда где ему место?

Комментарии

Аватар пользователя OldWarrior OldWarrior 8 ноября 2020 в 23:28

natalikarn wrote:... удаляться страницы из определенного типа узла ... страницы из моего узла

Гугль-переводчиком пользовались? Я почти ничего не понял.

natalikarn wrote: Возможно идея поместить этот хук в модуль темы в корне неправильная, тогда где ему место?

Всё верно. В смысле - в корне неправильно.
Хуки подобного типа должны определяться в кастомном модуле, а не в теме. Я напомню, что вызов hook_cron как правило инициализируется планировщиком/кронтабом линукса, который вообще не использует функции темы.

Аватар пользователя ivnish ivnish 9 ноября 2020 в 14:18

Не совсем так. По умолчанию его дёргает веб-крон при посещении страниц. Но на сложных сайтах просто делают, чтобы крон запускался через линуксовый планировщик.
Но я тоже соглашусь, что этому хуку не место в теме оформления

Аватар пользователя OldWarrior OldWarrior 9 ноября 2020 в 14:49

Тогда я тоже соглашусь, что правильнее написать:

Вызов hook_cron часто инициализируется планировщиком/кронтабом линукса, при этом вообще не затрагиваются функции темы.

Аватар пользователя natalikarn natalikarn 10 ноября 2020 в 17:03

А кто скажет, почему такой вариант не работает -

$nodes = $this->entityQuery->get('id_num')

Получается, что код постоянно дергает перебором все ноды и делает фильтр по полю со статусом, а надо, чтобы только определенный тип нод проверял (entity_type) в чем там моя ошибка)