Добре, това е малко дълго, но според мен елегантно решение. Надявам се, че не ви плаши - наистина не е сложно, но за разлика от кода е трудно да се обясни в текст. Беше забавно да разбера това. Този отговор работи във Views версия 2 или по-нова. По същество решението съчетава два модула
- Прикачени изгледи ( http://drupal.org/project/views_attach)
- 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
(неограничена), защото всяка поредица от блогове може да има произволен брой блогове в нея. Сега:
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. Моля, активирайте модула за прикачени изгледи, преди да продължите. По същество Views attach
прикачва изглед в края на възела. В нашия случай нашият изглед ще бъде списък на други статии от поредицата (само ако блогът е част от поредица).
По същество ще трябва да „предадем“ таксономичния термин на възела към изгледа. Този таксономичен термин ще избере подходящата подопашка в My Lists
опашката с възли. Всички елементи в тази подопашка ще бъдат показани в точния ред, както сте посочили (чрез стандартния интерфейс Nodequeue).
Стъпки за създаване на изглед.
- Нека наречем изгледа
display_other_blogs_in_series
.
- Добавяне на дисплей от тип
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
като филтър.
И така, това, което този изглед ще направи, е:
- Вземете таксономичния термин от речника
Series
във възела, който в момента се разглежда
- Предайте това като аргумент към изгледа
display_other_blogs_in_series
- Изгледът ще използва този аргумент, за да избере подходящата подопашка в
My Lists
опашката
- Елементите в подопашката ще бъдат изброени един по един точно в реда, който сте посочили
- Това ще се показва правилно във всеки блог, който е част от определена серия
Това е!
Постскриптум: Ако използвате 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
.
- Уверете се, че сте дали име на блока и го поставили в подходящия регион.
person
Sid Kshatriya
schedule
11.10.2010