NID'den (veya düğüm nesnesinden) yol diğer adını alın


22

Düğüm nesnem var ve Drupal 8'de verilen yolu bulmak için kullanmaya çalışıyorum.

Orada drupal_lookup_path()Drupal 7'de ama Drupal 8 için herhangi eşdeğer veya belgelere göremiyorum.

Bir düğüm nesnesinden yol almanın yeni "Drupal" yolu nedir?

Gibi basit bir şey olur $node->get('path')mu?

Bu basit bir soru gibi gözüküyor, ancak kesinlikle hiçbir belge bulamıyorum.

Dikkat Geçerli yol için yol takma adını istemiyorum; Bir düğüm nesnesi veya bir düğüm kimliği verilen rastgele bir düğüm için yol takma adı istiyorum.



Bunun bir kopya olabileceğini düşünüyorum, bağlantılı soruya birçok cevap var.
Kevin

Diğer soru, OP'nin düğüm kimliğini bildiği bir düğüm için değil, geçerli yol için yol takma adının nasıl alınacağını söyleyen cevapları vardır.
kiamlaluno

Bu bir kopya değil - Geçerli yolu istemiyorum. Rasgele bir düğüm nesnesi veya NID verilen yol istiyorum.
Jack Ryan

Evet, bu bir kopya değil, cevabımı gör.
4k4

Yanıtlar:



19

Kullanmayla ilgili neler Url :

use Drupal\Core\Url;    

...

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

5
Bu ve AliasManager kullanımı arasındaki temel fark olan IIRC, bunun aynı zamanda giden yol işlemcilerinin çalışmasını sağlarken AliasManager sadece takma adı aramasını sağlar. UrlNesneyi doğrudan olarak da alabilirsiniz $node->toUrl().
mpdonadio

1
Çok daha iyi bir çözüm.
Patrick

16

Eğer sadece nidiniz varsa, 4k4'ün çözümü

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

Harika çalışıyor. Ancak zaten bir düğüm nesnesiniz varsa, bir veya iki adımı atlayabilirsiniz. Düğümler aslında URL'leri almak için yöntemler geliştirmişlerdir.

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

Düğümün diğer adlı URL'sini döndürürdüm.

toUrl () bir url nesnesi döndürür. Buraya bakın https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Url.php/class/Url/8.2.x

ve toString (), url'nin dize gösterimini döndüren bir url nesnesinin bir yöntemidir.


9
Unutmayın ki $node->toUrl()->setAbsolute()->toString()mutlak URL, paylaşım vb. İçin faydalı olacaktır.
Tim

2

Load yöntemini path.alias_storage, takma ad ayrıntılarının bir dizisini döndürmek için ya da bu düğüm için bir yol bulunmuyorsa, boolean false değerini kullanabilirsiniz.

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


2

Düğüm URL'sini düğüm nesnesinden almanın en iyi yolu-

  • Mutlak Yol : $ node-> toUrl () -> setAbsolute () -> toString ();
  • Göreceli Yol : $ node-> toUrl () -> toString ();

Ayrıca, düğüm dilini de işleyecektir.


0

Düğüm takma adının diller tarafından URL'sini almak istiyorsanız, bu dili kullanmayı unutmayın.

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

Bir sınıfta kullanıyorsanız, bağımlılık enjeksiyonunu doğru kullanmayı unutmayın.


-5

Daha "Drupalesque" bir çözüm umuyordum, ama işte kendimi bu işi yapmak için yaptım:

  function getPathFromNID($nid) {
    $db = \Drupal::database();

    $data = $db
        ->select('url_alias', 'u')
        ->fields('u', ['alias'])
        ->condition('source', '/node/' . $nid)
        ->execute()
        ->fetchField();
    return $data;
  }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.