Подреденост

Скорошният позакъснял интерес към едно мое старо произведение успя да ме мотивира да довърша описването на друг друпалски трик, който макар и дребен, изисква известни разяснения.

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

За целта е нужна 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 дисплеи според въображението и степента на извратеност, с които подхождаме към работния процес.

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

И така до следващия проект.