it-swarm-eu.dev

Získat alias cesty z NID (nebo objektu uzlu)

Mám objekt uzlu a snažím se ho použít k získání dané cesty v Drupal 8.

Tam byla drupal_lookup_path() in Drupal 7, ale nevidím žádný ekvivalent nebo dokumentaci pro Drupal 8).

Jaký je nový způsob „Drupalu“, jak získat cestu od objektu uzlu?

Bylo by to něco jednoduchého jako $node->get('path')?

Vypadá to jako jednoduchá otázka, ale v žádném případě na ní nenajdu žádnou dokumentaci.

Všimněte si, že nechci alias cesty pro aktuální cestu; Chci alias cesty pro libovolný uzel, daný objektu uzlu nebo ID uzlu.

22
Jack Ryan

Chcete-li získat cestu pro id uzlu, použijte AliasManager :: getAliasByPath :

$alias = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'.$nid);
42
4k4

A co použití rl :

use Drupal\Core\Url;    

...

$url = Url::fromRoute('entity.node.canonical', ['node' => $nid])->toString();
17
Kevin

Pokud máte pouze nid, 4k4 řešení

$alias = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'.$nid);

Funguje skvěle. Ale pokud již máte objekt uzlu, můžete přeskočit krok nebo dva. Uzly skutečně mají zabudované metody získávání adres URL.

$node->toUrl()->toString();

Vrátí aliasy URL uzlu.

toUrl () vrací objekt url. Viz zde https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Url.php/class/Url/8.2.x

a toString () je metoda objektu url, která vrací řetězcovou reprezentaci adresy URL.

16
Matt

Můžete také použít metodu načítání z path.alias_storage A vrátit pole podrobností alias nebo boolean false, pokud nebyla nalezena cesta pro tento uzel.

$aliasArray = \Drupal::service('path.alias_storage')->load(['source' => '/node/' . $nid]);

2
rchaplin

Nejlepší způsob, jak získat adresu URL uzlu z objektu uzlu -

  • Absolute Path: $ node-> toUrl () -> setAbsolute () -> toString ();
  • Relativní cesta: $ uzel-> toUrl () -> toString ();

Bude také zpracovávat jazyk uzlů.

2
Prem Patel

Pokud chcete získat URL alias uzlu pomocí languages nezapomeňte použít tento jazyk.

$alias_url = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'. $nid, $langcode);

Pokud ji používáte ve třídě, nezapomeňte správně použít injekci závislostí.

0
Diosbel Mezquía