Drupal 7 Как вызвать / перехватить событие узла "Опубликовать"?

В Drupal 7 я хочу добавить дополнительный процесс, когда узел будет опубликован. Как я могу сработать, когда сработает событие "Опубликовать" этого узла?

Есть ли хук для узла "Опубликовать"?

4 ответа

Решение

Айеш К ответ хороший.
И я также нашел другую альтернативу, используя Drupal "Rules" вызвать событие публикации.

С основной функциональностью, нет крючка. Но модуль Revisioning предоставляет один.

Однако вы можете обойти это, проверив состояние узла при обновлении OP. Не очень умный, хотя.

<?php
function MYMODULE_node_update($node){
  if (isset($node->original->status) && $node->original->status == 0 && $node->status == 1){
     MYMODULE_mymagic_func($node);
  }
}

Как пишет Айеш К, мне также не известны основные функции. Его обходной путь работает, но пропускает случай, когда недавно созданный узел публикуется немедленно.

Поэтому я расширил код и обернул его в функцию:

/**
 * Checks if a node is being published.
 *
 * @param object $node
 *   The node to check.
 *
 * @return bool
 *   TRUE if node is now published and
 *     1) was not published before or
 *     2) did not exist before;
 *   FALSE in all other cases.
 */
function MYMODULE_node_is_being_published(&$node) {

  if (isset($node->original)) {
    return (
      isset($node->original->status) && 
      $node->original->status == 0 && 
      $node->status == 1
    );
  }
  else {
    return $node->status == 1;
  }
}

Если триггерная функция предназначена для узла обновления сама, измените функцию MYMODULE_node_update($node) на функцию MYMODULE_node_presave($node)

Другие вопросы по тегам