Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
接受干净URL参数的Drupal php页面_Url_Drupal_Drupal 6_Clean Urls - Fatal编程技术网

接受干净URL参数的Drupal php页面

接受干净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加载节点,同时发送

我使用的是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
加载节点,同时发送参数?

这里有一些关于定义和发送视图参数的链接


节点/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!