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

时间:2012-08-06 15:26:10

标签: url drupal drupal-6 clean-urls

我正在使用Drupal 6并拥有自己的节点,它正在拉入我的自定义php页面。网址为domain.com/blogs。我想使用干净的URL作为参数。例如,domain.com/blogs/1将从数据库中提取有关第一篇博文的信息。

我试过了:

domain.com/blogs/1并在php代码中使用arg(0)但是我甚至都没有运行代码,因为Drupal出现了Page Not Found错误。

有没有办法让Drupal知道允许domain.com/blogs之后的任何参数并加载/blogs的节点并发送args?

2 个答案:

答案 0 :(得分:1)

node/1234别名化为blogs并不意味着您可以控制菜单路由器项目的其余部分。

例如,如果您的unaliased节点路径是“node / 1234”,则“拥有”其余参数。 即您可以从PHP 567访问node/1234/567,如下所示:

<?php print arg(2); ?>

如果您想“拥有”/blogs网址部分,则必须使用hook_menu进行定义。正如你已经触及php,我认为最好的方法是制作模块。 但是,您可以使用视图或面板模块。

<?php
function MYMODULE_menu() {
  $items = array();

  $items['blogs'] = array(
    'title' => 'Main Blogs page', 
    'page callback' => 'MYMODULE_page', 
    'access arguments' => array('access content'), 
    'type' => MENU_SUGGESTED_ITEM,
  );
  $items['blogs/%'] = array(
    'page callback' => 'MYMODULE_blog_view', 
    'page arguments' => array(1),
    'access arguments' => array('access content'), 
    'type' => MENU_CALLBACK,
  );

  return $items;
}
function MYMODULE_blog_view($blog_id){
// $node = node_load($blog_id);
// return print_r($node, TRUE);
}
?>

现在,在MYMODULE_blog_view函数中,您也可以从arg(1)获取参数。您也可以通过组合两个菜单路由器项目在单页回调中进行,但我建议使用单独的路由器项目。

更新(8月8日): 我使用node_load($ blog_id)和其他评论垃圾的原因是假设您需要来自节点的部分(例如:您希望make显示带有节点ID参数的View,或类似需要来自节点的特定数据的东西)。 但是 从不 允许用户查看从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!

这将从博客ID(来自URL)加载节点ID,检查它是否在'blog'类型中,并将菜单处理程序设置为相关的节点ID路径。 现在,当您访问blog / 123时,如果它是博客节点,您将看到node / 123的内容。但这不是重定向。它不能作为完全别名的URL工作,但有时也很有帮助。

或者,您可以检查用户是否可以访问node_access()中的节点。

答案 1 :(得分:0)

这里有一些关于定义和发送视图参数的链接 drupal.org/1

drupal.org/2