Drupal API

hook_db_rewrite_sql

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

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

Версии
5 – 6
hook_db_rewrite_sql($query, $primary_table, $primary_field, $args)

Переписывает запросы к БД, обычно для контроля доступа.

Добавляет к запросу операторы JOIN и WHERE, а также определяет, нужно ли поле $primary_field делать DISTINCT. Для нод первичное поле всегда называется 'nid', для терминов таксономии — 'tid', для словарей — 'vid', а для комментариев — 'cid'. Первичная таблица — это таблица, из которой берутся первичные объекты (node, file, term_node и т.д.).

Хук должен возвращать ассоциативный массив с возможными ключами 'join', 'where' и 'distinct'. Значение 'distinct' должно быть равно 1, если Вы хотите поле $primary_field сделать DISTINCT.

Параметры

$query Запрос, который будет перезаписан.

$primary_table Имя или псевдоним таблицы, содержащей первичный ключ для этого запроса. Часто использутся имена таких таблиц: '{blocks}', '{comments}', '{forum}', '{node}', '{menu}', '{term_data}' и '{vocabulary}'. Но проще в параметре $primary_table задавать псевдонимы для этих таблиц: 'b', 'c', 'f', 'n', 'm', 't' и 'v' (соответственно).

$primary_field Имя основного поля.

$args Массив дополнительных аргументов.

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

Ассоциативный массив с ключами 'join', 'where' и 'distinct', указывающие, какие операторы JOIN и WHERE нужно добавить к запросу, а также нужно ли первичное поле в запросе делать DISTINCT.

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

▸ 1 функция вызывает hook_db_rewrite_sql()

▾ 1 функция вызывает hook_db_rewrite_sql()

_db_rewrite_sql in includes/database.inc
Вспомогательная функция для db_rewrite_sql().

Код

<?php
function hook_db_rewrite_sql($query, $primary_table, $primary_field, $args) {
  switch ($primary_field) {
    case 'nid':
      // this query deals with node objects
      $return = array();
      if ($primary_table != 'n') {
        $return['join'] = "LEFT JOIN {node} n ON $primary_table.nid = n.nid";
      }
      $return['where'] = 'created >' . mktime(0, 0, 0, 1, 1, 2005);
      return $return;
      break;
    case 'tid':
      // this query deals with taxonomy objects
      break;
    case 'vid':
      // this query deals with vocabulary objects
      break;
  }
}
?>
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

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

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

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

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