В этой статье мы продолжим изучать возможности Views и сосредоточимся на том, как использовать отношения, контекстные фильтры и переписывать выходные поля. В предыдущем уроке я показал вам, как создать новый вид и выполнить основные настройки для него. Мы видели, как выбрать формат отображения, какие поля отображать и как фильтровать и сортировать результаты.
В этой статье мы пойдем немного дальше и посмотрим, что такое отношения и контекстные фильтры — два наиболее важных параметра, найденных в разделе « Расширенные поля» справа на странице «Просмотр редактирования». Кроме того, мы перепишем вывод наших полей и объединим их значения в одно.
Для начала у меня есть простая статья View, которая просто показывает названия. Очень легко настроить, если вы хотите следовать. И есть три вещи, которые я хочу достичь в будущем:
- Сделайте так, чтобы в представлении также отображалось имя пользователя автора статьи.
- Сделать так, чтобы представление отображало только статьи, созданные авторизованным пользователем
- Сделайте так, чтобы имя автора отображалось в скобках после заголовка
Отношения
Во-первых, давайте включим View в список авторов статей. Если в представлении отображаются поля (а не режимы просмотра или что-то еще), все, что нам нужно сделать, — это найти поле с именем пользователя автора, верно? Неправильно. Проблема заключается в следующем: таблица узлов содержит только ссылку на пользовательский объект, который создал узел (в форме идентификатора пользователя — uid
). Так что это почти все, что мы найдем, если поищем пользовательские поля: Content: Author uid
.
Что нам нужно сделать, это использовать отношение к пользовательскому объекту, найденному в user
таблице. Отношения — в основном причудливый способ сказать, что таблица A (в нашем случае) объединится с таблицей B (в нашем случае user
), чтобы извлечь оттуда данные, связанные с ней (такие как имя пользователя и многие другие) , И объединение произойдет в нашем случае на поле uid
которое будет совпадать в обеих таблицах.
Итак, давайте продолжим и добавим новое отношение типа Content: Author
. Под Идентификатором мы можем поместить описательное имя для этого отношения как Автор контента . Остальное мы можем оставить по умолчанию.
Теперь, если вы перейдете и добавите новое поле, вы заметите множество других, которые относятся к пользователю, который является автором контента. Идем дальше и добавим поле User: Name
. В его настройках вы увидите список выбора отношений вверху, где автоматически выбирается только что указанный нами идентификатор отношения. Это означает, что это поле используется при использовании этого отношения (или соединения таблицы). Сохранение поля теперь добавит имя пользователя автора, уже видимое в предварительном просмотре.
Вы также можете связать отношения. Например, если у сущности user
есть ссылка на другую таблицу с использованием уникального идентификатора, вы можете добавить второе отношение. Он будет использовать первый и ввести поля из этой таблицы. Таким образом, конечным результатом будет то, что представление будет отображать поля, которые относятся к узлу через пользователя, который создал узел, но не строго из user
таблицы, а где-то еще, связанного с автором. И так и дальше вы можете присоединиться к таким столам.
Контекстные фильтры
Контекстные фильтры похожи на обычные фильтры в том, что вы можете использовать в основном те же поля для фильтрации записей. Контекстные фильтры сильно различаются в том, что вы не устанавливаете значение фильтрации при создании представления, но оно берется из контекста.
Существует много разных контекстов, из которых может исходить значение фильтра, но в основном это происходит из URL. Тем не менее, вы можете указать представлениям также искать в других местах контексты, такие как идентификатор вошедшего в систему пользователя.
Теперь мы добавим контекстный фильтр, чтобы в представлении отображались только статьи, созданные авторизованным пользователем. Поэтому добавьте новый контекстный фильтр типа Content: Author uid
. Далее, в поле КОГДА ЗНАЧЕНИЕ ФИЛЬТРА НЕ НАХОДИТСЯ в наборе полей URL , выберите переключатель Provide default value
. Наша цель здесь — сделать так, чтобы Views смотрел в другом месте, если он не находит идентификатор пользователя в URL.
Затем у вас есть несколько вариантов в списке выбора типа , где вы должны выбрать User ID from logged in user
. Это заставит Представления взять идентификатор пользователя, который вошел в систему, и передать его Представлению в качестве фильтра. Остальное вы можете оставить как есть и сохранить фильтр. В предварительном просмотре вы сразу заметите, что отображаются только статьи, созданные вами. Фильтрация происходит динамически. Если вы входите в систему с другой учетной записью пользователя, вы должны видеть только статьи, созданные этой учетной записью.
Отличительной особенностью контекстных фильтров является то, что если вы отображаете представление программно в пользовательском модуле, вы можете передать значение фильтрации в коде, что открывает широкие возможности.
Переписывание полей
Последнее, что мы сделаем в этом уроке, это рассмотрим переписывание полей, чтобы объединить их значения. Мы проиллюстрируем эту технику, изменив поле заголовка, чтобы включить имя автора в скобках.
Мы начнем с изменения порядка полей и переместим заголовок, чтобы он отображался последним. Причина, по которой мы хотим это сделать, заключается в том, что при перезаписи полей вы можете использовать токены, которые получают значения только из полей, которые добавляются перед перезаписью. И поскольку мы хотим переписать поле заголовка, мы хотим, чтобы присутствовал токен для значения имени пользователя, поэтому нам нужно переместить его перед полем заголовка.
Теперь, когда поле заголовка является последним, отредактируйте поле имени пользователя автора и снимите флажок Create a label
а затем установите флажок Exclude from display
. Теперь вы можете сохранить поле. Причина, по которой мы исключаем это поле из отображения в нашем представлении, заключается в том, что мы не дублируем его после того, как объединяем его с полем заголовка.
Затем отредактируйте поле заголовка и в разделе REWRITE RESULTS установите флажок « Перезаписать Rewrite the output of this field
. Новая текстовая область должна появиться ниже, где мы напишем новое содержимое этого поля. Если вы напишете там какую-нибудь тарабарщину и сохраните поле, вы заметите, что заголовок заменяется на этот бред.
Ниже этой текстовой области вы также увидите несколько шаблонов ЗАМЕНЫ . Они представляют токены всех полей в представлении, загруженных до этого (и включая это тоже). Так что, если вы пошли дальше, вы увидите там [name]
и [title]
, среди других.
Теперь нам нужно поместить эти токены в это поле, обернутое текстом или разметкой, которую мы хотим. Сказав, что мы хотим, чтобы имя пользователя было в скобках после заголовка узла, мы можем добавить следующее в текстовое поле, чтобы добиться этого:
[ title ] ([ name ])
Сохраните поле и проверьте результат. Теперь у вас должен быть автор в скобках. Тем не менее, это все еще не идеально. Мы оставили поле заголовка « Link this field to the original piece of content
блоком Link this field to the original piece of content
отмеченным, и это немного нарушает вывод для нас из-за того, что имя пользователя имеет ссылку на страницу профиля пользователя. Нам нужна чистая ссылка на заголовок узла и в круглых скобках (которые сами не ссылаются ни на что), имя пользователя, ссылающееся на страницу профиля пользователя.
Итак, сначала добавьте новое поле с именем Content: Path
(путь к узлу). Убедитесь, что вы исключили его из отображения, удалите его метку и переместите его перед полем заголовка. Затем отредактируйте поле заголовка, снимите флажок « Link this field to the original piece of content
блоком Link this field to the original piece of content
и замените текст « ПИСЬМЕННЫЕ РЕЗУЛЬТАТЫ» следующим:
<a href = "[path]" > [title] </a> ([name])
Токен [path]
доступен из нового поля, которое мы только что добавили. А после сохранения вы должны увидеть в предварительном просмотре гораздо более четкое отображение узлов заголовков и имен пользователей в скобках.
Вывод
В этом уроке мы рассмотрели три основных аспекта создания Views в Drupal 7: отношения, контекстные фильтры и переписывание полей. Мы видели, как с помощью отношений мы можем использовать информацию также от связанных сущностей, а не только тех, которые находятся в базовой таблице, на которой построено представление. Контекстные фильтры отлично подходят для случаев, когда представление должно отображать содержимое динамически в зависимости от различных контекстных условий (таких как URL-адрес или зарегистрированный пользователь). Наконец, мы научились переписывать поля и создавать более сложные со значениями, взятыми из нескольких полей. Как вы можете видеть, этот метод очень мощный для создания тематических представлений, поскольку он позволяет нам выводить сложную разметку.
Представления — в значительной степени самый популярный модуль Drupal, и он очень сложен. Несмотря на всю сложность, создавать представления в качестве администратора сайта очень просто. Все, что вам нужно понять, это несколько основных понятий, и вы готовы идти вперед. Разработка для Views, расширяющая его функциональность или предоставляющая ему данные, также доставляет удовольствие. Если вы хотите узнать больше об этом, вы можете прочитать мое руководство по представлению своей таблицы пользовательских модулей для Views прямо здесь, на Sitepoint.com .