hook_nodeapi

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

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

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

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

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

Если вы пишете «нода-модуль», не используйте этот хук для выполнения действий над вашим типом нод. Вместо этого, используйте хуки установленные для нода-модулей, такие как hook_insert() и hook_form().

Параметры

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

$op What kind of action is being performed. Possible values:

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

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

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

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

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

Код

<?php
function hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  switch ($op) {
    case 'submit':
      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;
  }
}
?>
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

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