我是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并收到了我期望获得的节点信息,但是当我使用上面代码块中显示的变量时,它返回存储在变量中的文本而不是查找节点源。
非常感谢你能给予的任何帮助!
答案 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)。
希望这有帮助!