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;
}
}
?>Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Материалы этого сайта находятся под лицензией Creative Commons Attribution-Share Alike 3.0.