对drupal的理解【转】

写本文是想跟刚用drupal的朋友,分享一下心得,国内用drupal的太少了,希望大家能好好交流. 希望几分钟看完后你能马上上手drupal,至少能理解hook,api,theme,module,cck,hack core

别将drupal想复杂了,所有的东西都能推理出来的,即便你不太懂drupal,你只要懂一点基础的PHP就行了. 我以前的文章说过,学习drupal,要掌握用php的print_r,要了解php的array,现在多了一点,要会php的include文件.

1.drupal是PHP写的,所以php能做的drupal都能做,PHP不能做的,drupal当然也不行的. 2.drupal是强大,但强大说明很难上手,原因在于其机制. 上两个是废话

3.你应该看了很多drupal的介绍(浪费时间地对比drupal和joomla,wordpress了吧),总该看过hook,api,theme,module,cck,hack core这些关键词了吧 好吧,要理解drupal,关键要搞明白什么是module,其余几个关键词其实都来源于module 理解下面一句话,你就认识drupal了 php要运行起来总得要*.php文件吧,drupal也一样,php的逻辑很复杂的时候要分开几个php来写吧,纯PHP文件时将这些php合在一起的时候用的是include 或者 require. drupal也一样,但drupal 默认include的文件不是*.php而是*.module 所以,只要你将想要运行的内容放在*.module里了,drupal就能自己去include了,不用你自己手写一句include xxxx.module 4.但是这个*.module有些特别,他几乎只接受function(中文名叫函数.深入还接受什么,新手不懂也罢),所以你可以将所有你以前写过的function全都塞进*.module里,完全不用改名(和已经有的drupal函数重名除外)

5.什么是API?所有的drupal function都叫api,所以别将api想得太复杂,因为api就是*.module(还有些include/*.inc文件)里的function.不过现实讨论中往往指的是drupal内置的函数,但你装了别的module后,例如CCK,VIEWS,这些模块的内部函数你也是可以用的,他们其实也是API.

6.什么是hook,我刚学drupal的时候也非常不想看到这个词,怕了,感觉很复杂,终于有一次我必须了解hook的时候,我才发现,奶奶的,原来如此简单.相信我,你在写PHP的时候,其实写过无数的”hook!”: hook也是function , 也是放在module文件中的,不过命名特别一点. hook机制就是A函数自动调用B函数. 你会发现drupal有很多函数都这样: function moduleName_xxxx(){ .. module_involve(XXXX);//不知有没有记错了

} 看到这东西,就是定义了一个hook,就是说你在某*.module如果按drupal的命名规则定义了一个function,上面的函数只要一执行的时候,就会自动执行你的函数了.

7.drupal有很多内部函数,这些内部函数默认在启动的时候就调用,所以你只要在这些一定会运行的函数里加入你自己要运行的逻辑,这不就是一个hook了么?当然,这样做叫hack core,比较dirty,所以drupal就蛋疼地增加了一个叫module的机制告诉大家:你们只要按某些命名规则来办事,就不用每次都hack core了!所以其实hook,api,hack core也就那么一回事

8.例如最常用的hook_nodeapi,就是说当drupal要显示一篇文章的时候,这个hook_nodeapi函数就一定会执行!所以这时你也要想你的函数能执行,你要么就直接啥也不管找到hook_nodeapi的原函数,将你的代码直接复制上去,要么就按drupal的命名规则定义一个叫xxxName_nodeapi的函数.如此简单,这样的同时,你就创建了一个API,也创建了一个moduel drupal的机制你就明白小半了!

9.drupal试图(事实上)用一个根目录下的一个index.php来运行所有请求,所以你用屁股想也知道,你的逻辑(代码)要能跑,必定得被这个index.php引用(include或require)上.所以麻,你不想搞明白drupal的机制,直接在这个index.php上动手脚就行了.这就是我的drupal anywhere的思想来源.

最后:凡是想不明白drupal为什么XXX的,别想drupal,想想要是你自己写php,你会怎么做,想着想着你就会明白drupal的机制了,就算差一点也差不了太多了. 中国人的举一反三永远是无敌的!

http://www.trackself.com/archives/1611.html

原文地址:https://www.cnblogs.com/woshare/p/4658310.html