Views - добавить свой фильтр

Главные вкладки

Аватар пользователя Dark_Neo Dark_Neo 29 октября 2011 в 17:38

Добрый день.

Мне нужно, чтобы определенные отображения дополнительно фильтровались по uid пользователей, который прописаны в определенном поле (собрал список id пользователей, которые должны видеть документ в списке), но views не имеет возможности отфильтровать по текущему id пользователя.

Гугл говорит, что надо реализовать некий хук _pre_execute(&$view), в моем случае он должен быть чем-то вроде

function other_views_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;
       }
   }
}

Вопрос - куда его писать? Нигде не пишут в какой именно файл стоит дописать эту функцию.

Комментарии

Аватар пользователя Dark_Neo Dark_Neo 29 октября 2011 в 18:43

А без создания своего модуля это никак нельзя сделать?

Знаю, что можно темизировать, например, view-views.tpl.php, но это для фильтра вообще не лучший выход.

Можно более конкретную ссылку в указанном источнике?

Аватар пользователя validoll validoll 29 октября 2011 в 20:32

Возьмите аргумент, и напишите в нем PHP, который возвращает нужный список nid в зависимости от uid,которые вы прочитаете из базы. Должно сработать.

Аватар пользователя Dark_Neo Dark_Neo 30 октября 2011 в 12:07

Да, именно это мне и не нравится, что можно много чего написать прям в окошке админке - если больше одного однотипного элемента, то с 90% вероятностью можно что-нибудь где-нибудь забыть.

Аватар пользователя Dark_Neo Dark_Neo 11 декабря 2011 в 18:15

А все-таки вопрос остался открытым.

Допустим, у меня есть вьюшка, которая выбирает документы по определенной форме, в каждом документе есть дополнительный вычисляемый параметр.

Можно ли как-то добавить в отображение дополнительный фильтр по этому параметру. Дошел вот до чего, но не помогает как-то:

function dn_workflow_views_pre_execute(&$view) {
    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);
}