hook_nodeapi

Хочешь помочь с переводом? Это очень просто и быстро. Лишь зарегистрируйся, и можешь тут же начать переводить.

developer/hooks/core.php, строка 1358

Версии
5 – 6
hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL)

Выполняет действия над нодами.

Несмотря на то, что имя может сбить с толку, hook_nodeapi() не зарезервирован только для модулей, которые определяют свои типы нодов. Наоборот, он позволяет модулям реагировать на действия, влияющие на все виды нод, не зависимо от того, определил ли соответствующий модуль ноду.

В основном hook_nodeapi() используется в связке с hook_form_alter(). Модули используют hook_form_alter() для дополнения форм редактирования новыми элементами и hook_nodeapi() для чтения и записи значений этих элементов из и в базу данных.

Не используйте данный хук для выполнения операций только с типом ноды, созданного вашим модулем. Вместо этого используйте хуки предназначенные для модулей создающих новый тип ноды, такие как hook_insert() и hook_form(). Но для некоторых операций, таких как 'delete revision' или 'rss item', нет соответствующего хука, поэтому даже если модуль определяет тип ноды, необходимо использовать hook_nodeapi().

Параметры

&$node Нода, над которой будет производиться действие.

$op Тип выполняемого действия. Возможные значения:

  • 'alter': массив $node->content отрендерен, так что тело ноды или тизер прошли фильтры и теперь содержат HTML. Это действие должно использоваться только тогда, когда необходимы подстановка текста, фильтрация или иные операции с необработанным (raw) текстом.
  • 'delete': Нода удаляется.
  • 'delete revision': Удаляется редакция ноды. Вы можете удалить данные связанных с редакцией.
  • 'insert': Нода создается (добавлена в базу данных).
  • 'load': Нода готова к загрузке из базы данных. Этот хук может быть использован для добавления дополнительных данных в это время.
  • 'prepare': Нода готова к отображению в форме добавления/редактирования.
  • 'prepare translation': Создается клон ноды для перевода. Вы можете загружать дополнительные данные, либо копировать значения $node->translation_source.
  • 'print': Подготовлен образ ноды для печати. Используется для получения адаптивного для принтера представления ноды в book_module.
  • 'rss item': Создана лента RSS. Модуль может получить доступ к свойствам, определнным для элемента RSS ленты данной ноды. Смотрите comment_nodeapi() и upload_nodeapi() для примера. Для добавления или удаления содержимого элементов RSS ленты можно также воспользоваться модификацией переменной $node.
  • 'search result': Нода отображается как результат поиска. Если вы хотите вывести дополнительную информацию с результатами, воспользуйтесь этим возвращаемым значением.
  • 'presave': Нода прошла проверку и вскоре будет сохранена. Модули могут использовать этот хук, чтобы внести изменения в ноду, прежде чем она сохранится в базу данных.
  • 'update': Существующая нода обновляется.
  • 'update index': Нода почти проиндексирована. Если вы хотите проиндексировать дополнительную информацию, которая не видна через nodeapi посредством операции 'view', то вы должны вернуть её из nodeapi сейчас.
  • 'validate': Пользователь только что закончил редактирование данных ноды и пытается предпросмотреть или сохранить ее. Этот хук может использоваться для проверки данных ноды. Ошибки нужно устанавливать с помощью функции form_set_error().
  • 'view': Произошла сборка содержимого ноды перед рендерингом. Модуль может добавлять элементы $node->content до рендеринга. Этот хук будет вызван после hook_view(). Формат $node->content такой же, как в API формах.
$a3
  • Для 'view', передается параметр $teaser из node_view().
  • Для 'validate', передается параметр $form из node_validate().
$a4
  • Для 'view', передается параметр $page из node_view().

Возвращаемое значение

Значение зависит от операции.

  • Операции 'presave', 'insert', 'update', 'delete', 'print' и 'view' не возвращают значения.
  • Операция 'load' должна вернуть массив, содержащий пары поля => значения, которые, вследствие, будут объединены в объект ноды.

Связанные темы

Код

<?php
function hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  switch ($op) {
    case 'presave':
      if ($node->nid && $node->moderate) {
        // Reset votes when node is updated:
        $node->score = 0;
        $node->users = '';
        $node->votes = 0;
      }
      break;
    case 'insert':
    case 'update':
      if ($node->moderate && user_access('access submission queue')) {
        drupal_set_message(t('The post is queued for approval'));
      }
      elseif ($node->moderate) {
        drupal_set_message(t('The post is queued for approval. The editors will decide whether it should be published.'));
      }
      break;
    case 'view':
      $node->content['my_additional_field'] = array(
        '#value' => theme('mymodule_my_additional_field', $additional_field),
        '#weight' => 10,
      );
      break;
  }
}
?>
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Вход в систему