三/090
drupal模块开发中易犯的小错误
总结一些drupal模块开发中容易犯的小错误,虽然很幼稚,但还是经常犯。。。
- menu菜单中的items数组忘记return。
- menu中忘记添加title属性,导致在菜单中找不到。
- 表单和页面中分别忘记return form和output。
- callback为drupal_get_form的时候,忘记写callback arguments。
待续。。。
二/090
关于drupal词汇表的模块开发
drupal的taxonomy模块是用来管理和组织节点分类的,并且提供了很多的接口。比如我们要对特定节点或者数据进行分类,则可以使用它。刚开始使用这个模块的时候,我的理解比较笨拙,先在词汇表管理中建立一个词汇表,然后关联上节点类型,此后在创建节点类型的时候就能进行分类的添加和删除了。但这样操作会产生一个问题,词汇表的id是一个死的数据,更改了网站环境,可能程序会出现问题,因为你没法得知创建词汇表的时候该词汇表的id(递增的)。我们应该充分利用drupal词汇表结构中的module这一字段。
十二/080
从drupal的path模块看到的
很多的CMS和blog系统都有自定义文章URL功能,drupal也不例外,内置的就有path模块,可以对每个节点进行快捷链接设置,应用比较多。比如将公司联系方式的链接由’node/23′, 设置链接为’contact’,这样访问www.target.com/contact,更为友好。
看下path模块,觉得写得不错的2个地方就是nodeapi这个hook和表单处理流程。首先表单的添加和编辑整合到同一个表单函数中,通过传递表单中的值来判断要进行的操作,是添加还是编辑,而中间多了一个函数的封装。作者很细心的加上了对当前节点地址的判断,如果设置的地址和当前地址一样(无用功),就不做任何处理了。
如果想要对nodeapi这个钩子了解得多一点,看看path模块的代码是个好的选择,首先这个钩子涉及到了很多op选项,’validate’, ‘update’, ‘insert’, ‘delete’, ‘load’,对照里面的注释,很容易体会这个钩子的强大和各个op的用途。此用途对操纵别的内容类型或者别的模块涉及到的内容类型颇为有用。
最后,使用了form_alter钩子修改了node的编辑和创建表单,判断条件是:
if (isset($form['type']) && $form['type']['#value'] .’_node_form’ == $form_id)
这样就不会对“无辜”的表单起作用了,并且效率上也会好一些。配合nodeapi,即可完成对这个表单的所有处理流程。