创建一个菜单项

g089h515r806 的头像
Submitted by g089h515r806 on 星期六, 2009-08-01 15:26

老葛的Drupal培训班 Think in Drupal

通过在你的模块中使用菜单钩子来钩住这一流程。这样你就可以定义包含在menu_router表中的菜单项。让我们构建一个名为menufun.module的示例模块,通过它来学习菜单系统。我们将Drupal路径menufun映射到PHP函数menufun _hello()上。首先,我们需要一个名为menufun.info的文件,位于sites/all/modules/custom/menufun/menufun.info:

Drupal版本:

将URL映射为函数

g089h515r806 的头像
Submitted by g089h515r806 on 星期六, 2009-08-01 15:25

通常采用的方式如下所示:Drupal请求所有启用的模块来提供一个菜单项数组,每个菜单项都包含了一个数组,其中以路径为键,里面还包含了路径的一些相关信息。一个模块必须提供的一段信息就是页面回调page callback)。在这里,回调就是一个PHP函数的名称,当一个浏览器请求一个特定的路径时就会调用它。当一个请求到达时,Drupal将执行以下步骤:

Drupal版本:

回调映射

g089h515r806 的头像
Submitted by g089h515r806 on 星期六, 2009-08-01 15:23

当一个Web浏览器向Drupal发送一个请求时,它向Drupal传递了一个URL。通过这一信息,Drupal必须指出要运行哪段代码以及如何处理这一请求。这也就是通常所说的路由或者分发。Drupal截掉URL的基部分并使用后面的部分,后者被称之为Drupal路径。举例来说,如果URL是http://example.com/?q=node/3,则Drupal路径就为node/3。如果你使用了Drupal的简洁URL特性,那么在浏览器中的URL就是http://example.com/node/3,但是在你的web服务器中,在Drupal收到这个URL以前,web服务器已将其重写为http://example.com/?q=node/3;所以,对于Drupal来说,这两者是一样的。

Drupal版本:

第4章 Drupal 菜单系统

g089h515r806 的头像
Submitted by g089h515r806 on 星期六, 2009-08-01 15:22

老葛的Drupal培训班 http://zhupou.cn

Dru    Drupal的菜单系统很复杂,但是也很强大。术语“菜单系统”可能有点用词不当了。下面的理解可能会更恰当一些,那就是将菜单系统看作一个拥有3种主要功能的系统:1、回调映射,2、访问控制,3、菜单定制。菜单系统的基本代码位于includes/menu.inc中,而可选代码则位于modules/menu,后者可用来启用菜单的一些特性比如自定义菜单等等.
                在本章中,我们将探索一下什么是回调映射以及它是如何工作的,看一下如何通过访问控制来保护菜单项,学习如何使用菜单通配符,并逐条列出了各种内置的菜单项类型。在本章的最后,给出了如何覆写,添加,和删除已有的菜单项,这样你就可以随心所欲的定制Drupal了。
 

Drupal版本:

总结

g089h515r806 的头像
Submitted by g089h515r806 on 星期五, 2009-07-31 12:03

    读完本章后,你应该能够

• 理解如何将动作分配给触发器
• 编写一个简单的动作
• 编写一个高级动作和它的相关配置表单。
• 使用动作管理页面,来创建和重命名高级动作的实例。
• 理解什么是上下文
• 理解动作是如何使用上下文来修改它们的行为的。
• 理解动作的存储、取回、和执行。
• 定义你自己的钩子并将它们显示为触发器。
老葛的drupal培训班 Think in Drupal

Drupal版本:

向已有钩子中添加触发器

g089h515r806 的头像
Submitted by g089h515r806 on 星期五, 2009-07-31 12:01

老葛的Drupal培训班 Think in Drupal

有时候,如果你的代码新增了一个操作的话,那么你可能想要在一个已有的钩子上添加触发器。例如,你可能想向nodeapi钩子添加一个操作。假定你编写了一个模块,用来存档旧节点并将其迁移到数据仓库中。由于这个操作是作用于节点的,所以你可能想在nodeapi钩子下面添加一个archive操作,这样对于内容的所有操作,都会显示在触发器界面的同一个标签下。下面的代码用来添加一个额外的触发器:

Drupal版本:

使用hook_hook_info()定义你自己的触发器

g089h515r806 的头像
Submitted by g089h515r806 on 星期五, 2009-07-31 11:59

Drupal是怎么知道,有哪些触发器是可以显示在触发器用户界面的?按照典型的方式,它能够让模块通过钩子声明该模块所实现的钩子。例如,这里是来自comment.module的hook_hook_info()实现。定义触发器描述的地方就是hook_hook_info()的实现:

Drupal版本:

页面

Subscribe to Think in Drupal RSS