Как просто показать блок NodeQueue на включенных узлах? - PullRequest
1 голос
/ 09 октября 2010

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

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

Что я хочу сделать, так это ограничить видимость блока, чтобы он появлялся только на страницах, включенных в очередь. Как я могу это сделать?

Я знаю, что NodeQueue создает свои блоки, используя Views , поэтому я думаю, что ответ может быть больше связан с использованием Views, чем с NodeQueue. Если есть модуль, который делает то, что мне нужно, это было бы здорово. Если для ответа требуется PHP (скажем, для настройки видимости блока), мне понадобится ручная фиксация.

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

Ответы [ 3 ]

1 голос
/ 09 октября 2010

Видимость блока не имеет ничего общего с его содержанием.Если бы вы хотели отобразить статический блок для узлов в очереди, это было бы одинаково сложно.

Я вижу возможные решения.

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

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

1 голос
/ 12 октября 2010

Хорошо, это немного длинное, хотя я думаю, что элегантное решение. Надеюсь, это вас не пугает - это действительно не сложно, но в отличие от кода его сложно объяснить в тексте. Было весело выяснить это. Этот ответ работает в Views версии 2 или выше. По сути, решение объединяет два модуля

  1. Просмотры прикреплены (http://drupal.org/project/views_attach)
  2. 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 (без ограничений), поскольку в каждой серии блогов может быть любое количество блогов. Сейчас:

  1. Link "add to queue" text: положить Add to %subqueue
  2. Link "remove from" queue text: положить Remove from %subqueue

Это что-то вроде удобства. Это даст вам ссылки внизу каждого blog узла для добавления или удаления из соответствующей очереди таксономии. Таким образом, если статья блога имеет термин таксономии CSS Tips and Techniques, она получит ссылку внизу полной страницы узла (или даже тизерное представление), чтобы ее можно было добавить в подпункт CSS Tips and Techniques в очереди My Lists .

На этом настройка очередей таксономии завершена.

Теперь перейдем к просмотру приложений. Пожалуйста, включите модуль представления просмотров, прежде чем продолжить. По существу, Views attach присоединяет представление в конце узла. В нашем случае нашим представлением будет список других статей серии (только если блог является частью серии).

Нам, по сути, нужно будет «передать» таксономический термин узла в представление. Этот термин таксономии выберет подходящую очередь в очереди узлов My Lists. Все элементы в этом подразделе будут показаны в точном порядке, указанном вами (через стандартный интерфейс Nodequeue).

Шаги для создания вида.

  1. Позволяет вызвать представление display_other_blogs_in_series.
  2. Добавить отображение типа 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 в качестве фильтра.

Итак, это представление будет:

  1. Возьмите таксономический терминиз словаря Series в узле, который просматривается в данный момент
  2. Передайте это в качестве аргумента представлению display_other_blogs_in_series
  3. Представление будет использовать этот аргумент для выбора подходящего вложенного очереди в My Lists queue
  4. Элементы в под очереди будут перечислены один за другим точно в указанном вами порядке
  5. Это будет правильно отображаться в каждом блоге, который является частью определенной серии

Вот и все!

Постскриптум: Если вы используете Views 3 (в настоящий момент в alpha3 на момент написания) и , вы хотитеБлок (сейчас связанные статьи идут в конце тела узла) вы можете сделать это следующим образом:

  1. Забудьте о представлениях присоединить ... его не требуется
  2. Добавитьблочный вид.Он должен содержать те же аргументы, отношения, поля и фильтры, что и приведенные выше инструкции для дисплея Node Content.
  3. Вам необходимо немного изменить настройки для аргумента 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.
  4. Убедитесь, что вы назвали блок и поместили его в соответствующий регион.
0 голосов
/ 09 октября 2010

На самом деле я не играл с NodeQueue, но, исходя из вашего описания, это звучит как то, что вы должны делать, используя представления. Пара мыслей.

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

Если вы не можете этого сделать, тогда я посмотрю, можно ли добавить фильтр для NodeQueue, поскольку он также должен работать.

Если ни одна из вышеперечисленных не сработает, я посмотрю, можно ли добавить отношение к NodeQueue. Это, вероятно, поможет вам добавить фильтр для NodeQueue.

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

...