Хорошо, это немного длинное, хотя я думаю, что элегантное решение. Надеюсь, это вас не пугает - это действительно не сложно, но в отличие от кода его сложно объяснить в тексте. Было весело выяснить это. Этот ответ работает в Views версии 2 или выше. По сути, решение объединяет два модуля
- Просмотры прикреплены (http://drupal.org/project/views_attach)
- Nodequeue (наиболее конкретно таксономическая очередь)
Пожалуйста, ознакомьтесь с приложением Views, прежде чем продолжить. Вложение просмотров лучше всего объясняется этим видео http://mustardseedmedia.com/podcast/episode37
Очередь таксономии - это не что иное, как очередь узлов, которая автоматически создается для каждого термина таксономии в словаре. Допустим, у нас есть очередь узлов таксономии под названием My Lists
. Допустим, у вас есть словарь под названием Series
, и он имеет 3 термина: Apache Solr Tutorial Series
, CSS Tips and Techniques Series
, Drupal Views Tips Series
. И если My Lists
использует Series
в качестве источника таксономии, то будут созданы 3 подпоследовательности - по одной на каждый термин.
В вашем блоге вы будете иметь несколько серий статей (вы называете это статьями с «общей темой»). Каждая серия будет независимой от другой серии. Каждая серия будет содержать списки из 2 или более блогов. Важно отметить, что в моем предложенном решении блог будет только частью 1 серии - надеюсь, это нормально. Мы используем решение на основе Nodequeue, потому что вы требуете, чтобы порядок размещения блогов в серии был важным и должен быть сохранен.
Сначала вам нужно будет создать словарь (допустим, мы называем его Series
). Каждый раз, когда вы создаете новую серию блогов, вы создаете новый термин таксономии, например, Apache Solr Tutorials Series
, CSS Tips and Techniques Series
и т. Д. Убедитесь, что словарь Series
применим к вашему типу контента blog
.
Теперь вам нужно создать очередь таксономии. Просто включите Smartqueue Taxonomy
в списке модулей. Он поставляется со стандартным модулем Nodequeue. Нажмите на Управление контентом> Nodequeue> очередь таксономии. Назовите очередь My Lists
. Убедитесь, что вы выбрали Series
в качестве словаря. Вы можете оставить длину очереди равной 0
(без ограничений), поскольку в каждой серии блогов может быть любое количество блогов. Сейчас:
Link "add to queue" text:
положить Add to %subqueue
Link "remove from" queue text:
положить Remove from %subqueue
Это что-то вроде удобства. Это даст вам ссылки внизу каждого blog
узла для добавления или удаления из соответствующей очереди таксономии. Таким образом, если статья блога имеет термин таксономии CSS Tips and Techniques
, она получит ссылку внизу полной страницы узла (или даже тизерное представление), чтобы ее можно было добавить в подпункт CSS Tips and Techniques
в очереди My Lists
.
На этом настройка очередей таксономии завершена.
Теперь перейдем к просмотру приложений. Пожалуйста, включите модуль представления просмотров, прежде чем продолжить. По существу, Views attach
присоединяет представление в конце узла. В нашем случае нашим представлением будет список других статей серии (только если блог является частью серии).
Нам, по сути, нужно будет «передать» таксономический термин узла в представление. Этот термин таксономии выберет подходящую очередь в очереди узлов My Lists
. Все элементы в этом подразделе будут показаны в точном порядке, указанном вами (через стандартный интерфейс Nodequeue).
Шаги для создания вида.
- Позволяет вызвать представление
display_other_blogs_in_series
.
- Добавить отображение типа
Node Content
(доступно после включения просмотра видов). Это отображение, подобное отображению блоков и страниц, но со специальной возможностью присоединения к узлу.
Выполните следующие настройки в Node Content Display
Node content settings
Node types: blog
Build modes: Teaser, Full node
Arguments: token
Show title: No
Вы должны выбрать Use tokens from the node the view is attached to
в разделе Аргументы.Пусть токен будет [term-id]
Это "ID термина верхней таксономии" .Это очень важно!!По сути, вы будете передавать термин таксономии узла блога из словаря Series
(например, CSS Tips and Techniques) в качестве аргумента для представления.Для этого словарный запас Series
должен иметь наименьший вес.(См. http://groups.drupal.org/node/11788#comment-38332). Если он имеет наименьший вес, словарь таксономии будет первым словарем в разделе таксономии формы редактирования вашего узла.
Теперь нам нужно указать нашему представлению принимать только элементыиз очереди My Lists
. Добавьте отношение Nodequeue: Queue
. Убедитесь, что выбран [x] Require this relationship
. Убедитесь, что [x] Limit to one or more queues
выбрано с My list
в качестве очереди.
Добавьте аргумент Nodequeue: Subqueue Reference
.Убедитесь, что отношение queue
, т. Е. Отношение, которое мы определили выше. Этот аргумент будет термином таксономии из словаря Series
. Этот аргумент приведет к выбору правильной очереди.
Добавьтеинтересующие вас поля, например, Node: Title
. Убедитесь, что Node: Title
превращен в гиперссылку, отметив Link this field to its Node
Добавьте Nodequeue: Position
в качестве критерия сортировки. Убедитесь, что порядок сортировки возрастает, и сделайтеубедитесь, что используется соотношение queue
.
В фильтрах убедитесь, что вы добавили Node: Type = blog
в качестве фильтра.
Итак, это представление будет:
- Возьмите таксономический терминиз словаря
Series
в узле, который просматривается в данный момент - Передайте это в качестве аргумента представлению
display_other_blogs_in_series
- Представление будет использовать этот аргумент для выбора подходящего вложенного очереди в
My Lists
queue - Элементы в под очереди будут перечислены один за другим точно в указанном вами порядке
- Это будет правильно отображаться в каждом блоге, который является частью определенной серии
Вот и все!
Постскриптум: Если вы используете Views 3 (в настоящий момент в alpha3 на момент написания) и , вы хотитеБлок (сейчас связанные статьи идут в конце тела узла) вы можете сделать это следующим образом:
- Забудьте о представлениях присоединить ... его не требуется
- Добавитьблочный вид.Он должен содержать те же аргументы, отношения, поля и фильтры, что и приведенные выше инструкции для дисплея
Node Content
. - Вам необходимо немного изменить настройки для аргумента
Nodequeue: Subqueue Reference
: в Action to take if argument is not present:
выберите [x] Provide Default Argument
.Выберите [x] Taxonomy Term ID from URL
.Теперь убедитесь, что [] Load default argument from term page
не выбран, [x] Load default argument from node page, thats good for related taxonomy blocks.
Также [x]Limit terms by vocabulary
и выберите словарь Series
. - Убедитесь, что вы назвали блок и поместили его в соответствующий регион.