写本文是想跟刚用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

对drupal的理解【转】的更多相关文章

  1. drupal node机制理解

    [1]根据结构的功能结构的不同,drupal划分为,node,user,comment等不同的结构,他们的结构是不同的.他们可以作为四个不同的抽象类,根据这个抽象类,分别有一套hook函数去控制实现的 ...

  2. Drupal所能够理解的资源

    Drupal能够识别哪些资源类型? profile,不知道怎么翻译,应该是指安装类型,固定地存放于profiles目录下. module,模块,可以存在于多个目录下:modules.profiles/ ...

  3. Drupal 关于节点(nodes)的理解

    在 Drupal 构建的站点中.全部的内容都是以节点形式存储的,一个节点能够是公布的不论什么一个内容,比方说一个单面(page).一个投票(Poll).一篇文章(article).论坛主题(forum ...

  4. drupal里面的ajax最粗浅的理解-流程

    1,  form里面的ajax所在地表单元素有一个事件,激发system/ajax,相应的有ajax_form_callback(), 会把被改变的元素值传到form_state[values]中, ...

  5. DRUPAL-PSA-CORE-2014-005 && CVE-2014-3704 Drupal 7.31 SQL Injection Vulnerability /includes/database/database.inc Analysis

    目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Use Drupal to build everything from perso ...

  6. Drupal 7.23:函数drupal_alter()注释

    /** * Passes alterable variables to specific hook_TYPE_alter() implementations. * * This dispatch fu ...

  7. JavaScript 应用开发 #1:理解模型与集合

    在 < Backbone 应用实例 > 这个课程里面,我们会一起用 JavaScript 做一个小应用,它可以管理任务列表,应用可以创建新任务,编辑还有删除任务等等.这个实例非常好的演示了 ...

  8. Drupal建站过程思考——不识庐山真面目,只缘身在此山中

    使用drupal与没有使用drupal,在网站的设计过程上本质是一样的!所以,我们在使用drupal建一个新网站时,要时刻联想自己在没有drupal时是如何设计开发的. 不使用drupal时,我们通常 ...

  9. 隔壁小孩都要知道的Drupal配置

    i春秋作家:Arizona 原文来自:隔壁小孩都要知道的Drupal配置 隔壁小孩都要知道的Drupal配置 Drupal是一个开源的PHP内容管理系统,具有相当复杂的架构.它还具有强大的安全模型.感 ...

随机推荐

  1. Android LogCat使用详解

    Android的Logcat用于显示系统的调试信息,可在分别以下几个地方查看和调用logcat: 1.eclipse的Debug模式或DDMS模式下的会有一个Logcat窗口,用于显示log日志 只需 ...

  2. 使用WIF实现单点登录Part II —— Windows Identity Foundation基本原理

    在上一篇文章中,我们已经使用WIF构建了一个基于MVC4的简单的身份验证程序,在这篇文章里,我们将探讨一下到底什么是WIF,以及它的工作原理.然后在下一篇文章开始,我们将实际操作,实现单点登录功能. ...

  3. 使用WIF实现单点登录Part I——Windows Identity Foundation介绍及环境搭建

    首先先说一下什么是WIF(Windows Identity Foundation).由于各种历史原因,身份验证和标识的管理一般都比较无规律可循.在软件里加入“身份验证”功能意味着要在你的代码里混进处理 ...

  4. JS实现浏览器的title闪烁

    经常可以看见的title里面的消息提示,下面是JS的一种实现方法:主要是通过setTimeout方法设置一个定时器,切换消息提示,从而达title到消息提示的闪烁. <html> < ...

  5. 记一个python+sqlalchemy+tornado的一个高并发下,产生重复记录的bug

    场景:在用户通过支付通道支付完成返回时,发现我收到的处理数据记录中有两条同样的数据记录, 也就是同一笔钱,我数据库中记为了两条一样的记录. tornado端代码 from tornado import ...

  6. 嵌入式中的 *(volatile unsigned int *)0x500 解释

    C语言中*(volatile unsigned int *)0x500的解释: 如下: (unsigned int *)0x500:将地址0x500强制转化为int型指针*(unsigned int ...

  7. android开发图片分辨率问题解决方案

    dpi是什么呢? dpi是“dot per inch”的缩写,每英寸像素数. 四种密度分类: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (ex ...

  8. Android or iOS 运行 meteor App 屏幕一片空白 White screen的解决方法

    在mac上出现这种错误,多是与文件夹的权限有关,有人建议把~/.meteor目录删除,重新下载安装.在墙内重新下载安装的代价非常之大. 简单的解决方法,便是把~/.meteor,以及当前项目目录的权限 ...

  9. UIButton setImage setBackgoundImage

    setBackgroundImage 会根据button的大小平铺 setImage不会平铺

  10. scjp考试准备 - 6 - 父类构造器的引用

    题一,如下代码的执行结果: class Person{ String name = "No name"; public Person(String nm){name = nm;} ...