Reply to comment
Oldal útvonala menüvel és menü nélkül - Pathautoval

Feladat: egy webhely oldal típusú tartalmához útvonalat rendelni Pathautoval: ha van hozzá menüpont rendelve, akkor [menupath-raw] token alapján, ha nincs, akkor oldal/[title-raw] módon. Pathautoval egy tartalomtípushoz csak egy tokent lehet rendelni - készítsünk hát egy megfelelő tokent!
Alapvetően kétféle megoldás van token készítésére: írni egy picurka modult, ami a hook_token_list() és hook_token_values() függvényeket valósítja meg, vagy ügyesen használni a Custom Tokens modult. Nézzük ez utóbbit (a Token modult már úgyis használatba vettük a Pathauto miatt).
Az admin/build/tokens/create útvonalon hozzunk létre egy új tokent, mondjuk token_custom_oldal-path azonosítóval, tetszőleges leírással, tartalom típussal, és az alábbi kóddal:
$values = node_token_values($type, $node); module_load_include('inc', 'pathauto'); if (!empty($node->menu['link_title'])) { if ($node->menu['mlid'] == $node->menu['p1']) { // Top-level menu entry. return pathauto_cleanstring($values['title-raw']); } $menu_item = menu_link_load($node->menu['p1']); $toplevel_path = db_result(db_query("SELECT dst FROM {url_alias} WHERE src = '%s'", $menu_item['link_path'])); return $toplevel_path .'/'. pathauto_cleanstring($values['title-raw']); } return pathauto_cleanstring($values['title-raw']);
(Rövid magyarázat: csak node típusnál keresgéljünk bármit is – ha a kód nem ad vissza semmit, úgy az alapértelmezett node/123 alakú útvonalat kapunk. A node_token_values() előszedi nekünk azokat az útvonal-elemeket, amelyekre szükségünk lesz. Ha van menüpont megadva, és nincs bejelölve a törlés jelölőnégyzet, akkor a menü szerinti útvonalat generáljuk, egyébként az oldal címe szerintit.)
A létrejött [token_custom_oldal-path] tokent adjuk meg az oldal tartalomtípusunknál az admin/build/path/pathauto útvonalon, majd teszteljük az eredményt.
A fentiekhez alaposan bele kellett túrnom mind a Token, mind a Pathauto modulokba, mire rájöttem a megoldásra. Ha ugyanis a token nevének végéről lehagyjuk a -path utótagot, csomó hibával fogunk szembesülni – például a perjelek kiesnek, ami gépek számára értelmezhetetlenné teszi az útvonalat. A megértést leginkább a pathauto.inc fájlban található pathauto_clean_token_values() függvény forráskódja segítette: itt láthatjuk, hogy ha egy token neve path, path-raw vagy alias végű, akkor a perjeleket nem távolítja el a token eredményéből – minden egyéb esetben igen. A trükktarisznya feltétlenül tartalmazza: az útvonalat generáló tokenek nevének a vége az, ami igazán számít!
Reply
- 1114 Budapest, Kosztolányi Dezső tér 12. II/1a.
- +36 20 3891634, +36 30 2995579
- info@kybest.hu
