接受干净URL参数的Drupal php页面
我使用的是Drupal6,我有自己的节点,可以拉入我的定制php页面。URL是接受干净URL参数的Drupal php页面,url,drupal,drupal-6,clean-urls,Url,Drupal,Drupal 6,Clean Urls,我使用的是Drupal6,我有自己的节点,可以拉入我的定制php页面。URL是domain.com/blogs。我想使用干净的URL作为参数。例如,domain.com/blogs/1将从数据库中获取关于第一篇博客文章的信息 我试过: domain.com/blogs/1并在php代码中使用arg(0)但我甚至无法运行代码,因为Drupal出现了Page Not Found错误 有没有办法让Drupal知道允许在domain.com/blogs之后使用任何参数,并为/blogs加载节点,同时发送
domain.com/blogs
。我想使用干净的URL作为参数。例如,domain.com/blogs/1
将从数据库中获取关于第一篇博客文章的信息
我试过:
domain.com/blogs/1
并在php代码中使用arg(0)
但我甚至无法运行代码,因为Drupal出现了Page Not Found
错误
有没有办法让Drupal知道允许在
domain.com/blogs
之后使用任何参数,并为/blogs
加载节点,同时发送参数?这里有一些关于定义和发送视图参数的链接
将
节点/1234
别名设置为博客
并不意味着您可以控制菜单项的其余部分
例如,如果未关联的节点路径为“node/1234”,则您“拥有”其余参数。
i、 e您可以从PHP中的node/1234/567
访问567
,如下所示:
<?php print arg(2); ?>
现在,在MYMODULE_blog_view函数中,您也可以从arg(1)获取参数。您也可以通过组合两个菜单路由器项在单页回调中实现,但我建议使用单独的路由器项
更新(8月8日):
我之所以使用node_load($blog_id)和其他注释垃圾,是因为假设您需要节点中的部分(例如:您希望使用node id参数显示视图,或者需要节点中特定数据的类似内容)。
但是永远不允许用户查看从node_load()加载的节点,因为这就像上帝给了用户想要的任何东西一样
对于节点,让我解释一下gimmic。将其放入回调函数中
$node = node_load($blog_id);
if ($node && $node->type == 'blog'){
$_GET['q'] = 'node/' . $node->nid;
return menu_execute_active_handler('node/' . $node->nid, FALSE);
}
drupal_not_found(); // important!
这将从blog ID(来自URL)加载节点ID,检查它是否为“blog”类型,并将菜单处理程序设置为相关的节点ID路径。
现在,当您访问blog/123时,如果它是blog节点,您将看到node/123的内容。但这不是重定向。它不会像完全别名的URL那样工作,但有时很有用
或者,您可以检查用户是否有权从()访问节点。我不想使用视图,尝试这样做,但不感谢您的帖子,如何加载节点博客正文部分中的自定义php页面/这将是我可以根据返回节点视图中的arg(1)呈现页面外观的区域(node_load($nodeId));您推荐吗?请不要。这会导致一个大的安全问题,即用户可以访问任何节点。有关一些解决方法,请参阅更新的答案。谢谢。更新的答案中的大部分代码来自comment.module的页面回调以获取注释永久链接。
$node = node_load($blog_id);
if ($node && $node->type == 'blog'){
$_GET['q'] = 'node/' . $node->nid;
return menu_execute_active_handler('node/' . $node->nid, FALSE);
}
drupal_not_found(); // important!