Как получить nid из псевдонима URL в drupal 7?
У меня есть псевдоним URL sitepath/john/video/nature-beauty
, где john = user
, video = content type
и nature-beauty = node
. Я пытаюсь получить nid
узла nature-beauty
. Название узла на самом деле "Nature beauty"
. Я установил заголовок узла в псевдониме URL.
Может ли кто-нибудь сказать мне, где я ошибаюсь в приведенном ниже коде?
$last_page_visited = $_SERVER['HTTP_REFERER'];
$alias =$last_page_visited;
$path = drupal_lookup_path("source", $alias);
$node = menu_get_object("node", 1, $path);
$nid=$node->nid;
print $nid;
5 answers
$_SERVER['HTTP_REFERER']
вернет полный URL-адрес, но функция drupal_lookup_path()
принимает в качестве аргумента только псевдоним, поэтому проанализируйте ваш URL-адрес и передайте только псевдоним, john/video/nature-beauty
тогда он будет работать.
$url = $_SERVER['HTTP_REFERER'];
$path = preg_replace('/\//','',parse_url($url,PHP_URL_PATH),1);
$org_path = drupal_lookup_path("source", $path);
$node = menu_get_object("node", 1, $org_path);
$nid=$node->nid;
print $nid;
Существует множество способов получить nid, но это зависит от того, как построена ваша страница. Если это страница прямого узла, то вы можете получить, используя функцию $_GET["q"]
или arg()
. Вы также можете напрямую использовать функцию menu_get_object()
и получить $nid=$node->nid;
.
-
$_GET["q"]
вернет, какnode/2345
2345 - это ваш nid узла. -
arg(1)
вернет nid узла.
В вашем коде нет ничего неправильного. Просто используйте drupal_get_path_alias
вместо $_SERVER['HTTP_REFERER'];
, чтобы получить псевдоним URL.
Если вы хотите использовать $_SERVER['HTTP_REFERER']
, вам нужно проанализировать его следующим образом.
$path = $_SERVER['HTTP_REFERER'];
$filter = preg_replace('/\//','',parse_url($path,PHP_URL_PATH),1);
$path = drupal_lookup_path("source", $filter);
$node = menu_get_object("node", 1, $path);
$nid=$node->nid;
print $nid;
$path = drupal_get_path_alias($_GET['q']);
$path = explode('/', $path);
echo $nid = $path[1];
Или просто arg(1) вернет идентификатор узла страницы Используя это, вы можете получить идентификатор nid любого узла. Но это должна быть страница сведений о любом узле
global $base_url;
$referrer = substr($_SERVER['HTTP_REFERER'], drupal_strlen($base_url));
$referrer = drupal_get_normal_path($referrer);
$referrer = trim($referrer, '/');
if (arg(0, $referrer) == 'node' && is_numeric(arg(1, $referrer)) {
$nid = arg(1, $referrer);
}
Вот и все. $base_url включает подкаталог, если ваш сайт не находится в корневом каталоге сервера: http://example.com/drupalsite . drupal_get_normal_path преобразует псевдоним во внутренний путь drupal, то есть статью/marvelous в узел/101. На самом деле это оболочка вокруг drupal_lookup_path, поэтому использование последнего не рекомендуется. И тогда ты получишь свой nid.