Drupal API

hook_update_index

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

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

Версии
5 – 6
hook_update_index()

Обновляет полнотекстовый индекс Друпала для данного модуля.

Модули могут реализовывать этот хук, если хотят использовать механизм полнотекстового поиска Друпала.

Этот хук вызывается при каждом запуске крона, в случае если включен модуль search.module. Модуль должен проверять какие элементы были изменены или добавлены с момента последнего запуска крона. Рекомендуется реализовать в модуле механизм, благодаря которому, будет индексироваться не больше элементов, чем указано в переменной 'search_cron_limit'

Вы также должны быть уверены, что индексирование не выполняется слишком долго и не будет остановлено из-за превышения максимального времени выполнения PHP-скрипта (PHP time limit). That's why you should update your internal bookkeeping multiple times per run, preferably after every item that is indexed.

Для элемента, который должен быть проиндексирован, вы должны вызвать функцию search_index() и передать ей содержимое в виде HTML-строки. Механизм индексирования проанализирует HTML и использует его, чтобы присвоить большие веса более важным словам (например, тем что встречаются в заголовках). Так же будут обновлены счетчики ссылок на ноды и эти счетчики будут использоваться при определении важности ноды.

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

Код

<?php
function hook_update_index() {
  $last = variable_get('node_cron_last', 0);
  $limit = (int)variable_get('search_cron_limit', 100);
  $result = db_query_range('SELECT n.nid, c.last_comment_timestamp FROM {node} n LEFT JOIN {node_comment_statistics} c ON n.nid = c.nid WHERE n.status = 1 AND n.moderate = 0 AND (n.created > %d OR n.changed > %d OR c.last_comment_timestamp > %d) ORDER BY GREATEST(n.created, n.changed, c.last_comment_timestamp) ASC', $last, $last, $last, 0, $limit);
  while ($node = db_fetch_object($result)) {
    $last_comment = $node->last_comment_timestamp;
    $node = node_load(array('nid' => $node->nid));
    // We update this variable per node in case cron times out, or if the node
    // cannot be indexed (PHP nodes which call drupal_goto, for example).
    // In rare cases this can mean a node is only partially indexed, but the
    // chances of this happening are very small.
    variable_set('node_cron_last', max($last_comment, $node->changed, $node->created));
    // Get node output (filtered and with module-specific fields).
    if (node_hook($node, 'view')) {
      node_invoke($node, 'view', false, false);
    }
    else {
      $node = node_prepare($node, false);
    }
    // Allow modules to change $node->body before viewing.
    node_invoke_nodeapi($node, 'view', false, false);
    $text = '<h1>'. drupal_specialchars($node->title) .'</h1>'. $node->body;
    // Fetch extra data normally not visible
    $extra = node_invoke_nodeapi($node, 'update index');
    foreach ($extra as $t) {
      $text .= $t;
    }
    // Update index
    search_index($node->nid, 'node', $text);
  }
}
?>
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

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

Что такое OpenID?
  • Регистрация
  • Забыли пароль?

Документация

  • Drupal 6
  • Константы
  • Файлы
  • Функции
  • Глобальные переменные
  • Разделы