it-swarm-eu.dev

Použít entitu url drupal path_alias ()?

Jaký je rozdíl? A kdy byste měli použít který?

entity_uri () je pro mě poněkud nová (Drupal 7) a vidím to málo používané. Zdá se však, že je mnohem čistší a lepší než drupal_get_path_alias () .

FYI: Chci získat nějaké základní informace k řešení vydání na Tagadelic .

5
berkes

Tyto funkce ve skutečnosti nemají mnoho společného. Není pochyb o použití jednoho nebo druhého. Ve skutečnosti budete oba používat, i když s největší pravděpodobností nevoláte přímo drupal_get_path_alias().

entity_uri() vrací matici, která obsahuje cestu a možnosti pro propojení s entitou. Například pro uzel to nazýváte takto: entity_uri('node', $node) a vrátí node/$node->nid. To je trochu triviální. Zajímavější je u jiných typů entit, jako jsou soukromé zprávy (kde je cesta messages/view/$message->thread_id#privatemsg-mid-$message->mid).

Vrácené pole použijete takto: url($uri['path'], $uri['options']) (nebo podobně s l()). Potom tato funkce zavolá drupal_get_path_alias() interně, aby zkontrolovala, zda existuje alias pro tuto vnitřní cestu a použije ji.

Myšlenka je, že můžete vygenerovat vnitřní cestu pro jakoukoli entitu bez jakéhokoli zvláštního zacházení. Příkladem skutečného života je projekt Userpoints. Podpora transakcí uživatelských bodů pro odkazování na entitu zadáním typu a id (Ano, Userpoints používaly terminologii entity_type protože Drupal 5 ...). Dříve existovala velká skupina kódu s podporou uzlů , komentáře a uživatelé a vlastní háček, abychom mohli podporovat více věcí. Když jsem modul přenesl na Drupal 7, 7, mohl jsem to všechno nahradit jednoduchým voláním entity_uri () a nyní podporuje všechny entity mimo pole: serpoints_create_description () .

7
Berdir

'Problém' s mnoha funkcemi zaměřenými na entitu je, že typ entity je požadovaný parametr. ( Narazil jsem na to před ... ) Entita entity_uri () také vyžaduje plně načtenou entitu, takže myslím, že může být špatné pro výkon, pokud musíte provádět mnoho volání entity_uri.

Na druhé straně, drupal_get_path_alias vyžaduje, abyste věděli (číst: pevný kód) vzory URL (jako node => node/[nid]) pro každý typ entity. To by mohlo být v pořádku pro vlastní modul, ale mohlo by to prasknout v modulu přispívání, který má pracovat se všemi druhy entit.

1
marcvangend

entity_uri() vrátí URI přidružené k entitě předané jako argument, zatímco drupal_path_alias() vrátí alias cesty předané jako argument, který by také nemohl být spojen s entitou (což je to, co se stane) s adresami URL na stránky pro správu).

Například, pokud máte alias pro example.com/node/1 (např. Example.com/home), následující kód nastaví $alias Na „home“.

$alias = drupal_get_alias('node/1');

Následující kód by nastavil $path Na „node/1“.

$node = node_load(1);
$uri = entity_uri('node', $node);
$path = $uri['path'];

V druhém případě byste mohli použít "node/" . $node->nid. Pomocí funkce entity_uri() získáte správné URI, a to i v případě, že se změní URI přidružené k uzlům a stejný kód funguje pro různé typy entit.

1
kiamlaluno