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
.
Связанные темы
Код
<?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;
}
}
?>
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии