Как получить текущий идентификатор узла?

В Drupal 7, если бы я хотел получить идентификатор узла текущего отображаемого узла (например, node /145), я мог бы получить его с помощью arg () функция. В этом случае arg (1) вернет 145.

Как я могу достичь того же в Drupal 8?

38 голосов | спросил 24ma13wg 29 Jpm1000000pmThu, 29 Jan 2015 17:30:20 +030015 2015, 17:30:20

4 ответа


74

Параметр будет повышаться от nid до полного объекта узла к тому времени, когда вы получите к нему доступ, поэтому:

$ node = \ Drupal :: routeMatch () -> getParameter ('node');
if ($ node instanceof \ Drupal \ node \ NodeInterface) {
  //Вы можете получить nid и все, что вам нужно, от объекта node.
  $ nid = $ node-> id ();
}

Подробнее см. запись изменений .

ответил Clive 29 Jpm1000000pmThu, 29 Jan 2015 17:38:12 +030015 2015, 17:38:12
11

Правильно использовать \ Drupal :: routeMatch () -> getParameter ('node'). Если вам нужен только идентификатор узла, вы можете использовать \ Drupal :: routeMatch () -> getRawParameter ('node').

ответил Maouna 6 J000000Wednesday16 2016, 13:22:50
3

, если вы используете или создаете настраиваемый блок, вы должны следовать этому коду, чтобы получить текущий идентификатор узла URL.

//добавить библиотеки
используйте Drupal \ Core \ Cache \ Cache;

//код для получения nid

$ node = \ Drupal :: routeMatch () -> getParameter ('node');
  $ node-> id () //получить текущий идентификатор узла (текущий идентификатор узла URL)


//для кеша

public function getCacheTags () {
  //С этим при изменении узла ваш блок будет перестраиваться
  if ($ node = \ Drupal :: routeMatch () -> getParameter ('node')) {
  //если узел добавляет свою кешью
    return Cache :: mergeTags (parent :: getCacheTags (), array ('node:'. $ node-> id ()));
  } else {
    //Вместо этого возвращаем теги по умолчанию.
    return parent :: getCacheTags ();
  }
}

public function getCacheContexts () {
  //если вы зависите от \ Drupal :: routeMatch ()
  //вы должны установить контекст этого блока с помощью тега context.
  //Каждый новый маршрут, который этот блок будет перестроить
  return Cache :: mergeContexts (parent :: getCacheContexts (), array ('route'));
}
ответил gauri shankar 6 J000000Wednesday16 2016, 10:34:10
0

Примечание на странице предварительного просмотра узла, следующее не работает:

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

Для страницы предварительного просмотра узла вам необходимо загрузить узел следующим образом:

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

Как загрузить узел на странице предварительного просмотра узла ?

ответил oknate 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 25 Sep 2017 19:40:36 +0300 2017, 19:40:36

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132