Возможно ли в views сделать такое: нужно перед построением запроса определить переменную, а потом подставить ее в запрос? Хочу вначале определить текущего пользователя, а потом в зависимости от него в запросе фильтровать ноды по терминам.
Возможно я плохо вьюз изучил, но как там сделать такое? Например, если uid=2, то в фильтре tid = 120, а если uid=3, то tid=121. Пользователь имеется ввиду не автор ноды, а под которым человек вошел на сайт. Это с помощью аргументов возможно?
да.
попробуй щелкнуть на аргументы, выбрать пользователся, далее там понятно.
задай путь.
вызовы так: путь/2
тогда вьюс поймает число 2 и положит его в первый аргумент, который выше являлся uid пользователя.
если так, то путь/2/222
то уже 2 аргумента ловиться.
Аргумент - это фильтр, только динамический, на самом деле он еще много чего умеет.
а в блоках делается немного хитро:
добавляешь пользователя в аргументах, потом где есть выборка - при отсуствтии аргумента - выбираешь php code, далее аргументы ловишь по arg(1), arg(2) и так далее.
Каким образом tid привязан к uid?
Про аргументы я считаю немного глупой затеей .. ибо в целом блоку аргументы не нужны У views есть замечательная вещь как Relationships ..
Т.е. там нам нужно выбрать именно принцип связи терма и юзера (если каким то модулем было сделано, то возможно данная взаимосвязь указана уже), а потом добавить фильтр по терму, и указать отношение к только что созданному.
Контриб модули обычно поставляются со своими хэндлерами, если нет, то можно написать, там не сложно .. к сожалению найти сейчас не могу где читал про написание :/
botan вы про что? при чём тут реляшны? ему надо подставить фильтр uid.
Ну если рассмотреть пример:
Допустим у меня есть список пользователей и список нод (тип articles)
и есть типа материала news (Это как замена терма, tid) в нем при помощи User reference и Node reference привязываются пользователи и нода типа articles.
К сожалению след.запрос нам ничего не выведет:
SELECT node.nid AS nid,
node.title AS node_title FROM node node INNERJOIN users users ON node.uid = users.uid WHERE(users.uid =***CURRENT_USER***)AND(node.type IN('articles'))
Пользуемся немного магией .. меняем тип ноды на news, и подгружаем два отношения по нужным нам полям User reference и Node reference.
А далее в поле Node: title в связях указываем отношение Node reference, а в фильтре User: Current указываем User reference.
В результате наших махинаций одной только мышкой мы выводим след. схему:
И след. запрос выдаст нам ноды articles привязанные к текущему пользователю:
SELECT node.nid AS nid,
node_node_data_field_q.title AS node_node_data_field_q_title,
node_node_data_field_q.nid AS node_node_data_field_q_nid FROM node node LEFTJOIN content_field_q node_data_field_q ON node.vid = node_data_field_q.vid INNERJOIN node node_node_data_field_q ON node_data_field_q.field_q_nid = node_node_data_field_q.nid LEFTJOIN content_type_news node_data_field_ww ON node.vid = node_data_field_ww.vid INNERJOIN users users_node_data_field_ww ON node_data_field_ww.field_ww_uid = users_node_data_field_ww.uid WHERE users_node_data_field_ww.uid =***CURRENT_USER***
Или я не правильно понял для чего нужны Relationships?
Видимо я плохо объяснил, чем ввел в заблуждение. Взаимосвязи между tid и uid нет никакой, т.е. в нодах нужный uid не прописан. Мне нужно это для создания службы Вопрос - Ответ. Пользователи создают ноды с вопросами, кому задают вопрос выбирают через справочник. Эксперт заходит на сайт под своим именем. Ему в блоке показываются ноды без ответов в соответствии с его категорией.
Комментарии
Аргументы.
Возможно я плохо вьюз изучил, но как там сделать такое? Например, если uid=2, то в фильтре tid = 120, а если uid=3, то tid=121. Пользователь имеется ввиду не автор ноды, а под которым человек вошел на сайт. Это с помощью аргументов возможно?
да.
попробуй щелкнуть на аргументы, выбрать пользователся, далее там понятно.
задай путь.
вызовы так: путь/2
тогда вьюс поймает число 2 и положит его в первый аргумент, который выше являлся uid пользователя.
если так, то путь/2/222
то уже 2 аргумента ловиться.
Аргумент - это фильтр, только динамический, на самом деле он еще много чего умеет.
С аргументами это получается страничный вывод, а мне нужно в блоке это дело получить.
количество записей можно ограничить
виды и блочными бывают
а в блоках делается немного хитро:
добавляешь пользователя в аргументах, потом где есть выборка - при отсуствтии аргумента - выбираешь php code, далее аргументы ловишь по arg(1), arg(2) и так далее.
Каким образом tid привязан к uid?
Про аргументы я считаю немного глупой затеей .. ибо в целом блоку аргументы не нужны У views есть замечательная вещь как Relationships ..
Т.е. там нам нужно выбрать именно принцип связи терма и юзера (если каким то модулем было сделано, то возможно данная взаимосвязь указана уже), а потом добавить фильтр по терму, и указать отношение к только что созданному.
Т.е. для стандартных модулей хэндлеры уже написаны, например http://cvs.drupal.org/viewvc.py/drupal/contributions/modules/views/modul...
Контриб модули обычно поставляются со своими хэндлерами, если нет, то можно написать, там не сложно .. к сожалению найти сейчас не могу где читал про написание :/
C views не разобрался. Сделал в виде снипета.
botan вы про что? при чём тут реляшны? ему надо подставить фильтр uid.
это почему глупая? они там доступны, и их можно ловить по arg.
Ну если рассмотреть пример:
Допустим у меня есть список пользователей и список нод (тип articles)
и есть типа материала news (Это как замена терма, tid) в нем при помощи User reference и Node reference привязываются пользователи и нода типа articles.
К сожалению след.запрос нам ничего не выведет:
node.title AS node_title
FROM node node
INNER JOIN users users ON node.uid = users.uid
WHERE (users.uid = ***CURRENT_USER***) AND (node.type IN ('articles'))
Пользуемся немного магией .. меняем тип ноды на news, и подгружаем два отношения по нужным нам полям User reference и Node reference.
А далее в поле Node: title в связях указываем отношение Node reference, а в фильтре User: Current указываем User reference.
В результате наших махинаций одной только мышкой мы выводим след. схему:
И след. запрос выдаст нам ноды articles привязанные к текущему пользователю:
node_node_data_field_q.title AS node_node_data_field_q_title,
node_node_data_field_q.nid AS node_node_data_field_q_nid
FROM node node
LEFT JOIN content_field_q node_data_field_q ON node.vid = node_data_field_q.vid
INNER JOIN node node_node_data_field_q ON node_data_field_q.field_q_nid = node_node_data_field_q.nid
LEFT JOIN content_type_news node_data_field_ww ON node.vid = node_data_field_ww.vid
INNER JOIN users users_node_data_field_ww ON node_data_field_ww.field_ww_uid = users_node_data_field_ww.uid
WHERE users_node_data_field_ww.uid = ***CURRENT_USER***
Или я не правильно понял для чего нужны Relationships?
Видимо я плохо объяснил, чем ввел в заблуждение. Взаимосвязи между tid и uid нет никакой, т.е. в нодах нужный uid не прописан. Мне нужно это для создания службы Вопрос - Ответ. Пользователи создают ноды с вопросами, кому задают вопрос выбирают через справочник. Эксперт заходит на сайт под своим именем. Ему в блоке показываются ноды без ответов в соответствии с его категорией.
вот-вот botan, ему динамическая фильтрация нужна, а не добавление отношений.