Geçerli düğüm kimliğini nasıl alabilirim?


51

Drupal 7'de, şu anda görüntülenen düğümün düğüm kimliğini (örneğin node/145) almak isteseydim, bunu arg()işlevle alabilirdim. Bu durumda, arg(1)145 dönecekti.

Drupal 8'de aynı şeyi nasıl başarabilirim?

Yanıtlar:


103

Parametre, erişim sağladığınız zaman nid'den tam nod nesneye yükseltilmiş olacaktır.

$node = \Drupal::routeMatch()->getParameter('node');
if ($node instanceof \Drupal\node\NodeInterface) {
  // You can get nid and anything else you need from the node object.
  $nid = $node->id();
}

Daha fazla bilgi için değişiklik kaydına bakın .


4
Sadece dikkat etmek zorunda olduğunuzu eklemek istiyorum - sadece bıktım. \ Drupal :: routeMatch () -> getParameter ('node'); düğüm revizyonu silme sayfalarında 1 öğe dizisini (düğüm kimliği) döndürür, böylece nesne olarak kabul ettiğiniz bir yöntem çağırdığınızda "Önemli hata: Bir üye işlevine çağrı getType ( ) ipte ".
Jeff Burnz,

Ziyaret edersem nasıl parametre alabilirim /taxonomy/term/{tid}?
AshwinP

Bu işlevsel bir yerine menu_get_objectmi?
Frank Robert Anderson

Hemen hemen evet @ Frank. Elbette biraz farklı, ancak hangi varlık sayfasının (varsa) olduğunu bilmeyen bir bağlamda düşerseniz, öğrenmenin önerilen yolu budur
Clive

1
@AshwinP Parametre, rotanızda ne yazdığınızdır {}. Taksonomi terimleri için, rota parametresi adı verilir taxonomy_term, rota tanımı /taxonomy/term/{taxonomy_term}. İşte bu şekilde alabilirsiniz \Drupal::routeMatch()->getParameter('taxonomy_term').
Jdrupal

17

Kullanımı doğru \Drupal::routeMatch()->getParameter('node'). Yalnızca düğüm kimliğine ihtiyacınız varsa kullanabilirsiniz \Drupal::routeMatch()->getRawParameter('node').


4

özel blok kullanıyorsanız veya oluşturuyorsanız, geçerli URL düğüm kimliğini almak için bu kodu izlemeniz gerekir.

// add libraries
use Drupal\Core\Cache\Cache;  

// code to get nid

$node = \Drupal::routeMatch()->getParameter('node');
  $node->id()  // get current node id (current url node id)


// for cache

public function getCacheTags() {
  //With this when your node change your block will rebuild
  if ($node = \Drupal::routeMatch()->getParameter('node')) {
  //if there is node add its cachetag
    return Cache::mergeTags(parent::getCacheTags(), array('node:' . $node->id()));
  } else {
    //Return default tags instead.
    return parent::getCacheTags();
  }
}

public function getCacheContexts() {
  //if you depends on \Drupal::routeMatch()
  //you must set context of this block with 'route' context tag.
  //Every new route this block will rebuild
  return Cache::mergeContexts(parent::getCacheContexts(), array('route'));
}

Bu yazı mantıklı değil. Bu kodun nereye gittiğini kimsenin bilmesine imkan yok.
Lester Peabody

2

Düğüm önizleme sayfasında, aşağıdakilerin çalışmadığını unutmayın:

$node = \Drupal::routeMatch()->getParameter('node');
$nid = $node->id();

Düğüm önizleme sayfası için düğümü şu şekilde yüklemeniz gerekir:

$node = \Drupal::routeMatch()->getParameter('node_preview');
$nid = $node->id();

Düğüm önizleme sayfasına düğüm nesnesi nasıl yüklenir?

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.