Jelenlegi hely

Új hozzászólás

CSÉCSY László képe

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!

Technológia: