[РЕШЕНО] Как написать views'у фильтр.

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

Аватар пользователя smartchecker smartchecker 19 июня 2011 в 11:47

Есть запрос, который выдаёт то, что мне надо.

SELECT j.rid, to_char(j.request_date, 'DD-MM-YYYY') AS request_date, request_type.type, request_object.obj_name,
                   j.request_org, j.request_person, j.request_phone, j.request_point, request_state.state_name
FROM journal_of_requests AS j
           JOIN request_type ON request_type_id = rtid
           JOIN request_object ON request_object_id = oid
           JOIN request_state ON request_state_id = sid
WHERE j.request_object_id IN (SELECT rop.oid FROM request_object_perm AS rop WHERE rop.uid=".$user->uid.")
ORDER BY j.rid

Views'у через views api я описал свою таблицу journal_of_requests, соотв. могу вытащить поля.

Как сделать вот этот фильтр по пользователю?

WHERE j.request_object_id IN (SELECT rop.oid FROM request_object_perm AS rop WHERE rop.uid=".$user->uid.")

Комментарии

Аватар пользователя smartchecker smartchecker 21 июня 2011 в 13:45

Сделал так

class journal_of_requests_handler_filter_request_object_id extends views_handler_filter_in_operator {
    function query() {

        global $user;

        $table = $this->query->ensure_table('journal_of_requests');
        $sql =  "request_object_id IN (SELECT rop.oid FROM request_object_perm AS rop WHERE rop.uid='".$user->uid."')";
        $this->query->add_where($this->options['group'], $sql);
        $this->field_alias = 'request_object_id';

    }

    function render($values) {

        $txt = $values->field_alias;
        if ($txt) {
            return $txt;
        } else {
            return parent::render($values);
        }
    }

}

Вроде работает как надо.

Аватар пользователя penexe penexe 21 июня 2011 в 14:03

Непонятно зачем in_operator
render тож мимо кассы

яб так сделал, хз работает или нет )

class journal_of_requests_handler_filter_request_object_id extends views_handler_filter {
  function query() {  
    $this->ensure_my_table();
    $where = "$this->table_alias.$this->real_field IN (SELECT rop.oid FROM {request_object_perm} AS rop WHERE rop.uid = ***CURRENT_USER***";
    $this->query->add_where($this->options['group'], $where);
  }
}