Error message

You are not authorized to post comments.

Подреденост

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

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

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

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

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