Я хочу отримати нід, але єдина інформація, яку я маю - http://example.com/this-is-the-alias .
Чи є спосіб отримати або внутрішній шлях / node / * для цього псевдоніма, якщо я не на цій сторінці? Або є спосіб одразу вийти з цього псевдоніма?
Я хочу отримати нід, але єдина інформація, яку я маю - http://example.com/this-is-the-alias .
Чи є спосіб отримати або внутрішній шлях / node / * для цього псевдоніма, якщо я не на цій сторінці? Або є спосіб одразу вийти з цього псевдоніма?
Відповіді:
Я не впевнений, чи є пряма функція, але один маршрут полягає у використанні служби диспетчера псевдоніму шляху для пошуку внутрішнього шляху, після чого переробити його для дійсного ідентифікатора вузла для виконання завантаження об'єкта на:
$path = \Drupal::service('path.alias_manager')->getPathByAlias('/this-is-the-alias');
if(preg_match('/node\/(\d+)/', $path, $matches)) {
$node = \Drupal\node\Entity\Node::load($matches[1]);
}
Ви можете використовувати наступний код, щоб отримати та завантажити об'єкт та отримати доступ до його значень.
use \Drupal\Core\Url;
$alias = \Drupal::service('path.alias_manager')->getPathByAlias('/etapes-de-la-vie');
$params = Url::fromUri("internal:" . $alias)->getRouteParameters();
$entity_type = key($params);
$node = \Drupal::entityTypeManager()->getStorage($entity_type)->load($params[$entity_type]);
//to use dpm you need the devel module
dpm($node->nid->value);
Встановіть модуль розробки та використовуйте пункт панелі інструментів розробки Поточна інформація про маршрут .
Це призводить до цього URL-адреси, який ви можете ввести безпосередньо та надати будь-який шлях, відомий вашій установці drupal як параметр запиту:
/devel/routes/item?path=alias
Коли це вузол, ви знайдете ідентифікатор вузла в необроблених параметрах в кінці перелічених змінних маршруту.
$path
іноді дорівнює/this-is-the-alias
. Колись корінний шлях (node/{id}
) був іншим псевдонімом #migrationstruggles, але він також був присутній з іншими псевдонімами.