ertttert
Books-CMS.clan.su

Изменение запросов других модулей с помощью hook_query_alter()

Этот хук используется для изменения запросов, созданных где угодно в Drupal, без непосредственного изменения кода самих модулей. Все объекты запроса динамической выборки передаются через функцию hook_query_alter() методом execute() непосредственно перед компиляцией строки запроса. Это предоставляет модулям возможность произвольной обработки запроса. Функция hook_query_alter() принимает единственный параметр — сам объект запроса выборки. В качестве примера работы hook_query_alter() в модуле dbtest выполняется изменение двух запросов. Первое изменение происходит, когда обнаруживается запрос с тегом db_test_alter_add_range. В этом случае в запрос добавляется диапазон (0, 2). Второе изменение выполняется при обнаружении запроса с тегом db_test_alter_add_join. В этом случае выполняется соединение таблиц test и people.
На заметку! Теги (tag) — это строки, идентифицирующие запрос. У запроса может быть любое количество тегов. Теги используются для пометки запросов, чтобы хуки изменения могли определить, нужно ли им срабатывать. Они должны содержать только строчные буквы, цифры и подчеркивания, причем начинаться обязательно с буквы — т.е. удовлетворять правилам создания идентификаторов в PHP.
function dbtest_query_alter(SelectQuery $query) {
 // Можно добавить диапазон.
 if ($query->hasTag('db_test_alter_add_range')) {
 $query->range(0, 2);
 }

 // Или добавить соединение.
 if ($query->hasTag('db_test_alter_add_join')) {
 $people_alias = $query->join('test', 'people', "test_task.pid=people.id");
 $name_field = $query->addField('name', 'people', 'name');
 $query->condition($people_alias . '.id', 2);
}
...
?>
Всего комментариев: 0
Имя *:
Email *:
Код *:


Бесплатный конструктор сайтов - uCoz