Drupal中自定义模块的自定义URL?

时间:2011-03-14 02:01:52

标签: drupal url module

我是Drupal开发的新手。所以......我创建了一个新模块,并将其命名为“apps”。

模块简单地从我的数据库中查询节点并显示它。要访问此模块,我访问http://domain/apps/1,其中1是节点ID。

我的问题是,

如何在不更改模块名称的情况下将“应用”更改为其他内容?

3 个答案:

答案 0 :(得分:3)

这样的路径在hook_menu()中定义,在你的情况下应该在函数apps_menu()中。您可以简单地使用其他路径,但建议保留在模块的命名空间内以避免与其他模块发生冲突(有关详细信息,请参阅注释)。

答案 1 :(得分:1)

使用“路径”模块,它包含在drupal distr。中,然后创建手动关联“apps”到其他别名。如果您想要自动路径别名,Pathauto也会很有用。

答案 2 :(得分:1)

您似乎也可以使用wildcard loader argument。 如果您将%node 放在路径中,它将自动调用 node_load(),页面回调 apps_view_node()会收到一个完整加载的节点对象

/**
* Implementation of hook_menu.
*/
function apps_menu() {
  $items = array();
  // With this menu callback, apps_view_node() will receive a node object, instead of an integer.
  $items['apps/%node/view'] = array(
    'type'           => MENU_CALLBACK,
    'page callback'  => 'apps_view_node_obj',
    // 1 is the node object, 2 is 'view'.
    'page arguments' => array(1, 2),
    // Tells the load callback function, node_load(), what part of the URL to load, in this case the literal number 1.
    'load arguments' => array(1),
  );

  // With this menu callback, apps_view_node() will receive an integer.
  $items['apps/%/edit'] = array(
    'type'           => MENU_CALLBACK,
    'page callback'  => 'apps_view_node_int',
    'page arguments' => array(1),
  );
  return $items;
}

/**
* Custom node view function.
* @param StdClass $node
*   Fully loaded Drupal node object.
*/ 
function apps_view_node_obj($node) {   
  // Do something with the $node object.
  $node->title = "Foo";
  $node->body = "Bar";
  node_save($node);
}

/**
* Custom node view function.
* @param int $id
*   Node id.
*/ 
function apps_view_node_int($id) {   
  // Because we are receiving an id, we must manually load the node object.
  $node = node_load($id);
  $node->title = "Hello";
  $node->body = "World";
  node_save($node);
}

链接到hook_menu documentation