You are here

添加数据输入表单(2)

   这个看起来有点复杂,所以让我们详细的分析一下。首先要注意的是,我们在这里实现了Drupal的另一个钩子。这次是nodeapi钩子,在drupal对节点进行各种处理时将会调用该钩子,这样其它的模块(比如我们的)在处理继续往下以前可以修改节点。我们通过变量$node将节点传递过来。注意第一个参数前面的&,这意味着它实际上是对$node对象的一个引用,这点非常好,因为我们在这里对$node所做的任何修改都将被保存下来。由于我们的目标是追加一个表单,所以我们非常高兴地看到我们可以修改节点。

 
     我们仍然需要一些信息----在我们的代码被调用时在Drupal中将发生什么。这些信息保存在了参数$op中,它可以是insert(节点正被创建),delete(节点正被删除),或者一个其它的值。当前,我们只有当节点正准备显示出来时,才想对其进行修改。在这种情况下,变量$op的值就是view。我们在这里使用了switch控制语句,这样我们就可以非常容易的添加其它情况,并且能够方便的看到在每种情况下我们的模块将做什么。
 
     接下来,我们快速的检查了一些我们不想显示注释字段的情况。一种情况是$user对象的用户ID为0时,这意味着查看节点的用户此时没有登录(注意,在这里我们使用关键字global 将$user 对象包含了进来,这样我们就可以测试当前用户是否登录了)。另一种情况是当参数$page不为TRUE时,我们想阻止表单的显示。如果它为FALSE,这意味着,这个节点并不是单独显示的,而是显示在一个列表中,比如说一个搜索引擎的结果中,或者一个最近更新的节点列表中。在这些情况下,我们不需要添加任何东西。我们使用break语句来跳出switch语句从而阻止对页面的修改。
 
 在我们为web页面添加注释表单以前,我们需要检查一下,将要进行显示的节点的类型是不是我们在设置页面所启用的类型中的一个,所以我们取回了在我们实现设置钩子时所保存的节点类型数组。我们将它保存到了变量$types_to_annotate中去。对于variable_get()中的第2个参数,我们在这里声明了一个默认数组,用于站点管理员还没有访问我们模块的设置页面来输入设置的情况。下面要做的就是检查一下,我们所要处理的节点的类型是不是包含在$types_to_annotate中。同样,如果节点类型不是我们想要注释的,我们将使用break语句来跳出switch语句。
 老葛的Drupal培训班 Think in Drupal

Drupal版本: