Blog-lista
2010.06.07. 08:44
Annak ellenére, hogy a hétvégén elsősorban a tanulmányaimra szántam azt az időt, amit nem a családommal töltöttem, és emellett teljesen át kellett alakítani - most már a végleges formájára - ahonlapot, amit megrendeltek tőlem, maradt egy kis időm foglalkozni a saját oldalammal is.
A cél az volt, hogy egy Page-en megjelenjen a blogok listája. Sajnos csak utóbb derült ki, hogy a hook_load a saját tartalom-típusoknál hívódik csak meg, és nem minden csomópontra. Nem tudom, hogy ez mennyire jogos, mindenképpen biztonságosabb, és kevesebb erőforrást igényel. Mivel nem akartam belepiszkálni a core-ba, ezért úgy döntöttem, hogy legyen akkor saját tartalom-típusom. Erre is biztosított a Drupal.org tutorialt, úgyhogy semmi perc alatt készen voltam. Annyi módosítást eszközöltem a kódban, hogy a form nem tartalmaz body elemet, ehelyett a teaser-t lehet szerkeszteni, mivel a body-t dinamikusan generálom.
Először azt gondoltam, hogy a hook_load csak a megjelenített tartalmat változtatja meg, ezért azt találtam ki, hogy a csomópontom kap egy egyedi nevet (blog_list_562123) és ez alapján fogom keresni. Sajnos ez nem működik. Bár a csomóponthoz nem kerül elmentésre a _load-ban beállított body, elmenti a title mező tartalmát felülírta, így első betöltésnél elrontotta az azonosítót. Más utat kellett választani.
Mivel úgyis ott van a MySQL adatbázis, ezért adódik, hogy abban tároljam a kiválasztott csomópont azonosítóját. A natív elérés helyett a Drupal Schema modulját használtam, mely félig meddig elfedi az adatbázis-hozzáférést (a táblák létrehozását-törlését és a rekordok írását meg tudja valósítani objektumokból, de olvasásra nem találtam metódust, ilyenkor csak a táblanevek feloldásával segít). Ehhez létre kell hozni egy .install file-t is, és abban definiálni kell a hook_schema, hook_install és hook_uninstall függvényeket. Itt egy buktatóval találkoztam: ha a modul már installálva van, akkor hiába változtatjuk a .install file-t, a modul újra-aktiválásával nem kerül újra-installálásra a modul, ehhez uninstallálás után kell újra aktiválni.
Ha a telepítőben létrehoztuk a táblát, a következő lépés a node létrehozása, és az azonosító elmentése az adatbázisba. Ezt a hook_enable-ben valósítottam meg. Először ellenőrzöm, hogy létezik-e az adatbázis-bejegyzés. Ha igen, akkor megkeresem a hivatkozott node-ot. Ha ez nincs meg, akkor létrehozom, és frissítem az adatbázis-bejegyzést. Ha megtalálom, akkor tétlenül fut le a hook, egyébként létrehozza a node-ot, és vagy frissíti a hivatkozó bejegyzést, vagy létrehoz egy újat, szükség szerint [forráskódot majd a saját oldalamra töltök fel].
Ezután már csak a tartalmat kell betölteni az oldal törzsébe, amennyiben a hook_load észleli, hogy a node azonosítója megegyezik az adatbázisban tárolttal. Ehhez a korábbi blog-lista kódját használtam fel, elé emelve be a teaser szövegét, és egy elválasztó <h3> címet. az eredmény teljességgel kielégítő, még annyiban kell finomítani, hogy mindenkinek csak azokat a blogokat mutassa, amelyekben van általuk is látható bejegyzés.
A bejegyzés trackback címe:
Kommentek:
A hozzászólások a vonatkozó jogszabályok értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a Felhasználási feltételekben és az adatvédelmi tájékoztatóban.