Keresés

Drupal User Group Budapest - 2023. május

Pandelon képe

Idén már az ötödik BDUG következik, két előadás lesz a Magyar Drupal Egyesület szervezésében:

Segesvári Dávid: ECA modul bemutató
Egy 45 perces előadásban be szeretném mutatni az ECA modul használatát ami jelenleg talán a legjobb rules helyettesítő modul. Megnézzük hogy hogyan kell használni a UI-t és összerakunk pár egyszerű ruleset-et.

Palócz István - Konzerv Drupal
Ma már mindenki a konténerizációról beszél, ezért felmerül a kérdés, hogy hogyan lehet a Drupalt konténerizálni. Milyen nehézségekkel, kihívásokkal nézünk szembe és ezekre milyen megoldási lehetőségeink vannak.

Elsősorban élő esemény lesz, az Integral Vision (Radnóti Miklós utca 17 · Budapest) biztosítja a helyszínt, amit ez úton is köszönünk. Felvétel készül, ami a youtube csatornára fel fog kerülni.
Kérek mindenkit, a Meetup.com-on jelezze részvételi szándékát.

Időpont: 
2023. május 25., csütörtök 18.30 - 20.30

Taxonomy block SQL hiba / adatbázis mező név

Anonymous képe

Sziasztok!

Feldobtam ezt a kérdést a Drupal.org-on, de nem kaptam rá választ. Lehet, hogy valami teljesen nyilvánvalót kérdezek, de nem találom a megoldást.

A következő hibát kaptam 4.6.6 alatt:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') AND n.status = 1 ORDER BY sticky DESC, created DESC LIMIT 5' a query: SELECT DISTINCT(n.nid), n.title, n.body FROM term_node t INNER JOIN node n ON t.nid = n.nid WHERE t.tid IN () AND n.status = 1 ORDER BY sticky DESC, created DESC LIMIT 5 in /home/path/to/html/includes/database.mysql.inc on line 66.

Ezt találtam róla a Drupal.org-on: Taxonomy Block SQL error

Miután átneveztem a kérdéses fieldet TYPE-ról type-ra, az SQL hiba megszűnt, de továbbra sem írja ki a taxonomy block adminisztrációs oldalon a blokkok nevét. Ott vannak, lehet őket edit meg delete, de a nevük nem látszik. Eddig nem zavart, de most sokk blokkom van, és vakon dolgozom. Feltételezem, hogy a problémát már megoldották, de 2 órája keresem és nem találom. Szánjon meg valaki és igazítson útba. Köszi!

Breadcrumb Views modullal?

Anonymous képe

Ebben a szálban, annak illusztrálására, hogy a Drupal majdnem mindenre jó (de néhány dologra nem), felhoztam a hierarchikus honlapok esetét. Aries azt mondja, a Views modullal ezt simán meg lehet csinálni. Na ez érdekelne, beszéljük meg.

Mondjuk itt van ez a szokványos céges honlapstruktúra:

Nyitólap
- Magunkról
- Termékeink
-- Termékcsoport1
--- Termék1
--- Termék2
--- Termék3
-- Termékcsoport2
--- Termék4
--- Termék5
- Kapcsolat

A Termékeink oldalnak így kell kinéznie:
Breadcrumb: Nyitólap -> Termékeink
Szöveg: Cégünk összes terméke sirály.

A Termékcsoport1 oldal:
Breadcrumb: Nyitólap -> Termékeink -> Termékcsoport1
Szöveg: Mi gyártjuk a legjobb kütyüt a világon.

Termék1 oldal:
Breadcrumb: Nyitólap -> Termékeink -> Termékcsoport1 -> Termék1
Szöveg: Próbálja ki legújabb típusú kütyünket.

Tehát a kérdés: hogyan lehet ezt Views modullal megcsinálni?

Végfelhasználói Kézikönyv?

Anonymous képe

Kedves Mindenki!

Úgy adódott, hogy ebben a hónapban 4 db végfelhasználói kézikönyvet kell megírnom, részben társadalmi munkában, részben ügyfélnek. Gondolom, ti is rajongtok az ilyen feladatokért...;)

Ráadásul az egészet egy éven belül újra kell majd csinálni, ha jön a Drupal 5, ahol kissé megváltozik az adminisztrációs felület.

Kérdés: Nem lehetne ezt közösen?

Arra gondoltam, hogy jó lenne, ha itt a Drupal.hu-n lenne kétféle kézikönyv: az egyik a fejlesztőknek (telepítés, modulok, stb.), a másik pedig a végfelhasználóknak.

Nyilvánvaló, hogy a Drupal nagyon sokféleképpen konfigurálható, és minden installáció mellé egyedi kézikönyvet kell(ene) írni. De a kézikönyvek egy része teljesen triviális, és mindig ismétlődik. Hogyan tudok blogbejegyzést feltölteni? Hogyan tudok fájlt csatolni a blogbejegyzéshez? Hogyan tudok YouTube videót beilleszteni az írásaimba? Hol tudom megváltoztatni az email címemet? Hol tudom letiltani az ex-férjem/feleségem jogosultságait?... És hasonló izgalmas kérdések.

Ha lenne valahol egy központi kézikönyv, akkor rugalmasabb ügyfelet egyszerűen oda lehetne irányítani – a kevésbé rugalmasaknak pedig a kézikönyv felét-kétharmadát másol-beilleszt módszerrel le tudnánk szedni innen.

Szerintem egy ilyen központi kézikönyv akkor lehet jól használható, ha:

  • az egyes bekapcsolt modulokat lehetőség szerint izoláltan mutatjuk be;
  • a szükséges képernyőképeket mindig valamelyik alap sminkkel készítjük.

Vélemények?

Fórum: 

CSS parajelenségek 4.7.5-re frissítés után

Anonymous képe

A menő-manó Drupal kóderek szeretnek azon viccelődni, hogy a sminkelők milyen béna PHP programozók. Nos, ezt fordítva is elmondhatjuk, elég csak a /misc könyvtárban található drupal.css nevű műalkotást megtekinteni. ;)

Ráadásul a 4.7.5-ös verzióban megváltozott a drupal.css, amiről hozzám legalábbis semmiféle tájékoztatás nem jutott el, pedig hetente 1-2 alkalommal meg szoktam nézni a Drupal.org címlapját. Ezért csak most vettem észre, hogy néhány általam gondozott honlap eldugott helyein egyes dolgok rosszul jelennek meg. Eltartott egy ideig, amíg rájöttem, hogy a drupal.css a bűnös, konkrétan a .book-navigation stílusok.

Ezek után már csak az a kérdés, hogy hogyan fogják a látogatók megkapni az új CSS-t. A smink letöltését kikényszeríthetjük, ha átnevezzük a sminkünket, de mi a teendő a drupal.css fájllal? Nálam az IE6 pl. következetesen a régi fájllal dolgozott, csak Ctrl+F5-tel tudtam rávenni az új verzió letöltésére.

Fórum: 

Letölthető a Pro Drupal Development című könyv sminkeléssel foglalkozó fejezete

Anonymous képe

A napokban jelent meg Pro Drupal Development címmel egy modulfejlesztők számára írt könyv, amely részletes útmutatót kínál a Drupal belső világához. A könyvben található ismeretek többségére a Drupal webhelyet üzemeltetőknek nincs szükségük – kivéve egyetlen területet, amely szinte mindenkit érint: ez a tartalomkezelő sminkelése, azaz egyedi megjelenésű webhely kialakítása. Szerencsére a kiadó a könyv erről szóló fejezetét ingyenesen letölthetővé tette PDF formátumban.

A sminkeléssel kapcsolatban sok információt találunk a Drupal.org kézikönyv sminkelési fejezetében is, de az ott ismertetett megoldások egy része korábbi verziókra vonatkozik és időközben elavult. A letölthető PDF dokumentum egy csokorba szedi az aktuális 5.x verzióra vonatkozó legfontosabb tudnivalókat:

  • A sminkmotorok működése
  • Kész sminkek telepítése
  • Saját smink készítése PHPTemplate motorra
  • A sablon (template) fájlok típusai, az elérhető változók listája
  • Modulok által készített HTML felülírása sminkben
  • Kiegészítő sablonok készítése
  • További változók átadása a sminkfájloknak
  • Új régiók definiálása (a meglévő fejléc, lábléc, jobb oszlop, bal oszlop és tartalmi rész mellé)

Ha kedvet kaptunk a könyv elolvasásához és meg szeretnénk rendelni az Amazontól, használjuk a Drupalbook.com oldalon található linket. Vásárlásunkkal így a Drupal közösséget támogatjuk. A teljes könyv megvásárolható PDF formátumban is közvetlenül a kiadó honlapján. A papír kiadás tulajdonosai az elektronikus verziót kedvezményesen 10 dollárért vásárolhatják meg – az instrukciókat lásd a könyv utolsó oldalán.

Eddig megjelent Drupallal kapcsolatos könyvek:

Kategóriák: 

Tartalomszervezési megoldások I. - Taxonomy és Book modul

Anonymous képe

Az egyik leggyakoribb feladat honlapkészítés során, hogy a webhelyre feltöltött nagy mennyiségű tartalmat (írásokat, oldalakat, képeket – Drupal szakzsargonban: a node-okat) valahogyan rendszerezzük. Erre a Drupal alapcsomag két modult is kínál: a Taxonomy (kategorizáló) modullal a tartalmakat kategóriákba sorolhatjuk, a Book (könyv) modullal pedig "szülő-gyermek" kapcsolatot, azaz hierarchikus viszonyt alakíthatunk ki közöttük. Egyszerűbb webhelyeken ez általában elegendő a tartalmak rendszerezéséhez; azonban ahogy honlapunk egyre összetettebbé válik, előfordulhat, hogy beleütközünk az alapcsomag korlátaiba. Ilyenkor kiegészítő modulok telepítésével növelhetjük a Drupal képességeit. Az alábbi kétrészes cikkben először a tartalomszervezés problémáját ismertetjük, majd többféle, egyre növekvő komplexitású megoldást mutatunk be kezdő és haladó Drupal webmesterek számára.

A feladat

Vegyünk egy egyszerű példát: szeretnénk egy sportegyesületnek webhelyet készíteni. Az egyesület keretein belül 2 csapat is működik, egyenként 15-20 taggal. Honlapunkon az egyesület adatai mellett szeretnénk önálló oldalt nyitni mindkét csapatnak, valamint egyenként az összes játékosnak. Természetesen a játékosok oldalain fel kell tüntetnünk, hogy melyik csapatban játszanak.

Első megoldás: Taxonomy modul

Ha Taxonomy modullal oldjuk meg a feladatot, akkor hozzunk létre egy "Csapatok" nevű szótárat, és ehhez adjunk 2 kategóriát: Piros csapat, Kék csapat. Ezek után hozzuk létre a játékosok oldalait, és a tartalombeküldő oldalon a Kategóriák rovatban jelöljük be, hogy az adott játékos melyik csapathoz tartozik. A végeredmény valahogy így fog kinézni:

  • Piros csapat (taxonomy/term/1)
    • Játékos-1 (node/1)
    • Játékos-2 (node/2)
    • Játékos-3 (node/3)
    • stb.
  • Kék csapat (taxonomy/term/2)
    • Játékos-4 (node/4)
    • Játékos-5 (node/5)
    • stb.

Ha most felkeressük webhelyünkön a www.honlapneve.hu/taxonomy/term/1 oldalt, akkor ott egy listát találunk, amelyben a linkek a Piros csapat tagjainak egyéni oldalaira mutatnak (www.honlapneve.hu/node/1, stb.); az egyéni oldalakon pedig ott látjuk a cím alatt a kategória linket, amely megmutatja, hogy az adott játékos melyik csapatnak a tagja, és amelyen keresztül visszatérhetünk a csapat oldalára. A menübe felvehetjük a Piros csapat és Kék csapat oldalaira mutató linkeket – ezzel el is készítettünk egy egyszerű webhelyet.

Ezután azonban szeretnénk továbblépni: logikusnak tűnik, hogy a csapatok oldalának tetején, a játékosok listája felett ott legyen a csapatvezető neve és elérhetősége, az edző neve, a csapat története, közös fotója, stb. A Taxonomy modul erre nem ad lehetőséget. A modul által létrehozott kategóriák csak egyszerű dobozok, amelyekbe betehetjük az egyes tartalmakat (a játékosok egyéni oldalait) – de a dobozon csak a kategórianév (Piros csapat, Kék csapat) szerepel, és nem írhatunk rá további információkat.

Második megoldás: Book modul

Próbálkozzunk most a Book modullal. Ennek bekapcsolása után a node oldalakon a Megtekintés és a Szerkesztés mellett megjelenik egy újabb fül: a Vázlat. Hozzunk létre egy "Csapatok" nevű oldalt, a Vázlat fülön nyilvánítsuk könyv címlapnak (azaz olyan oldalnak, amely legfelső szintű); majd hozzuk létre a csapatok oldalait, és ezeket rendeljük a könyv címlap mint "szülő" oldal alá. Mivel most a csapatok oldalai egyszerű Drupal könyvlapok, bármilyen információt rájuk írhatunk, így végre helyet kaphat a csapat elérhetősége, története, stb. Következő lépésben hozzuk létre a játékosok egyéni lapjait, és soroljuk be őket a csapat-oldalak alá. Struktúránk most így néz ki:

  • Csapatok
    • Piros csapat (node/1)
      • Játékos-1 (node/2)
      • Játékos-2 (node/3)
      • Játékos-3 (node/4)
      • stb.
    • Kék csapat (node/5)
      • Játékos-4 (node/6)
      • Játékos-5 (node/7)
      • stb.

Ez a megoldás már megfelel az elképzeléseinknek – és egyszerűbb, pár oldalas webhelyeken ennél többre nincs is szükségünk. Mi azonban szeretnénk további listázó oldalakat készíteni, például a játékosok neme (fiú-lány) szerint.

  • Piros csapat
    • Piros lányok
    • Piros fiúk
  • Kék csapat
    • Kék lányok
    • Kék fiúk

Ha Taxonomy modullal dolgozunk, a feladat egyszerű. Létrehozunk egy Nemek szótárat, abban két kifejezést (Fiúk, Lányok), majd a játékosokat besoroljuk valamelyik kategóriába. Ha szeretnénk a Piros lányokat listázni, csak kombinálnunk kell a kategóriák azonosítóit az oldalra mutató link végén, és a Drupal magától tudja, hogy mely játékos-oldalakat kell felvennie a listára.

  • Csapatok szótár
    • Piros csapat kategória (taxonomy/term/1)
    • Kék csapat kategória (taxonomy/term/2)
  • Nemek szótár
    • Fiúk kategória (taxonomy/term/3)
    • Lányok kategória (taxonomy/term/4)

A Piros lányok listáját a következő címen találjuk: www.honlapneve.hu/taxonomy/term/1,4.

A Kék fiúkat pedig itt: www.honlapneve.hu/taxonomy/term/2,3.

A megoldás kifogástalanul működne – ha nem vetettük volna el a kategóriák használatát akkor, amikor kiderült, hogy nem tudjuk a csapatok elérhetőségét a csapat-oldal tetejére kiírni. A Book modullal készített Piros csapat és Kék csapat viszont nem kategória, hanem közönséges oldal, ezért ezeket nem tudjuk a Fiúk-Lányok kategóriákkal kombinálni.

Harmadik megoldás: mindent bele!

Kézenfekvőnek tűnik, hogy a két rendezési módszert kombináljuk, azaz a játékosok oldalait tegyük be kategóriákba (Piros csapat, Kék csapat, Fiúk, Lányok), és egyúttal soroljuk be őket a Piros csapat és Kék csapat c. könyvlapok alá. Ezzel megoldódott a kombinált listázás problémája. Ugyanakkor most egy zavaró jelenséget tapasztalhatunk: ha látogatónk felkeresi a Piros csapat könyvlapját (elérhetőségekkel, csapattörténettel, stb.), majd onnan elnavigál Játékos-1 személyes oldalára, ott találja Játékos-1 neve mellett a Piros csapat kategóriára mutató linket. Ha tehát az oldal elolvasása után a látogató szeretne a Piros csapat többi tagjával is megismerkedni, akkor rá fog kattintani erre a linkre, ez viszont nem a Piros csapat könyvlapra mutat (ahol az előbb járt, és ahová szeretne visszalépni), hanem a Piros csapat nevű kategória listázó oldalára (amely a látogató számára is nyilvánvaló módon nem azonos a korábban megtekintett csapat-oldallal).

A problémát rövid úton megoldhatjuk, ha eltüntetjük a könyvlapokról a kategória-linkeket. Keressük meg a sminkünk könyvtárában a node.tpl.php nevű fájlt, és készítsünk róla ugyanebbe a könyvtárba egy másolatot node-book.tpl.php néven. Ezzel lényegében arra utasítottuk a Drupalt, hogy könyvlapok esetén a megjelenítéshez ne a node.tpl.php fájlt használja, hanem a most létrehozott node-book.tpl.php-t. Ezután nyissuk meg a fájlt egy kódszerkesztő programmal (Windows alatt pl. Notepad++), és töröljük a taxonómiára vonatkozó részt. Garland smink esetén a törlendő kódrészlet a következő:

Ha most felkeressük bármelyik játékos oldalát, nem látjuk a zavaró kategória-linkeket. Ezzel azonban annak lehetősége is megszűnt, hogy látogatóink maguktól felfedezzék a kombinált kategóriák oldalait (Piros lányok, Kék fiúk) – így ezekre külön fel kell hívnunk a figyelmet. Ehhez kapcsoljuk be az alapcsomagban kapott Path modult, amelynek segítségével egyszerűen megjegyezhető útvonal álneveket rendelhetünk oldalainkhoz. A Piros csapat oldalához a szerkesztő űrlapon adjuk meg a piros útvonal álnevet (az oldal ezután a www.honlapneve.hu/piros címen is elérhető lesz), a Kék csapat oldalához pedig a kek-et; majd vegyük fel a két oldalra mutató linket az elsődleges menübe. A játékosok oldalainak szintén adjunk egyedi útvonalneveket, ahol az útvonal első tagja mindig a csapat neve legyen: piros/kisspal, kek/nagypeter.

Ezután készítsünk egy menüt, amelynek elemei a Piros lányok, ill. Piros fiúk oldalára mutatnak; majd a blokk beállítások között határozzuk meg, hogy ez a menü csak a piros és a piros/* útvonalon található oldalakon jelenjen meg. Ugyanezt ismételjük meg a Kék lányok, Kék fiúk esetén. Most tehát ha látogatónk elnavigál bármelyik csapat, vagy játékos oldalára, akkor feltűnik a lapon egy újabb menü, amelyen keresztül eljuthat a Piros lányok, Piros fiúk, ill. Kék lányok, Kék fiúk oldalakra.

Tartalomszervezési megoldások II. - Views és CCK modul

Anonymous képe

Negyedik megoldás: Views

Tételezzük fel, hogy egyesületünk honlapján a csapatnevek mellet nem 2 hanem 4 további kategóriát szeretnénk bevezetni: Fiúk, Lányok, Hazai játékosok, Vendégjátékosok. Ez a – rendkívülinek nem nevezhető – helyzet azt eredményezi, hogy webhelyünk szerkezete, és ezzel párhuzamosan a menürendszer kényelmetlenné és a kategóriák közötti átfedésektől függően nehezen áttekinthetővé vált:

  • Piros csapat
  • Piros fiúk
  • Piros vendégjátékosok
  • Piros vendégjátékos fiúk
  • Fiúk
  • Hazai játékos fiúk
  • ...stb.

Ha például azt szeretnénk, hogy a hazai játékosoknak és a vendégjátékosoknak a csapatok mintájára külön oldaluk legyen (ne csak egy-egy lista), akkor ezeknek külön könyvet kell nyitnunk; és mivel egy oldalt (könyvlapot) csak egy könyvbe tudunk beilleszteni, a játékosok oldalait kétszer kell felvinnünk a honlapra. Hasonló problémát okoz az a korlátozás, hogy egy node-hoz csak egy útvonal álnevet rendelhetünk, ezért pl. egy Piros csapatban játszó vendégjátékos fiú oldalán vagy a Piros fiúk, vagy a Vendégjátékosok segédmenüpontot fogjuk tudni megjeleníteni (hacsak nem használunk többszörösen összetett útvonal álneveket, amivel éppen az álnév lényegét – egyszerűen megjegyezhető internetcím – veszítjük el). Ezen a ponton már a Drupal alapcsomag korlátait feszegetjük, és éppen ideje kiegészítők után néznünk: ismerkedjünk meg a Views modullal.

A Views a Drupal rendszer által készített listák felülírására, valamint új listák létrehozására használható. A felülírás azt jelenti, hogy egy adott webcímen, pl. a www.valami.hu/taxonomy/term/1 alatt nem a szokásos kategória-listát látjuk, hanem egy általunk megadott szempontok szerint módosított felsorolást. Lássuk, milyen módosításokat tesz lehetővé a Views:

  • Lista megjelenítése nem csak önálló oldalon, hanem blokkban is
  • Hozzáférés korlátozása felhasználói csoportok szerint
  • Oldalaknak, blokkoknak egyéni cím
  • Oldalaknak, blokkoknak egyéni fejléc és lábléc
  • Listázott elemek megjelenítési módjának meghatározása (teljes node, bevezető, táblázat, felsorolás)
  • Listában szereplő node-ok számának meghatározása
  • Listában szereplő mezők meghatározása (pl. cím, beküldési idő, szerző neve, stb.)
  • Lista szűkítése kategóriák, tartalomtípusok, közzétételi beállítások szerint
  • Lista rendezése növekvő vagy csökkenő sorrendbe
  • ... stb.

A fenti felsorolás nem teljes, de talán érzékelteti a modul sokoldalúságát. Számunkra most a legérdekesebb az a lehetőség, hogy a listázó oldalakhoz egyéni fejlécet készíthetünk. Eredeti problémánk az volt, hogy nem tudtuk a kategória listázó oldalak tetejére beszúrni a csapatok elérhetőségét és egyéb információit – ezt a feladatot szépen megoldhatjuk a listázó oldal felülírásával. Készítsük el tehát a kategóriákat és vigyük fel a játékosok oldalait:

  • Piros csapat (taxonomy/term/1)
    • Játékos-1 (node/1)
    • Játékos-2 (node/2)
    • Játékos-3 (node/3)
    • stb.
  • Kék csapat (taxonomy/term/2)
    • Játékos-4 (node/4)
    • Játékos-5 (node/5)
    • stb.

Ezután az admin/build/views/add oldalon készítsük el a nézeteket, amelyekkel felülírjuk a taxonomy/term/x oldalakat:

  • Name (név): piroscsapat
  • Access (hozzáférés): mivel mindenki számára elérhetővé kívánjuk tenni az oldalt, ne jelöljük be egyik csoportot sem
  • Description (leírás): Piros csapat oldala (ezt a szöveget csak az adminisztrátor látja)
  • Page (oldal)
    • Provide page view (oldal készítése): kipipálva
    • URL (webcím): taxonomy/term/1
    • View type (nézet típusa): Teaser List (bevezetők)
    • Title (az oldal látható címe): Piros csapat
    • Use Pager (lapozó használata): kipipálva
    • Breadcrumb trail should not include "Home" (A morzsa ne tartalmazza a 'Nyitólap' linket): hagyjuk üresen
    • Nodes per Page (node-ok száma): 10
    • Header (fejléc): ide illeszthetjük be a Piros csapatra vonatkozó információkat; ha HTML vagy PHP kódot használunk, ne felejtsük el átállítani a beviteli módot
  • Filters (szűrők):
    • Node: Published -> Equals: Yes (csak a közzétett oldalak szerepeljenek a listán)
    • Taxonomy: Terms for Csapatok -> Is One Of: Piros csapat (csak a 'Piros csapat' kategóriába sorolt cikkek szerepeljenek a listán); Option: 10 (ha szeretnénk, hogy a 'Piros csapat' kategória alá besorolt esetleges alkategóriák tartalmát is listázza)
  • Sort Criteria (sorrendezési szabályok):
    • Node: Sticky -> Order: Descending ('kiemelt' cikkek az oldal tetejére, csökkenő időrendi sorrendben)
    • Node: Created Time -> Order: Descending (többi cikk csökkenő időrendi sorrendben)
  • Látogassunk el a www.valami.hu/taxonomy/term/1 oldalra: a korábbi egyszerű listázó oldal helyett most a fejléccel kiegészített, teljes értékű Piros csapat oldalt látjuk. Természetesen használhatunk egyszerűen megjegyezhető webcímeket is; ehhez navigáljunk az 'Útvonal álnevek' menüpont alá, és adjuk meg, hogy a taxonomy/term/1 mellett legyen oldalunk a piros címen is elérhető. A 'Menük' oldalon állítsunk be egy piros címre mutató menüpontot is – ezzel el is készültünk a Piros csapat oldalával. Ismételjük meg a nézet készítés, útvonal álnév megadás, menüpont készítés lépéseket valamennyi kategóriánkra. Ha ezek után felkeressük bármelyik játékos oldalát, ott találjuk a kategória linkeket (Piros csapat, Fiúk, Vendégjátékosok); és ha bármelyik linkre rákattintunk, a Views által készített, fejlécekkel/láblécekkel feljavított nézet-oldalakra lépünk. Ezeket az oldalakat igen jól lehet sminkelni, tehát egyéni megjelenést is tudunk nekik adni; emellett a fejléc/lábléc szövegbe egyszerűen beilleszthetünk kombinált taxonómia-linkeket (pl. a Fiúk oldalon a hazai és vendégjátékos fiúk listájára mutató linkek), ill. Insert View modullal bármilyen más nézetet – így kordában tudjuk tartani a csak bizonyos oldalakon megjelenítendő másodlagos menük burjánzását. Webhelyünk ezzel áttekinthető szerkezetet és következetes navigációs struktúrát kapott.

    Megjegyzés: A Views nézetkészítő űrlapján lehetőség van URL-ként útvonal álnevek megadására, valamint menüpont készítésre is. Ezeket a szolgáltatásokat akkor célszerű használni, ha teljesen új, a rendszerben nem szereplő listát készítünk (pl. ha a "Piros csapat" kategóriában szereplő "kép" típusú tartalmakat szeretnénk kigyűjteni egy külön képgaléria számára). Ha egy meglévő listát szeretnénk felülírni, akkor először készítsük el a nézetet a rendszer által meghatározott URL (pl. taxonomy/term/x) megadásával, majd külön lépésben definiáljuk az útvonal álnevet és a menüpontot. Ezzel elkerülhető, hogy webhelyünkön egymás mellett éljen a hagyományos oldal és annak felülírt verziója, ami esetleg megzavarhatja a barangoló látogatókat.

    Ötödik megoldás: CCK + Views

    A Views modullal már egészen összetett webhelyeket is építhetünk anélkül, hogy egyetlen sor PHP-kódot kellene írnunk; mégis elképzelhető néhány olyan eset, amikor még ez a megoldás sem elégíti ki az igényeinket. A Views kezelőfelülete meglehetősen bonyolult, márpedig minden egyes alkalommal, amikor új nézetet készítünk (pl. új kategóriával bővül a webhely), vagy meglévőt módosítunk (megváltozott a csapat telefonszáma), akkor kénytelenek vagyunk ezen a barátságtalan űrlapon dolgozni. Húsz-harminc nézetnél többet ilyen módon kezelni még akkor is kényelmetlen, ha a webhely karbantartását hozzáértő webmester végzi – laikusoktól pedig egyáltalán nem várható el, hogy kiigazodjanak a Views bokros opciói között.

    Szintén tovább kell lépnünk akkor, ha szeretnénk kétszintes honlapunkat (játékosok, csapatok) három- vagy többszintessé bővíteni. Képzeljük el azt az esetet, amikor több tucat csapatunk van, és szeretnénk a csapatok részvételével versenyeket szervezni. Létrehozhatunk egy Versenyek kategóriát, de ehhez nem tudjuk hozzárendelni a csapatokat, mert azok nem node-ok, hanem kategóriák, ill. a kategóriák módosításával létrehozott nézetek. Ennek a problémának a megoldására született a Category kiegészítő modul – az ezzel a modullal létrehozott kategóriák tehát egyúttal node-ok is, amelyek tetszőleges információkat (elérhetőségek, verseny helyszíne, időpontja, stb.) tartalmazhatnak, és amelyeket a szokásos módon kategorizálhatunk és listázhatunk. A Category felülete azonban legalább olyan bonyolult, mint a Views modulé, és csupán egyetlen szolgáltatást kínál. Cikkünk megírásának időpontjában általában jobb megoldás a Content Construction Kit (rövidítve CCK) modul használata.

    A Drupal alapcsomaggal létrehozott tartalomtípusok csak két mezőt tartalmaznak: a címet és a törzset. A CCK modul legfontosabb szolgáltatása, hogy lehetővé teszi a tartalomtípusok bővítését további mezőkkel. Ha jól strukturálható adatokkal dolgozunk, akkor a CCK segítségével a tartalmak beküldését és megjelenítését nagymértékben szabályozni tudjuk. Példánknál maradva hozzunk létre 3 tartalomtípust a szükséges mezőkkel:

    • Játékos
      • Name: Játékos
      • Type: jatekos
      • Title field label: A játékos neve
      • Body field label: A játékos életrajza
      • Text field: A játékos telefonszáma
      • Node reference: Csapat
    • Csapat
      • Name: Csapat
      • Type: csapat
      • Title field label: A csapat neve
      • Body field label: A csapat története
      • Text field: Az edző neve
      • Text field: Az edző telefonszáma
      • Node reference: Játékos
    • Verseny
      • Name: Verseny
      • Type: verseny
      • Title field label: A verseny neve
      • Body field label: A verseny leírása
      • Text field: Helyszín
      • Date field: Időpont
      • Node reference: Csapat

    A tartalomtípusok létrehozása után a "Tartalom beküldése" menüpont alatt megjelenik a 3 típus – az ezekhez tartozó beküldő űrlap kitöltése pedig a laikus felhasználó számára sem okoz gondot. Tartalomszervezés szempontjából figyelemre méltó a "Node reference" mező, amely megoldást jelent kategorizálási problémáinkra: ennek segítségével a versenyzőket a csapatokhoz, a csapatokat pedig a versenyekhez tudjuk rendelni. A gyakorlatban ez azt jelenti, hogy például egy új játékos létrehozása két lépésből áll: először is létre kell hoznunk a "játékos" típusú tartalmat, amelynek során kiválasztjuk a node reference listából, hogy az új ember melyik csapatban játszik; majd az adott csapat node reference listájára fel kell vennünk az új játékost. A munkafolyamatot tovább egyszerűsíthetjük, ha a csapatok tagjait nem node reference útján határozzuk meg, hanem Views modullal készítünk egy csapattagokat listázó nézetet, majd ezt beágyazzuk a Csapat tartalomtípusba.

    • URL: csapat
    • Filters:
      • Node Published -> Equals: Yes
      • Node: Type -> Is One Of: Játékos
    • Arguments:
      • Argument type -> Node reference: Játékos (field_csapat)
      • Default -> Summary, unsorted

    Ezzel lényegében megmondtuk a Views-nak, hogy készítsen listát azokból a játékos node-okból, amelyek rendelkeznek field_csapat nevű CCK-s mezővel. Ha a nézet nem kap argumentumot az URL végén (pl. a www.honlapneve.hu/csapat címen), akkor készít egy összesített listát, zárójelben a csapat játékosainak számával:

    • Piros csapat (20)
    • Kék csapat (18)

    Ha a nézet az URL végén argumentumot kap (pl. www.honlapneve.hu/csapat/12), akkor kilistázza az adott csapatra – esetünkben a node/12 azonosítójú, csapat típusú tartalomra – node reference útján hivatkozó node-okat, azaz a csapat játékosait. Ezt a nézetet Viewfield modullal tudjuk beágyazni a csapat node-okba:

    1. Egészítsük ki a Csapat CCK-s tartalomtípusunkat egy Viewfield mezővel.
    2. Argumentumként adjuk át az aktuális node azonosítóját: %nid.
    3. Ha ezek után felkeressük bármelyik Csapat típusú node-ot, ott látjuk az adott node-ra node reference útján hivatkozó játékosok listáját.

    A CCK és a Views a legdinamikusabban fejlesztett kiegészítő modulok közé tartoznak, egyes funkcióik hamarosan az alapcsomagban is megjelennek. Számíthatunk rá, hogy a jövőben a hasonló rendszerező oldalak készítése tovább fog egyszerűsödni. Elég jó angol nyelvű dokumentáció található róluk a Drupal.org kézikönyvében:

    További újdonságot jelenthet a Book modul tervezett átalakítása, amely kimondottan a hierarchikus honlapok készítését fogja megkönnyíteni.

    Remélhetőleg a fenti példákból is nyilvánvalóvá vált, hogy szinte bármilyen tartalomszervezési problémával kerülünk szembe, találni fogunk a Drupal kínálatában olyan megoldást, amellyel PHP kód írása nélkül, esetleg pár soros kódrészlet beillesztésével a feladat megoldható. Azonban a Drupal csak a kódolás terhét tudja levenni a vállunkról – gondolkodni nem tud helyettünk. A számunkra optimális megoldást csak akkor tudjuk kiválasztani, ha a webhely építését megelőzően elemezzük, modellezzük a feladatot, és még a tartalmak tömeges felvitele előtt alaposan tesztelünk.

    CsatolmányMéret
    Kép ikon cck_viewfield.png13.35 KB

    Újság elektronikus kiadása CCK alapokon

    Anonymous képe

    Ma már szinte minden nyomtatott sajtótermék elérhető interneten is. Ezeknek az internetes verzióknak a fejlesztése során két felfogás valamelyike szokott érvényesülni: az egyik szerint egy külön online verziót készítenek, amibe feltöltik a nyomtatott példány fontosabb cikkeit; a másik szerint az internetes és a papíralapú verzió lehetőség szerint legyen egymás tükörképe.

    Az előbbi megközelítés jobban illeszkedik a webes tartalomkezelési megoldásokhoz, ezért gyorsabban, olcsóbban fejleszthető és karbantartható – a második felfogás előnye, hogy a látogatók – és ami legalább ilyen fontos: a hirdetők – egységes arculatú és színvonalú kiadvánnyal találkoznak a neten és az újságárusnál. Ez utóbbi megközelítés viszont azzal a következménnyel jár, hogy a minőségi újságok elektronikus szerkesztőségeit rendszerint igen bonyolult, egyénileg fejlesztett tartalomkezelők szolgálják ki.

    Moshe Weitzman és Barry Jaspan nemrégiben arra kaptak megbízást, hogy elkészítsék a New York Observer c. lap internetes verzióját, méghozzá úgy, hogy a kiadó a webes verzióban is ragaszkodott a nyomtatásban érvényesülő szerkesztési és grafikai igényességhez. Hogy hogyan sikerült 2 Drupal fejlesztőnek 2 hónap alatt megoldani a feladatot, arról a Drupal.org honlapon közölt írásukban számolnak be.

    Az újságok elektronikus kiadását hagyományos Drupal módszerekkel a következő módon készítettük:

    1. A cikkek a rendszerben valamilyen tartalomtípusnak (pl. írás) felelnek meg.
    2. A cikkeket a rovatoknak megfelelő kategóriákba rendezzük.
    3. A címlapon és a rovatok oldalain blokkokat helyezünk el, amelyek megjelenítését/elrejtését az útvonal álnevek segítségével szabályozzuk.
    4. A blokkokba a tartalmat (a cikklistákat) kézzel írt adatbázis-lekérdezésekkel, vagy újabban Views modullal készített nézetek segítségével töltjük fel.
    5. Az egyes számok cikkeit kategóriákkal fogjuk össze (pl. a „2007. május 6-i szám” egy kategória).
    6. A rendszerbe feltöltött cikkek megjelentetését valamilyen cron alapú időzítő végzi.

    A New York Observer – és a legtöbb „komoly” újság – számára ez a megoldás azért nem elfogadható, mert a lapkiadásban elengedhetetlen, hogy a szerkesztők előnézetben lássák, egy adott tartalmi elem hogyan fog mutatni a végleges helyén és formájában. Gyakori, hogy egy címet, bekezdést átfogalmaznak, egy kép méretét és arányait megváltoztatják annak érdekében, hogy a cikk megjelenése jobban illeszkedjék az oldal struktúrájához, vagy a mellette álló hirdetéshez. Ehhez lényegében annyi párhuzamos tesztwebhelyet kellene működtetni és összehangolni, ahány rovat van az újságban – plusz egyet külön a nyitólap számára.

    A két fejlesztő ennek a problémának a megoldására egy újszerű megoldást vetett be: a címlapot és a rovatok oldalait, sőt, a cikkekhez kapcsolódó további cikkek listáit is CCK tartalomtípusként definiálta. A kilistázandó tartalmakat node reference segítségével kapcsolták az oldalakhoz, a megjelenítést pedig tartalomtípusra szabott template fájlokkal oldották meg. Összességében mintegy 110 CCK mezőt definiáltak a webhely felépítése során – ezek közül talán a legfontosabb a "Közzététel időpontja" nevű mező, ami feleslegessé tette a cron alapú időzítő használatát: egy oldal lekérésekor a rendszer egyszerűen a múltbeli időpontban publikálandó tartalmak közül a legfrissebb közzétételi időponttal rendelkezőt küldi ki a látogatónak. A megoldás további előnye, hogy a nyitólap és a kategória-oldalak „közönséges” tartalommá alakításával elérhetővé váltak a Drupal alaprendszer és a kiegészítő modulok node-okra fejlesztett szolgáltatásai.

    Moshe és Barry cikke az eredeti alapötlet mellett számos ügyes fogást mutat be. A fejlesztők egy idő után nagyon megunták a blokk beállítási oldalakon a szerkesztgetést, ezért a blokkok bonyolult ki- és bekapcsolási utasításait egyszerűen egy tömbben helyezték el, amit beépítettek a sminkbe. A címkefelhő elemeinek méretét nem a címke – önmagában nem sokat mondó – „népszerűsége”, hanem az adott címkével megjelölt cikkek olvasottsága határozza meg.

    A fejlesztők beszámolójához érkezett hozzászólások egy része a webhely optimalizálására vonatkozott, különös tekintettel a közfelfogás által problematikusnak tartott CCK és Views használatára – Moshe szerint komolyabb optimalizálásra nem volt szükség (vélhetően a webhely dedikált szerveren fut), viszont nagyon egyszerű módon, az Apache mod_expires moduljának bekapcsolásával elérték azt, hogy az oldal jóval gyorsabban töltődjön be a böngészőbe. Kérdésekre adott válaszként bemutatták a legolvasottabb és legtöbb hozzászólást vonzó cikkek listáit rejtő füles megoldást, beszámoltak a projekt részfeladatainak időigényéről, és még jónéhány érdekes témáról. Érdemes tehát legörgetni a cikk aljáig és a hozzászólásokból is kimazsolázni a számunkra érdekesebb részleteket.