Хорошо, это немного длинное, но, на мой взгляд, элегантное решение. Надеюсь, это вас не отпугнет - это действительно несложно, но, в отличие от кода, его сложно объяснить в тексте. Было весело разобраться в этом. Этот ответ работает в Views версии 2 или выше. По сути, решение объединяет два модуля
- Представления прикрепляются (http://drupal.org/project/views_attach)
- Nodequeue (в частности, очередь таксономии)
Пожалуйста, прочтите о прикрепленных изображениях, прежде чем продолжить. Прикрепленные просмотры лучше всего объясняются этим видео 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
nodequeue.
На этом настройка очередей таксономии завершена.
Теперь мы переходим к приложению Views. Пожалуйста, включите модуль присоединения представлений, прежде чем продолжить. По сути, Views attach
прикрепляет представление в конце узла. В нашем случае нашим представлением будет список других статей в серии (только если блог является частью серии).
По сути, нам нужно «передать» термин таксономии узла в представление. Этот термин таксономии выберет соответствующую вложенную очередь в My Lists
nodequeue. Все элементы в этой подочереди будут показаны в точном порядке, указанном вами (через стандартный интерфейс 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) в качестве аргумента представления. Чтобы это произошло, словарь Series
должен иметь наименьший вес. (См. http://groups.drupal.org/node/11788#comment-38332 а>). Если у него самый низкий вес, словарь таксономии будет первым в разделе таксономии формы редактирования узла.
Теперь нам нужно указать нашему View принимать элементы только из очереди 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
.
- Элементы в подочереди будут перечислены один за другим точно в указанном вами порядке.
- Это будет правильно отображаться в каждом блоге, который является частью определенной серии.
Вот и все!
Постскриптум: если вы используете Просмотры 3 (на момент написания - alpha3) и, вам нужен блок (прямо сейчас соответствующие статьи находятся в конце узла body) вы можете сделать это следующим образом:
- Забудьте о прикреплении просмотров ... это не обязательно
- Добавьте вид блока. Он должен содержать те же аргументы, отношения, поля и фильтры, что и приведенные выше инструкции для
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
словарь.
- Убедитесь, что вы назвали блок и поместили его в соответствующий регион.
person
Sid Kshatriya
schedule
11.10.2010