Групиране в Drupal

Дълго време отбягвах Drupal 6 заради недопроверените ми опасения, че вградената му многоезичност не работи достатъчно добре. Но покрай един проект, който се нуждаеше от по-сложна функционалност, за която за Drupal 5 нямаше подходящи модули, реших най-накрая да влезна в крак с модата, защото така и така скоро ще спре да бъде мода предвид идването на Drupal 7.

Както и да е, новостите в 6 са прекалено много, но това, от което изпитвам известна гордост, че постигнах, е групирането на списъци във модула Views 2 (нямащ абсолютно нищо общо със старата си версия 1 за Drupal 5).

Цел - да постигна Views list, групиран по определен принцип - в случая по дата, по-специално месец.

Използвани модули - CCK, Views 2, Date

Стъпки:

  1. Прави се нов тип на съдържание, който искаме да подреждаме във Views: Administer -> Content management -> Content types -> Add content type Пишем му име и оставяме стандартните стойности за публикуване и т.н.
  2. В новосъздадения тип трябва да добавим поле за дата, което е функционалност, дадена ни от CCK Date: Edit content type -> Manage fields -> Add Попълват се всичките необходими опции за ново поле и за тип слагаме "Date". На следващата страница се донагласят специфичните опции за Date CCK поле, които на пръв поглед са малко объркващи, но с дифолтни настройки в общия случай е окей.
  3. Тук идва тънкият момент - нагласянето на нов формат за дата, който да ни служи за групиране на view-то. Форматите за дата в Drupal са глобални и веднъж въведени, се използват в рамките на цялата система, т.е. от всеки модул. Намират се тук: Administer -> Site configuration -> Date and time -> Formats Drupal има три вградени формата - Long, Medium и Short, както и един голям списък с предефинирани видове подредби на дата/час, които могат се прикачат към всеки един от тези три формата. В случая трябва да направим нова подредба и после нов формат, към който да прикачим подредбата. Стъпките за създаване на нов дата формат са следните:
    1. Add format -> пише се стринг с променливи, извикващ дата според правилата на PHP Date. В нашия случай пишем "M Y", тоест пълно текстово име на месеца и година с пълните си 4 символа.
    2. Новата подредба се показва в Custom Formats и се визуализира с днешната дата, за да видим дали сме го уцелили точно.
    3. в Configure под готовите вече формати има поле Add format type. Там му пишем човешко име (с което ще се показва в системата) и машинно име, с което ще се идентифицира пред PHP функциите. В нашия случай съответно "Month Only" и "monthonly".
    4. Новият Month Only формат се появява под трите вградени. В приложеното му падащо меню скролваме всичките дифолтни подредби и най-отдолу избираме новата, която направихме и би трябвало да показва само месец и година.
    5. Save configuration и вече имаме нов, специално направен формат за дата, който показва само месец и година.
  4. Създаваме ново view: Administer -> Site building -> Views -> Add При първоначалното създаване системата пита какъв вид да е view-то и казваме, че искаме да подрежда Node-ове, т.е. стандартно Drupal-ско съдържание. Views 2 е систематизиран чрез табове, всеки от които ти дава настройки за съответния стил, който view-то предлага. В нашия случай използваме само Defaults, в което са всичките общи настройки за подреждане на съдържание, както и Page, което ги изкарва под формата на страница.
    1. Настройките за Defaults таба са следните: Basic Settings
      • Style -> HTML list (тук ще се върнем пак по-късно)
      • Row style -> Fields
      • Items to display -> 0 за Unlimited
      Filters:
      • Node: Type -> избираме типа съдържание, който създадохме
      • Node: Published -> Yes
      Fields:
      • Node: Title -> оставяме празно полето за Label и отмятаме "Link this field to its node
      • Content: Date -> отмятаме Label: None и си избираме формат за дата, какъвто искаме да се показва във View-то, примерно Short
      • (отново) Content: Date -> този път отмятаме "Exclude from display", пак махаме Label и за дата формат избираме новосъздадения Month Only
    2. Връщаме се обратно в HTML list, цъкаме на иконата за настройките му и там в падащото меню Grouping Field избираме последната опция от списъка, която е именно втората скрита дата, която служи само за групиране.
    3. Цъкаме на иконата за настройки на Row style: Fields и в Inline fields отмятаме там първите два field-а - за заглавие и дата, за да се показват на един ред, като избираме подходящ символ за сепаратор между тях, примерно тире.
    4. След това си правим нов таб Page, в него пишем адрес на страницата и заглавие, като не override-ваме останалите общи настройки за View-то, за да се използват и в новия Page.
    Накрая запазваме View-то с бутон Save.
  5. Създаваме няколко Node-а с различни дати и отиваме на адреса на страницата с новосъздаденото View, за да видим какво се е получило.

Ако резултатът прилича на нещо такова:

January 2009

  • 2009-01-01 - Заглавие
  • 2009-01-02 - Заглавие
  • 2009-01-03 - Заглавие

February 2009

  • 2009-02-01 - Заглавие
  • 2009-02-02 - Заглавие
  • 2009-02-03 - Заглавие

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

В което Drupal е толкова, толкова силен.

Comments

всичкото cms на баламатума смууууче
Блъскай си тогава всеки път код като маймуна. :)
Много полезна статия, запълва част от липсата на статии на български за drupal. Само да допълня, че ако човек иска, view-то да не се изобразява в отделна страница, а в блок, на точка 4. вместо page трябва да избере block. И тук много важно, за тези, които ползват друпал с български превод: по някаква причина, вместо блок, пише "блокиран"! И там, където са изредени вютата, също за тези, които са направени за блокове, пише блокиран. Явно, който е превеждал е превел механично, без да погледне, за какво става въпрос, но тая грешка се влачи вече няколко версии и определено, много ме затрудни, когато се сблъсках с един преведен друпал и се чудех, какво да правя с вю-то, за да излезе в блок. А, как да сложим собствен блок, на конкретно място в страницата пише на много места, например тук: http://www.nicklewis.org/node/846
Много се радвам, че си попаднал на писанието и ти било полезно. Относно слагането на блок на произволно място, има един много полезен модул Embed Views Display, който прави нов views display, който се казва Embed и можеш да го вмъкваш където искаш със съответната php функция, което общо взето няма разлика с това да се вмъква блок, но е някакси по-прегледно. Това всъщност беше тема, която бях замислил за бъдеща статийка, но така и не й дойде времето, може би сега ще се амбицирам да я допиша. А бг преводът на друпал е повече от трагичен, винаги при инсталация първото нещо, което редактирам, е тоя отвратителен стринг "Блокирай".