在 drupal_get_normal_path 中使用路径变量

Using a variable for path in drupal_get_normal_path

我是 drupal 编码的新手,对 PHP 还是相当陌生。我已经到了一定程度,现在卡住了!到目前为止,文档对我帮助很大,但我发现自己正在努力克服这个障碍。

我的代码:

<?php

//Pulls the refering page url
$prev_page = $_SERVER['HTTP_REFERER'];

//breaks the referer into an associated array
$delimit = '/';
$splode = explode($delimit,$prev_page);

$chunked = array_slice($splode, 3, NULL);


//iterates through the array to output the address as a string
foreach($chunked as $k=>$v){
$path .=  $v."/";
}

//find the node id from the alias
$node = drupal_get_normal_path($path);
echo $node;

?>

所以我得到的引用页面地址只是扩展名(即:about-us/tim 而不是 http://www.google.com/about-us/tim )传递给 drupal_get_normal_path。

我已经将实际的 uri 放入 drupal_get_normal_path 并收到了我期望得到的节点信息,但是当我使用上面代码块中显示的变量时 returns存储在变量中的文本而不是查找节点源。

非常感谢您能提供的任何帮助!

认为这与这个问题非常相似here

您做错的是假设该函数 returns 是一个节点 - 它不是,只是 returns 该节点的内部路径。因此,您仍然必须获取该 URL 引用的对象(节点),然后您实际上拥有节点 ID。

基本上,您可以使用(此代码比您拥有的代码更高效和紧凑 - 而且它有效!)实现它:

$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;

如果你真的想加载节点,你只需要在这之后做 node_load($nid)。

希望对您有所帮助!