我是Drupal开发的新手。所以......我创建了一个新模块,并将其命名为“apps”。
模块简单地从我的数据库中查询节点并显示它。要访问此模块,我访问http://domain/apps/1,其中1是节点ID。
我的问题是,
如何在不更改模块名称的情况下将“应用”更改为其他内容?
答案 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);
}