Есть запрос, который выдаёт то, что мне надо.
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
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.")
Комментарии
http://drupalsn.ru/blogs/development/291
Это я уже читал, но он мне мой вопрос не проясняет.
читайте пока не придёт прозрение
Это, несомненно, содержательный ответ, но просветление не наступает.
Мне бы пример.
смотрите стандартный обработчик views/modules/user/views_handler_filter_user_current.inc
почти то что надо
Смотрю сюда http://views.doc.logrus.com/classviews__query.html и не могу понять что мне надо.
Казалось бы нужно add_where, но оно делает вроде не то, что нужно.
Сделал так
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);
}
}
}
Вроде работает как надо.
Непонятно зачем in_operator
render тож мимо кассы
яб так сделал, хз работает или нет )
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);
}
}
Если поставить после ***CURRENT_USER*** скобку ), то вполне себе, работает.