Views create SQL query from UI (without use Views API)

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

Аватар пользователя mbaev mbaev 11 июля 2014 в 11:05

Всем доброго времени суток.
Вопрос простой - возможно ли во views создание конструкции типа:

WHERE (
  (

  )
  AND
  (
    (

      (

      )
      AND
      (

      )
    )
    OR
    (

    )
  )
)

Мой вариант не подходит:
____________________________

____________________________
views UI 2

P.S.
Drupal 7.28
Views 7.x-3.8

Комментарии

Аватар пользователя mbaev mbaev 11 июля 2014 в 12:07

"ХулиGUN" wrote:
По моему вы что то напутали со вложенностью условий. Опишите словами Ваши критерии фильтрации

Есть ноды, которые могут иметь различные статусы:
1. Нода опубликована в библиотеке. (field_published_in_repository)
2. Ноду доступна для пользователей той же компании, что и автор ноды. (field_shared_inside_customer)
3. Нода может находится в стадии транзакции (выставляется модеротором. field_model_in_transition)

Необходимо отображать опубликованные (стандартный друпаловский флаг) ноды не находящиеся в стадии транзакции и они должны быть либо опубликованы в библиотеке, либо они доступны для клиентов/сотрудников той же компании, что и автор, при условии, что залогинившийся пользователь - это клиент/сотрудник той же компании.

За последнее отвечает фильтр Customer authors - он берет компанию залогинившегося пользователя (компания - это термин) далее берет всех пользователей этой компании и добавляет:
node.uid in (1,2,3,4,...). К примеру если мы с вами клиенты/сотрудники одной компании, то при создании вами ноды вы можете выставить галочку field_shared_inside_customer, тогда все клиенты/сотрудники нашей с вами компании могут видеть эту ноду.

Надеюсь, доступно объяснил.

Аватар пользователя mbaev mbaev 11 июля 2014 в 13:08

"ХулиGUN" wrote:
у Вас неправильно фильтрация изначально настроена

Собственно вопрос и заключается в том как сделать такую конструкцию. Я не вижу возможности сделать вложенность группы в группу.
Для этой реализации, полагаю, мне необходимо было бы в группу вложить фильтр и группу. Между ними должен был быть OR, а во вложенной группе должен быть AND.
Буду вам благодарен если вы покажете скрин с такой настройкой (пусть будут рандомные фильтры - главное конструкция).

P.S. Для меня нет проблем написать свой фильтр выполняющий эту вложенность, но хотелось бы повысить свой скилл и образованность, т.к. есть ощущение, что можно это сделать и через UI.

----------
UPD: исправил тавтологию...

Аватар пользователя mbaev mbaev 11 июля 2014 в 14:39

"ХулиGUN" wrote:
нужно зырить какой запрос формирует сама вьюха...

Не покажу) Берегу ваш мозг.

"ХулиGUN" wrote:
https://www.drupal.org/node/409808 - может пригодится

Это я все знаю. С программной частью у меня нет проблем. Могу писать любые филды, фильтры и зависимости. В общем using VIews API

"ХулиGUN" wrote:
поэксперементируйте)))

Такой фильтр я написал через 15 минут после создания поста)))

Чуть позже опишу решение.

Аватар пользователя mbaev mbaev 11 июля 2014 в 17:25

Да это пожалуйста:
В моем случае добавляется join:

LEFT JOIN {field_data_field_shared_inside_customer} field_data_field_shared_inside_customer ON node.nid = field_data_field_shared_inside_customer.entity_id

и доолнительная проверка во where

(field_shared_inside_customer_value = '1') AND (node.uid IN  ('3', '4', '18'))

предварительно выбрав пользователей компании текущего юзверя.

Аватар пользователя mbaev mbaev 12 июля 2014 в 17:05

"ХулиGUN" wrote:
и views_php

Smile я как раз пытаюсь избавиться от этого модуля, так как именно им затыкались все дыры раньше.