Как получить 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;
Author: Krishna Mohan, 2014-06-25

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;
 4
Author: wolverine, 2014-06-25 09:49:11

Существует множество способов получить nid, но это зависит от того, как построена ваша страница. Если это страница прямого узла, то вы можете получить, используя функцию $_GET["q"] или arg(). Вы также можете напрямую использовать функцию menu_get_object() и получить $nid=$node->nid;.

  • $_GET["q"] вернет, как node/2345 2345 - это ваш nid узла.
  • arg(1) вернет nid узла.
 0
Author: Pushpinder Rana, 2014-06-25 05:51:56

В вашем коде нет ничего неправильного. Просто используйте 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;
 0
Author: Krishna Mohan, 2014-06-25 09:10:46
$path = drupal_get_path_alias($_GET['q']); 
$path = explode('/', $path);
echo $nid = $path[1];

Или просто arg(1) вернет идентификатор узла страницы Используя это, вы можете получить идентификатор nid любого узла. Но это должна быть страница сведений о любом узле

 0
Author: TBI Infotech, 2014-06-25 10:39:11
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.

 0
Author: gease, 2015-09-15 07:59:45