Добрый день.
Мне нужно, чтобы определенные отображения дополнительно фильтровались по uid пользователей, который прописаны в определенном поле (собрал список id пользователей, которые должны видеть документ в списке), но views не имеет возможности отфильтровать по текущему id пользователя.
Гугл говорит, что надо реализовать некий хук _pre_execute(&$view), в моем случае он должен быть чем-то вроде
switch($view->name) {
// If it's my view
case 'my_view':
switch($view->current_display) {
// If it's the block on the author page
case 'block_5':
// Set the extra argument
$view->build_info['query_args'][2] = $view->build_info['query_args'][1];
// Rewrite the query
$view->build_info['query'] = "SELECT ... ";
break;
}
}
}
Вопрос - куда его писать? Нигде не пишут в какой именно файл стоит дописать эту функцию.
Комментарии
http://drupal.org/node/231276
А без создания своего модуля это никак нельзя сделать?
Знаю, что можно темизировать, например, view-views.tpl.php, но это для фильтра вообще не лучший выход.
Можно более конкретную ссылку в указанном источнике?
Возьмите аргумент, и напишите в нем PHP, который возвращает нужный список nid в зависимости от uid,которые вы прочитаете из базы. Должно сработать.
http://drupal.org/project/myhook
И пишеш свой хук прямо в окошке админки
Сел и написал модуль....)))
Сел и написал сайт прямо в окошке админки
Да, именно это мне и не нравится, что можно много чего написать прям в окошке админке - если больше одного однотипного элемента, то с 90% вероятностью можно что-нибудь где-нибудь забыть.
А все-таки вопрос остался открытым.
Допустим, у меня есть вьюшка, которая выбирает документы по определенной форме, в каждом документе есть дополнительный вычисляемый параметр.
Можно ли как-то добавить в отображение дополнительный фильтр по этому параметру. Дошел вот до чего, но не помогает как-то:
global $user;
/**
* Список вьюшек и полей в документах в соответствии с которыми делается
* отбор. Отбор делается по nid текущего пользователя
*/
$views = array(
"erp_cabinet" => array(
0 => "field_notify_user"
)
);
if (!empty($views[$view->name])) {
$me = new dnPerson($user->uid);
$condition = array(
"field" => "field_data_field_notify_user.field_data_field_notify_user_nid",
"operator" => "=",
"value" => $me->getPersonNode()->nid
);
$view->query->where[0]['conditions'][] = $condition;
}
//dsm($view);
}