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)