Подреденост
Скорошният позакъснял интерес към едно мое старо произведение успя да ме мотивира да довърша описването на друг друпалски трик, който макар и дребен, изисква известни разяснения.
Идеята на упражнението е да се постигне подреждане на данни в стил тийзър-на-най-последния-запис-и-само-заглавията-на-по-старите, което общо взето е подходящо за статии в даден сайт, защото по този начин акцент се дава на последната, т.е. актуална такава.
За целта е нужна Drupal 6 инсталация със следните модули:
- Views 2
- (по желание) Embed View Display
Конструкцията се подрежда в следните сравнително лесни стъпки:
- Създаваме тип съдържание, който да използваме в нашето view, наричаме го примерно Article
- Създаваме ново view с името articles, като за view type му задаваме Node, т.е. единиците информация, които въпросното view ще сортира и показва, ще са node-та
- На отворилата се страница с параметри на новото view първо въвеждаме общите стойности, които го определят като view, т.е. Defaults display
- В Basic Settings въвеждаме следните опции
- Style: unformatted
- Row style: Node, след което в опциите му Build mode: teaser и избиране на checkbox-а за "Display links".
- Use pager: No
- Items to display: 1
- От полето Filters слагаме следните филтри:
- Node: Type = Article
- Node: Published = yes
- Node: Translation = Current language (в случай, че работим с многоезична система)
- От полето Sort criteria избираме Node: Post date = descending, за да сортираме node-овете низходящо спрямо дата на публикуване, за да ни е най-отгоре последният запис
По този начин създаваме първата част на view-то ни, тоест тази, която показва tease на последния запис, без да се виждат останалите.
-
Трябва да създадем нов views display от падащото меню под колонката с табове за дисплеите отляво.
Ако сме инсталирали Embed Views Display, ще забележим, че при кликването на падащото меню се е появила една нова опция на име "Embed". Тя по нищо не се различава от останалите видове display-и освен по име и същата работа би могъл да свърши и един Block дисплей, но с Embed е някакси по-прегледно.
Така че създаваме или нов Embed или нов Block.
- В опциите за Embed (или Block) дисплея нагласяме следните неща:
- Row style: fields (като не забравяме да цъкнем на "Override settings" преди това, за да може този views дисплей да използва различна стойност за опцията от определената в defaults)
- Items to display: 0, тоест без ограничение да показва всички записи от съответния тип съдържание Article, както и Offset: 1, което означава да показва всички без запис в редицата, т.е. последния публикуван според обратното ни сортиране от Defaults дисплея (Отново не забравяме да цъкнем на Override settings" преди това)
- В полето Fields цъкаме на Override settings и след това с бутона + добавяме Node: Title, в чиито опции изтриваме съдържанието на Label, за да не се показва нищо друго освен заглавието и отмятаме "Link this field to its node"
По този начин създадохме втората част на конструкцията ни, която представлява списък със заглавия на всички node-ове от съответния тип без последното, което показваме в предишния дисплей.
- Създаваме още един нов дисплей от падащото меню отляво, който обаче е от тип Page и в него ще съберем двата отделни дисплея, които създадохме току що.
- В опциите му добавяме следните неща:
- В полето Title пишем заглавие, което да се появява на цялата страница с нашите Article-и, примерно "Articles" (цъкаме на "Override settings" преди това)
- Във Footer цъкаме на Override settings и след това пействаме магическата вградена в Drupal PHP функция, която вмъква даден views дисплей автоматично, а именно:
print views_embed_view('articles', 'embed_1');
Като първата променлива в нея показва името на view-то ни, а втората е ID-то на дисплея.
Тук има малко тънък момент, защото Drupal кръщава views дисплеите си автоматично като на всеки вид дисплей добавя пореден номер, т.е. в нашия случай embed_1, но ако вместо Embed сме използвали Block, става block_1, а пък ако поради разни проби и грешки сме създавали повече от един дисплей от съответния вид, са с други поредни номера. Затова най-лесният начин за идентифициране на ID на даден views дисплей е да се мине с мишката над колоната с дисплеите и да се погледне в status bar-а На браузъра към какъв адрес води съответният линк - последната част от адреса винаги е ID-то на дисплея.
Ако искаме да подобрим малко интуитивността, можем преди PHP функцията да напишем едно "Older articles:", което да пояснява какъв е все пак този списък с линкове под teaser-а.
- В Page settings слагаме задължителния път към страницата, примерно articles и по желание добавяме линк в някое от менютата на Drupal инсталацията ни
- Благополучно записваме view-то и ако всичко е минало гладко, би трябвало при наличието на няколко Article node-а, в съответното view (yourdrupalsite.com/articles) да се подредят по искания от нас начин.
За сравнение и информация, този хибриден тип view може да бъде видян на страницата на RBF Club, където поне засега работи добре.
Надявам се всичко това да е било полезно за някой заблуден мазохист, борещ се с любимия Drupal, тъй като случката е примерна и би могла да се превърне в основа за комбиниране на всякакви различни видове views дисплеи според въображението и степента на извратеност, с които подхождаме към работния процес.
В който всичко става по най-сложния възможен начин, за да можем след постигане на привидно лесна цел да си въобразяваме, че сме преборили кой знае какъв проблем.
И така до следващия проект.