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

Drupal中自定义模块的自定义url?,drupal,url,module,Drupal,Url,Module,我是Drupal开发的新手。因此,我创建了一个新模块,并将其命名为“应用程序” 模块simple从我的数据库查询一个节点并显示它。要访问此模块,我访问其中1是节点id 我的问题是, 如何在不更改模块名称的情况下将“应用程序”更改为其他内容?使用drupal发行版中包含的“路径”模块,然后手动创建“应用程序”与其他别名的关联。如果您想要自动生成路径别名,也将非常有用。使用drupal发行版中包含的“路径”模块,然后手动创建与其他别名的关联“应用程序”。如果要自动生成路径别名,也将非常有用。类似的路

我是Drupal开发的新手。因此,我创建了一个新模块,并将其命名为“应用程序”

模块simple从我的数据库查询一个节点并显示它。要访问此模块,我访问其中1是节点id

我的问题是,


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

使用drupal发行版中包含的“路径”模块,然后手动创建“应用程序”与其他别名的关联。如果您想要自动生成路径别名,也将非常有用。

使用drupal发行版中包含的“路径”模块,然后手动创建与其他别名的关联“应用程序”。如果要自动生成路径别名,也将非常有用。

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

类似的路径在hook_menu()中定义,在您的情况下,应该在函数apps_menu()中。您可以简单地使用另一个路径,但建议您留在模块的名称空间内,以避免与其他模块发生冲突(有关更多信息,请参阅注释)。

您似乎还可以使用一个路径。 如果将%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);
}

链接到。

您似乎也可以使用。 如果将%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);
}

链接到。

«您可以将其更改为您想要的任何内容,路径和模块名称之间没有任何联系。»技术上正确,但实践不正确。Drupal没有名称空间,使用随机URL(与您的modulename不完全匹配)会在某个点上导致难看的冲突。更好的方法是使用
/modulename
,然后使用pathauto最终将其更改为您想要的。当然,但别名和pathauto不能解决所有问题。例如,我们最近添加了一个功能,用于将默认前缀(/messages)覆盖到其他内容,因为某些站点希望在用户配置文件中将私人消息作为本地任务。使用别名无法达到这一点。在这种情况下,您可能应该使用别名。说真的,我们最近不得不修复错误并重写了将近2个月的工作,因为一些远程开发人员认为到处使用“/service”和“/services”是个好主意,我们需要在一个使用了服务模块的站点上实现它当它直接在hook_menu()中处理时。我不是说一个特定的定制站点,这是contrib模块(Privatemsg)的一部分。此外,菜单定义是最简单的部分,如果需要,所有链接和其他内容也需要是动态的(例如,对于user/%user/messages前缀,它需要在链接中插入当前用户(或您正在访问的配置文件之一)的uid,等等……让我重新定义:现有菜单项(例如,其他模块提供的项)应使用(自定义)中的
hook\u menu\u alter()
菜单项进行修改模块应以
/modulename
开头;如果您不想显示您的modulename,请使用路径别名,然后将其更改为更人性化的路径。«您可以将其更改为任何您想要的路径,路径和模块名称之间没有连接。»技术上正确,但实践不好。Drupal没有名称空间和使用随机URL(与您的modulename不完全匹配)在某些时候会导致丑陋的冲突。更好的方法是使用
/modulename
,然后使用pathauto将其更改为您希望的结果。当然,但别名和pathauto不能解决所有问题。例如,我们最近添加了一个功能来覆盖默认前缀(/messages)另一方面,因为有些站点希望在用户配置文件中将私人消息作为本地任务。使用别名无法达到这一点。在这种情况下,您可能应该使用。说真的,我们最近不得不修复错误并重写近2个月的工作,因为一些远程开发人员认为使用“/serv”是个好主意ice'和'/services'到处都是,我们需要在使用服务模块的站点中实现这一点。当它直接在hook_menu()中处理时,使用hook_menu_alter()是没有意义的。我不是说特定的自定义站点,这是contrib模块(privatemg)的一部分。此外,菜单定义是最简单的部分,如果它是,所有链接和其他内容也需要是动态的(例如,对于user/%user/messages前缀,它需要在链接中插入当前用户(或您正在访问的配置文件之一)的uid,等等……让我重新定义:现有菜单项(例如,其他模块提供的项)应使用
hook\u menu\u alter()
进行修改。(自定义)模块中的菜单项应以
/modulename
开头;如果不希望显示modulename,请使用路径别名,然后将其更改为更人性化的路径。