在drupal_get_normal_path中使用路径变量

时间:2015-02-20 21:17:14

标签: php drupal

我是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并收到了我期望获得的节点信息,但是当我使用上面代码块中显示的变量时,它返回存储在变量中的文本而不是查找节点源。

非常感谢你能给予的任何帮助!

1 个答案:

答案 0 :(得分:2)

认为这与此问题here非常相似。

你做错了是假设该函数返回一个节点 - 它不会,只返回该节点的内部路径。因此,您仍然必须获取该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)。

希望这有帮助!