Когда мне нужен контекстный фильтр по сравнению с отношениями?


Может ли кто-нибудь объяснить функциональную разницу между контекстуальными фильтрами и отношениями?

Я понимаю, что связь - это объединение таблиц, а контекстный фильтр передает параметры в представление. Оба настраивают данные просмотра. Как бы вы описали, когда следует использовать каждый из них?

Я строю сложные представления уже несколько месяцев, но иногда у меня все еще нет интуиции относительно того, что мне нужно - обычно мне нужно найти учебник о том, что именно я пытаюсь сделать, и я думаю, что это связано с тем, что я не совсем понимаю эти две возможности.


Изменить:

Спасибо за все ответы, помогающие описать построение SQL. По этой теме я нашел этот совет очень полезным.

 5
Author: Community, 2015-07-08

5 answers

Просто подумайте об этом с точки зрения SQL:

  • "связь" - это JOIN в другой таблице
  • "фильтр" (контекстуальный или нет) - это предложение WHERE.

"Контекстуальный" просто означает, что параметр исходит из текущего контекста, например, части URL-адреса, чего-то в сеансе и т. Д.

 12
Author: Clive, 2015-07-08 19:14:20

Я думаю, что вы сами хорошо это описали. Отношения - это объединение. Вы присоединяете другую таблицу к базовой таблице для создаваемого представления. Контекстный фильтр - это аргумент, который вы передаете запросу, созданному представлением.

Если вы создаете список названий узлов, создаваемый вами упрощенный запрос может быть следующим:

ВЫБЕРИТЕ заголовок ИЗ {узла};

Контекстный фильтр передаст аргумент в этот запрос. Вы можете получить аргумент из URL-адреса или количество других мест. В этом примере тип будет аргументом, который вы передаете с помощью контекстного фильтра:

ВЫБЕРИТЕ заголовок ИЗ {узла}, ГДЕ тип = 'страница';

Примером взаимосвязи может быть доступ к пользовательской информации об авторе узла. Если вы добавили связь с пользователем в идентификатор пользователя, запрос может выглядеть примерно так:

ВЫБЕРИТЕ заголовок n, имя пользователя u ИЗ {узла} n ПРИСОЕДИНИТЕСЬ К {пользователю} u НА n.uid = u.uid, ГДЕ тип = 'страница';

 2
Author: acouch, 2015-07-08 19:16:43

Я думаю, что некоторые примеры могут облегчить понимание.

Когда мы должны использовать отношения

У нас есть данные A и данные B, B относится к A. Эта связь может быть вызвана Drupal (например, автором узла) или вызвана справочным модулем (например, таксономией, ссылкой на узел, ссылкой на пользователя и т. Д.).

Представьте, что A - это часть контента, а B - автор. Мы разрабатываем представление узлов (тип A), и мы хотим ограничить узлы теми, которые написаны пользователем (тип B), чей балл превышает 100 (представьте, что это поле добавлено к пользовательским полям).

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

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

Что такое контекстный фильтр

Представьте, что мне нужен блок, в котором перечислены все узлы, написанные пользователем. Я хочу, чтобы он отображался у каждого пользователя страница учетной записи.

Я должен фильтровать узлы по чему-то, что содержится на странице, на которой показан блок. В этой ситуации я использую контекстный фильтр.

Я получаю данные со страницы (адрес, заголовок, текст и т.д.), на которой должен отображаться блок; здесь нет прямой связи. Содержимое представления должно быть отфильтровано по идентификатору пользователя, но мы не получаем uid от пользователя. Скорее, мы получаем эту информацию со страницы, на которой будет отображаться представление.

Итак контекстные фильтры обычно используются, когда мы хотим отфильтровать представление на основе места, в котором оно будет отображаться.

 2
Author: Alireza Tabatabaeian, 2015-07-14 20:08:07

Связи предоставляют вам информацию о сущностях, которые не перечислены в полях b, объединяющих текущее содержимое с другими сущностями. Например, подробная информация об авторе узла отсутствует в полях, там есть только uid, поэтому, выбрав "автор" в качестве отношений, вы можете получить остальную информацию.

Контекстные фильтры похожи на обычные фильтры в том, что вы можете использовать в основном те же поля для фильтрации записей. Где контекстные фильтры существенное отличие заключается в том, что вы не устанавливаете значение фильтрации при создании представления, но оно берется из контекста. Контекстные фильтры отлично подходят для случаев, когда в представлении необходимо динамически отображать содержимое в зависимости от различных контекстных условий

 0
Author: M a m a D, 2015-07-09 11:09:32

Например, вам было поручено создать форум, который будет перечислять пользователей в соответствии с их геолокацией.

Итак, у нас есть тип контента под названием Форум, который включает все необходимые поля, такие как ссылка на сущность и таксономия. Поля этой сущности связаны с этим типом контента форума.

Итак, как это сделать

На самом деле мы можем определить перекрестный список в тот момент, когда пользователь вошел в систему, и выбрать правильное местоположение, и это местоположение мы будем использовать как идентификатор местоположения (база на континенте, а не база в Стране) Этот континент будет использоваться в качестве блока (контекстного фильтра), который будет использоваться в качестве параметра, как только он будет запущен или нажат пользователем, допустим, пользователь выберет "Азию". Все, что выходит на форуме, будет только "Азия", и я также размещу открытые фильтры для категории [Образование, наука, Экосистема и т. Д.] И обозначу его как категорию над форумом. Таким образом, пользователю будет легко выбрать категорию, в которую он хотел пойти, или посмотреть на то, чтобы читать.

Поэтому для блока Континент я буду использовать отношения, добавляя отношения с использованием идентификатора местоположения, а не идентификатора автора. Итак, теперь идентификатор местоположения будет идентификатором, вернитесь к контекстному фильтру и нажмите "добавить", выберите идентификатор местоположения и пользователя: Идентификатор местоположения.

Выше есть связь, которая содержит идентификатор местоположения в качестве идентификатора. На странице форума я выберу "Валидатор как пользователь" в поле "Тип разрешенного значения фильтра пользователя: выберите "только разрешенная строка имена пользователей".

Настройка:

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

  • Просмотр форума, настройте все необходимые поля и форматы в этом представлении.

Я буду использовать Контекстный фильтр и связь для привязки типа контента "Форум", а также идентификатора геолокации пользователей, это помогает мне определить, как их соответствующим образом фильтровать.

Поскольку я, возможно, не уверен в том, как это должно работать, просто быстрый запрос. Кто-нибудь здесь любезно даст мне знать, могу ли я использовать идентификатор местоположения по этому вопросу? Большое Спасибо.

 0
Author: edrigor, 2016-07-21 01:35:34