legjobb drupal modulok

Boost modul: a Drupal esete a statikus html oldalakkal.

A múlt heti bejegyzésben arról írtam, hogy egy gyors weboldal miért jelent versenyelőnyt a konkurenciával szemben. Kétféle sebesség probléma lehet, a kliens oldalon akkor van gond, ha a böngésző program nehezen vagy lassan jeleníti meg az oldalt. Szerver oldalon pedig akkor van gond, ha a böngészőnek indokolatlanul sokat kell várnia a szerverek válaszára.

A Drupal boost modul egy szerver oldali megoldás: az anonim felhasználók oldalletöltéseit teszi villámgyorssá.

Tisztán emlékszem a 2. Magyar PHP konferenciára, ott hallottam először a Drupalról. Abban az időben nagyon foglalkoztatott a weboldalak sebességének optimalizálása, azon belül is az előre legenerált statikus html oldalak kiszolgálásának voltam nagy rajongója. Fel is tettem a kérdést az előadónak, hogy a Drupal tud-e ilyet. Ha jól emlékszem, valami olyasmit válaszolt Goba, hogy az alap rendszer nem tudja, de biztosan készíthető hozzá ilyen modul.

Nos, hölgyeim és uraim, a Drupal boost modul egészen pontosan ezt csinálja: előre legyártott statikus html fájlokat szolgál ki az anonim felhasználóknak. Ezáltal teljes egészében kihagyva a buliból a PHP, Drupal, SQL stacket.

Ez a megoldás villámgyors oldal kiszolgálást eredményez, és egyben hatalmas tehertől szabadítja meg a webszervert. Persze vannak hátrányai is a megoldásnak, de előbb nézzük röviden hogyan működik.

A Boost modul működése

Először telepíteni kell magát a modult. Ez fog gondoskodni a statikus html fájlok mentéséről. Létre kell hozni egy „cache” nevű könyvtárat a Drupal telepítés gyökerében, ide fognak kerülni a html fájlok. Végül pedig a .htaccess fájlba be kell másolni egy nagy adag kódot, itt történik a varázslat: ez gondoskodik a html fájlok kiszolgálásáról.

A .htaccess fájlba másolt kód több különböző feltételt figyel, és ha mindegyik teljesül, akkor a Drupal index.php helyett az elmentett statikus fájl kerül kiszolgálásra. Ilyen feltétel például, hogy nem létezik a DRUPAL_UID nevű cookie, azaz hogy nem bejelentkezett felhasználó nézi az oldalt, vagy hogy GET kérésről beszélünk, és nem POST-ról.

Az eredmény: villámgyors oldal kiszolgálás az anonymous látogatók számára.

A cache fájlok érvénytelenítése

Ha egyszer elkészült egy oldalhoz egy statikus gyorstár fájl, és a fent említett feltételek teljesülnek, akkor az bizony ki lesz szolgálva. A kiszolgálás pillanatában ugyanis nincs lehetőségünk mérlegelni, hiszen nem fut le semmilyen Drupal vagy PHP kód. Éppen ezért alaposan oda kell figyelni, hogy mikor kerül érvénytelenítésre egy oldal gyorstár változata.

Először is, van egy beállítható felső idő határ. Ha ennél régebbi a cache fájl, akkor a boost törli az időzített feladatok (cron) segítségével.

Ha egy node oldalról beszélünk, akkor a node módosításakor is törli a cachet. Ha hozzászólás érkezett a node-hoz, szintén megy a cache a kukába. Ha egy node megkapja a „Promoted to front page”, azaz címlapra helyezés státuszt, akkor meg a kezdőlap lesz törölve. Persze ez csak a Drupal alapértelmezett kezdőlapjával működik. Ha saját kezdőlap megoldásunk van, és használni akarjuk a boost-ot, akkor nekünk kell gondoskodni a címlapi gyorstár törléséről.

A taxonómia lista oldalak fájljait is helyesen üríti a modul, amikor kell. Sőt elvileg CCK tartalomra hivatkozás mező használata esetén, ha változik a hivatkozás, akkor is helyesen törlődnek a megfelelő node gyorstárak.

Mindezeken felül persze lehet, hogy szükségünk lesz saját érvénytelenítő kódot is írni. Ha egyedi címlapot használunk, akkor mindenképpen.

Hátrányok

Az egyik hátránya a modulnak, hogy csak az Apache kiszolgálót támogatja teljes egészében. Márpedig maga az Apache is egy elég komoly lassító tényező, mint ahogy múlt héten egy hozzászólásban is írták. Elvileg nginx, lighthttpd és IIS7 használata is megoldható, többé kevésbé. Én ezeket nem próbáltam még.

A másik gond magából a módszerből adódik: mivel kikerüljük a Drupal-t, ezért az alaprendszerbe épített statisztika modul, illetve hasonló analitika megoldások egyáltalán nem fognak működni. Jelenleg egy nagyon izgalmas, saját fejlesztésű modulon dolgozom, amely azonban épít a Drupal mag statisztika megoldására. Ezért sajnos a kettő együtt nem működik.

Szintén a technológiából adódik, hogy a weboldal jobb és bal sávjaiban elhelyezett dobozok tartalma nem mindig frissül, és ezért Boost használata esetén néha furcsán inkonzisztens adatok jelennek meg. Illetve a véletlenszerűen változó dobozok, például 5 véletlenül kiválasztott fórum téma az elmúlt 1 hétből, sem úgy működik, mint ahogy kellene neki.

Mikor megnéztem a forráskódot, megdöbbenéssel tapasztaltam, hogy a Boost modul hatalmas! 280 KB-nál nagyobb a PHP kód mérete. Egyrészt azért ilyen nagy, mert sok kód kell az különböző cache fájl érvénytelenítési esetek kezelésére. Másrészt sok extra dolgot tud, talán feleslegesen is (lásd lent). És elég sok beállítási lehetősége is van. Egyszóval nagy és bonyolult modul, jobban örültem volna, valami egyszerű és nagyszerű megoldásnak.

Egyéb érdekességek

A Boost modul favorizálja a tömörített (gzip) kiszolgálást, méghozzá elég agresszíven. Állítólag némely proxy szerver felülírja a böngésző által küldött HTTP fejlécét, hogy ne fogadjob GZIP tömörített adatot. A modul egy trükkel (IFRAME-ben meghívott GZIP-pel tömörített oldalban lévő javascripttel beállít egy cookiet) megpróbálja kideríteni hogy az aktuális böngésző támogat-e gzip tömörítést, és ha igen, akkor az Accept-Encoding fejléctől függetlenül GZIP-el küldi az adatot.

Van egy beépített web robot is a Boost-ban. Annyit tesz, hogy cron futás alkalmával bejárja az oldalunkat (konfigurálható, hogy ezt hogyan tegye), ezzel előmelegítve a gyorstárat. Mikor van erre szükség? Ha olyan weblapot készítünk, amire várhatóan kevés oldalletöltés érkezik. Ekkor ugyanis a cache általában túl régi lesz, azaz a látogatók többnyire gyorstárazás nélküli oldallal találkoznak majd.

Konklúzió

Nagyszerű modul, ha az ember együtt tud élni a kötöttségekkel: Apache kiszolgáló, nem mindig frissülő dobozok és az anonim látogatói statisztika hiánya a Drupalban. Utóbbi miatt jelenleg én sajnos egyetlen oldalon sem használom. Persze ha egy szerverem nem bírná már a terhelést, akkor nyilván feltenném: inkább lássák a látogatók az oldalt és nekem ne legyen látogatottsági adatom, mint hogy ne is lássák :)

Sorrendezhető táblázatok

Ismét egy hasznos kis Drupal modulra bukkantam, amit meg kell osztanom. Történt, nem is olyan régen, hogy bizonyos nodeok között egy sorrendet kellett meghatározni. Néhány oldalból álló, előre-hátra lapozható termékbemutató oldalra kell gondolni.

Szépen fel is vettem a CCK-ban egy új mezőt, oldalszám néven, amit egy legördülő menüből lehetett kiválasztani. A nodeok megjelenítése és a lapozás megvalsóítása a theme rétegbe került. Viszont szükség volt még valami adminisztrációs felületre, a node lista szerkesztéséhez. Persze a beépített szerkesztő oldalon, az oldalszám select input mező már adott egy szerkesztési lehetőséget, de így nagyon kényelmetlen lett volna a használata.

Arra gondoltam, a legjobb megoldás egy táblázat lenne, ahol a sorok mozgathatóak a drupal tabledrag.js használatával. Ilyen van pl. a menü és a blokk szerkesztésnél is. Első gondolatom az volt, hogy írok erre egy saját modult, nem egy nagy kalad, legrosszabb esetben is egy óra alatt megvan. Aztán eszembe jutott, hogy a Views modul tud táblázatokat megjeleníteni, de az nem a szerkeszthető verzió, hanem egyszerű táblázat. Elkezdtem nézelődni a Views *.tpl.php smink fájlok környékén, hátha van egy ügyes trükk, amivel rá lehetne venni a Viewst a tabledrag.js használatára.

Nem tudom, hogy végülis van-e ilyen trükk, de mint kiderült, szerencsére nincs rá szükség. Ugyanis, ez az igény másoknál is fellépett, és már megírták helyettünk. A DraggableViews nevű modulról beszélek, amely a Viewsnak egy kiegészítése. Egy új formázási stílust ad hozzá a Viewshoz, a meglévő táblázat, HTML lista és Grid stílus mellett megjelenik egy sorrendezhető táblázat. A nézet létrehozásánál a Draggable Table stílust kell kiválasztani, majd a stílus beállításoknál a sorrendezés alapját képező mezőt megadni. Ennyi az egész.

Íme egy demó, amit a Draggable Table modullal hoztam létre:

A demó egyelőre nem elérhető.

Elvileg tud hierarchikus és csoportos rendezéseket is, mint a beépített menü és a blokk szerkesztés. Én ezeket nem próbáltam, nekem csak egy egyszerű rendezhető lista kellett, amire tökéletesen meg is felelt.

A Drupal közösség ismét meglepett, hogy ilyen modul is van már. Úgy tűnik tényleg igaz a mondás, hogy a Drupalban a legnehezebb feladat, találni egy olyan funkciót amire még nincs kész modul :)

Admin menu modul

Ismét találtam egy modult ami megérdemli, hogy a legjobb drupal modulok cimkét kapja.

Az Admin menu kiváló segédeszköz, ha Drupal alapú oldalt akarunk beállítani vagy karbantartani.

Aki már próbált beállítani egy frissen telepített Drupal oldalt, biztosan belefutott már abba a problémába, hogy a /admin/akármi oldalak eléréséhez előbb kattintani kell egy a /admin-ra vezető linkre. Beállítás közben ez bizony több százszor (ezerszer?) is megtörténik, ezzel rengeteg értékes másodpercet rabolva el tőlünk.

Az Admin Menu ezt hivatott megoldani, egy kellemes kis JS alapú menüvel. A lényeg, hogy az összes /admin/* menüpont elérhető egyetlen kattintással, gyorsan, egyszerűen.

Itt egy kép amely jól ábrázoja a lényeget:

admin_menu_uj2.png

Jól látható, a fent megjelenő keskeny fekete menü sáv.

A 4.7-es verzió óta minden Drupal kiadásra létezik, jól karbantartott modul.

A JS alapú menü az oldal tetején jelenik meg, fixen. De ha valaki azt szeretné, hogy a vízszintes görgetősáv helyzetétől függetlenül mindig ott legyen az Admin Menu, akkor mindössze annyit kell tennie, hogy az admin_menu könyvtárban a style.css fájlban az

#admin-menu { position: absolute; }

részt kicseréli erre:
#admin-menu { position: fixed; }

Aki még nem ismeri ezt a modult, mindenképpen próbálja ki. Elsőre talán nehéz rászokni, de ha ezen túlvagyunk, abszolút függőséget okoz.

YouTube klón Drupal-al

Egy nagyszerű Drupal tutorial videóra bukkantam ma: Három modullal (CCK, filefield és jQuery Media) percek alatt létrehozhatunk egy YouTube-hoz hasonló videó megoszto weboldalt.

A videót Sean Effel publikálta a DrupalTherapy.com-on:

Devel modul

Ez a cikk a Legjobb Drupal modulok sorozat következő része.

Mindenki aki Drupal-al foglalkozik, az ismeri a Devel modult. Ez a bejegyzés a föld népességéből annak a három embernek szól, akik esetleg nem ismernék ezt a modult. :)

Használata



  • Letöltés itt: Devel.

  • Modul bekapcsolása az admin/build/modules oldalon.

  • A modul által publikált blokkok bekapcsolása az admin/build/blocks oldalon.

Development block

Attól függően, hogy az 5-ös vagy 6-os verziót használjuk, 2 vagy 3 darab blokkot publikál. A lényeg, amely mindkét verzióban benne van, a Development blokkban található. A blokk linkek halma, amelyek magukért beszélnek:


  • Empty cache: gyorsítótár ürítés egy gombnyomással. Modul fejlesztésnél hasznos, amikor éppen a hook_menu implementálásával bénázunk. Most, hogy a 6-os Drupal-ban teljesen felforgatták a menürendert, ez bizony aktuális lehet.

  • Enable Theme developer: Aki még nem tette, annak kötelező kipróbálni a Theme Developer-t Drupal 6 alatt.

  • Legújabb projektem fejlesztésekor pl. a Run Cron és a Variable editor gombot nyomogattam veszettül. Egy jó kis játék készül, majd beszámolok itt!

  • A többi funkció is magától értetődik és hasznosak, részleteszésük szerintem felesleges.

Van még két másik block is: az Execute PHP blokkban egy többsoros szövegmező van, amiben közvetlenül futtathatuk PHP kódot. Ez változó átállításra (variable_set) és PHP változók kiíratására (kvázi, debug) használható. A Language switcher blokk, csak D6 alatt elérhető, és a nyelv azonnali megváltoztatására szolgál, természetesen.

Egyéb Devel modulok

A csomag tartalmaz még néhány kiegészítő modult is:

  • Devel Generate - teszteléshez hasznos, automatikusan generálhatunk felhasználókat, node-okat és taxonomy term-eket, azaz kategória cimkéket.
  • Devel Node Access - Részletes node startisztikát jelenít meg minden node alatt.
  • Macro - Űrlap kitöltéseket lehet vele felvenni, majd visszajátszani. Ez is biztos szuper.
  • Bevallom én még csak a központi Devel modult használtam, illetve játszottam a Theme developer-rel, de biztos vannak esetek, amikor a többi funkció is jól jön.

Letöltés: Devel