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.