legjobb drupal modulok

Active Tags beviteli mező saját űrlapon.

A közösségi oldalak egyik elmaradhatatlan eleme a címkék használata. Ma már nagyon sok oldalon láthatóak címkefelhők, amelyeket általában a közösség szerkeszt, nem hivatásos szerkesztők. A címkéket általában vesszővel elválasztva kell felvinni egy szövegbeviteli mezőbe, így működik a Drupal megoldása is, a taxonomy modulban.

De bizony sokszor gondot okoz a felhasználóknak a vesszővel való elválasztás, néha más elválasztó jeleket használnak, például szóközt, így sokszor hibás címkék jönnek létre. Még olyan weboldalakon is tapasztaltam ezt, ami kifejezetten technikailag képzett felhasználóknak szól. Aki felhasználóbarát honlapot szeretne készíteni, az nem mehet el a probléma mellett.

Erre ad megoldást az Active Tags modul, ami módosítja a címkék felvitelét úgy, hogy enter leütésére felveszi a címkét egy listára amit rögtön meg is jelenít a felhasználónak. Így a következő címkét már nem kell vesszővel elválasztani.

Active Tags modul

Nagyon hasznos modulnak bizonyul az Active Tags, de csak a Drupal node űrlapokon jelenik meg. Pedig hasznos lenne egyéb, nem node form-okon is használni. Ennek a lehetőségnek jártam utána, és a megoldás szerencsére roppant egyszerű.

Először nézzük a kódrészletet:

<?php
 
function example_form(&$form_state) {
 
$input_wrappers = array('#edit-tags-wrapper');

 
drupal_add_css(drupal_get_path('module', 'active_tags') .'/active_tags.css', 'module');

 
drupal_add_js(array('active_tags' => $input_wrappers), 'setting');

 
drupal_add_js(drupal_get_path('module', 'active_tags') .'/active_tags.js', 'module', 'footer');

 
// $form definició ...
 
return $form;
}
?>

Az első sorban felsoroljuk azokat az űrlap elemeket, ahol használni akarjuk az active_tags bevitelt. Egészen pontosan az űrlap elemeket körülvevő wrapper div-ek azonosítóit kell felsorolni. Tulajdonképpen ezek jQuery kiválasztók lesznek. A harmadik sorban ezt a listát egy Javascript beállításként, Drupal.settings.active_tags néven hozzáadjuk az oldalhoz.

A második és negyedik sor egész egyszerűen az active tags modul css és javascript fájljait adja hozzá az oldalhoz. Figyeljük meg, hogy az active tags Javascript fájl az oldal aljára kerül, nem a fejlécbe.

Ennyi az egész, a fenti 4 sor beszúrásával bármelyik saját fejlesztésű űrlapba beszúrva használható az active tags. Sőt, más modulok űrlapjainál úgyszintén, ekkor a hook_form_alter()-ben kell hozzáadni a fenti négy sort.

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ó már 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:

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.

Oldalak

Feliratkozás RSS - legjobb drupal modulok csatornájára