Как просто да покажа блок NodeQueue на включени възли?

В моя блог имам поредица от публикации на обща тема, които бих искал да свържа заедно с общ блок за навигация, така че читателите да могат лесно да прескачат напред или назад през поредицата.

Използвах NodeQueue, за да събера последователно всички записи в блога. Поставянето на свързания блок в моята странична лента ми дава желаната навигация, НО блокът се появява на всяка страница от моя сайт.

Това, което искам да направя, е да огранича видимостта на блока, така че да се показва само на страници, които са включени в опашката. Как мога да направя това?

Знам, че NodeQueue създава свои блокове, използвайки Views, така че предполагам, че отговорът може да е свързан повече с използването на Views отколкото NodeQueue. Ако има модул, който прави това, от което се нуждая, би било страхотно. Ако отговорът изисква PHP (да речем, за конфигуриране на видимостта на блока), тогава ще имам нужда от малко ръчно държане.

Блогът работи на Drupal 6.19 и имам тестов екземпляр, на който мога да изпробвам нещата, преди да докосна живия сайт.


person Bevan    schedule 09.10.2010    source източник
comment
Мисля, че имам отговор, който може да ви задоволи. Но преди това има ли значение дали a. блокът за свързани истории е не във вашата странична лента, а в края на записа в блога b. Важен ли е редът на елементите, показани като свързани истории? ° С. Добре ли е/не е добре, ако историята, която гледате в момента, се повтаря като връзка в списъка със сродни истории? Или трябва да бъде пропуснато от списъка с истории, част от поредицата   -  person Sid Kshatriya    schedule 11.10.2010
comment
@NoParrots - интересно. За да отговоря на вашите въпроси: В края на записа в моя блог ще бъде Добре, но не е идеално; Редът на публикациите е важен - някои са технически серии, където всяка се основава на това, което е било преди; Публикацията, която гледате в момента, трябва да бъде показана като контекст за това къде се намирате в последователността.   -  person Bevan    schedule 11.10.2010


Отговори (3)


Видимостта на блока няма нищо общо със съдържанието му. Ако искате да покажете статичен блок за възлите в опашката, ще бъде също толкова трудно.

Виждам възможните решения.

  • Ръчно въвеждане на възлите в настройката за видимост на блока и избор на показване на изброените страници
  • създайте PHP фрагмент, за да проверите дали потребителят вижда възел, заявката db, за да видите дали е в опашката. (не ми харесва този подход)

Първият дава повече управление, но последният може лесно да се счупи така или иначе и не обичам да съхранявам код в базата данни.

person googletorp    schedule 09.10.2010
comment
Въпреки че проблемът ви е обърнат - искам да покажа блока на опашката от възли за всички блокове в опашката, а не статичен - вие поне сте намерили решение: Ръчно изброяване на всички възли от опашката в настройките за видимост на блока под Показване на изброените страници. Не особено подреден - и решение, което изисква много ръчна поддръжка. И все пак, решение, което работи, побеждава всичко, което не работи. Благодаря. - person Bevan; 09.10.2010
comment
@Bevan Разчитате погрешно отговора ми. Мисълта ми беше, че няма значение какъв блок искате да покажете на възлите на nodequeue, инструментите за това са едни и същи. Ако променяте много възлите в опашката, може да искате да обмислите php решението. Трябва да направите запитване към таблицата nodequeue_nodes, за да видите дали текущият възел е в опашката. - person googletorp; 10.10.2010
comment
Прав си, грешно прочетох отговора ти. Засега ще изброявам ръчно възлите - уменията ми за PHP са почти несъществуващи, но може би трябва да се науча. - person Bevan; 10.10.2010

Добре, това е малко дълго, но според мен елегантно решение. Надявам се, че не ви плаши - наистина не е сложно, но за разлика от кода е трудно да се обясни в текст. Беше забавно да разбера това. Този отговор работи във Views версия 2 или по-нова. По същество решението съчетава два модула

  1. Прикачени изгледи ( http://drupal.org/project/views_attach)
  2. Nodequeue (По-конкретно таксономична опашка)

Моля, прочетете за прикачения Views, преди да продължите. Прикачените изгледи се обясняват най-добре от този видеоклип http://mustardseedmedia.com/podcast/episode37

Таксономичната опашка не е нищо друго освен Nodequeue, която се създава автоматично за всеки термин от таксономията в речника. Да приемем, че имаме опашка от таксономични възли, наречена 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. Кликнете върху Content Management > 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. Моля, активирайте модула за прикачени изгледи, преди да продължите. По същество Views attach прикачва изглед в края на възела. В нашия случай нашият изглед ще бъде списък на други статии от поредицата (само ако блогът е част от поредица).

По същество ще трябва да „предадем“ таксономичния термин на възела към изгледа. Този таксономичен термин ще избере подходящата подопашка в My Lists опашката с възли. Всички елементи в тази подопашка ще бъдат показани в точния ред, както сте посочили (чрез стандартния интерфейс Nodequeue).

Стъпки за създаване на изглед.

  1. Нека наречем изгледа display_other_blogs_in_series.
  2. Добавяне на дисплей от тип Node Content (налично след активиране на Views attach). Това е дисплей точно като дисплеите на блокове и страници, но със специална способност да се прикрепя към възела.

Направете следните настройки в 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 като филтър.

И така, това, което този изглед ще направи, е:

  1. Вземете таксономичния термин от речника Series във възела, който в момента се разглежда
  2. Предайте това като аргумент към изгледа display_other_blogs_in_series
  3. Изгледът ще използва този аргумент, за да избере подходящата подопашка в My Lists опашката
  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. Уверете се, че сте дали име на блока и го поставили в подходящия регион.
person Sid Kshatriya    schedule 11.10.2010
comment
Хубаво елегантно решение - ще го пробвам в пясъчника си. - person Bevan; 12.10.2010
comment
@Bevan: малка точка, в случай че не сте работили с таксономични опашки преди. Подопашката се създава изрично само когато добавите към опашката. За да направите това за първи път, щракнете върху връзката за добавяне към ‹име на подопашка›, която ще се появи под всеки възел на блога. Ще трябва да посочите термина Series във формуляра за редактиране на възел за този блог преди това. - person Sid Kshatriya; 12.10.2010
comment
@Bevan: добавени инструкции за добавяне на сериала в блок. Изисква Views 3. - person Sid Kshatriya; 12.10.2010

Всъщност не съм играл с NodeQueue, но въз основа на вашето описание, това звучи като нещо, което трябва да можете да правите, използвайки изгледи. Няколко мисли.

Ако използвате отделен тип съдържание само за записи в блогове, тогава трябва да можете да добавите този тип съдържание като филтър в изгледа. Това вероятно би било най-просто.

Ако не можете да направите това, тогава ще потърся дали можете да добавите филтър за NodeQueue, тъй като това също трябва да работи.

Ако нито едно от горните не работи, ще потърся дали можете да добавите връзка към NodeQueue. Ако направите това, вероятно ще можете да добавите филтър за NodeQueue.

И накрая, ако не получите задоволителен отговор тук, предлагам да публикувате въпроса си на Drupal.org, тъй като там много експерти по Drupal отговарят на въпроси.

person Sid_M    schedule 09.10.2010
comment
Самият блок работи точно както искам - изброява всички възли, които съм посочил в опашката. Това се прави чрез изглед, като се използва връзка от опашката към приложените възли. Това, което искам да направя, е да скрия/покажа блока на различни страници на сайта, в зависимост от това дали възелът, показан на страницата, е член на опашката. - person Bevan; 09.10.2010
comment
Ох! Съжалявам, не знам защо реших, че това е отговор на въпроса ви. Може да погледнете контекстния модул. Вярвам, че трябва да даде много повече контрол върху това къде се показват блоковете. - person Sid_M; 09.10.2010
comment
Освен това, ако решите да направите php фрагмент, един от начините да минимизирате кода в блока е да поставите фрагмента във функция за оформяне на теми и след това да извикате theme(the_snippet_function) от блока. - person Sid_M; 09.10.2010