写本文是想跟刚用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. javascript雪花效果 注释版

    (function () { // 添加事件监听器 function addEvent(a, b, c) { if (a.addEventListener) a.addEventListener(b, ...

  2. jqueryMobile应用第一课《构建跨平台APP:jQuery Mobile移动应用实战》连载一(Hello World)

    有人说每个程序员都曾经有过改变世界的梦想,笔者认为,这与程序员年轻时编写的第一个程序有着莫大的关系.简简单单的一句“hello world”让年轻的心开始相信梦想,用一种低调的壮志凌云向世界展示自己的 ...

  3. git传输协议原理

    git精神:distributed-is-the-new-centralized 转自:http://git-scm.com/book/zh/v1/Git-%E5%86%85%E9%83%A8%E5% ...

  4. Java Collections Source Code Series 1 --- 简介

    废话开篇 由于项目需要,需要对Java Collections进行系统地了解,所以在此记录下,方便自己,服务他人. Java Collections 简介 Java Collections 框架主要包 ...

  5. bzoj 1798 [Ahoi2009]Seq 维护序列seq

    原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1798 线段树区间更新: 1. 区间同同时加上一个数 2. 区间同时乘以一个数 #inclu ...

  6. 什么是O/R Mapping(ORM)

    ORM,即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一 ...

  7. SQL Server 批量插入数据的两种方法

    在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题.下面介绍 SQL Server支持的两种批 ...

  8. MVC 中的@Html.DropDownList下拉框的使用

    MVC 中的下拉框 实现方式,下面为大家介绍一个我自己认为比较好用的实现方式,而二话不说直接上代码: 第一步: 后台代码 //公共的方法 //在每次需要展示下拉框的时候,需要调用一下这个方法 [数据源 ...

  9. jQuery 获取 select 值和文本

    jQuery("#select1").val();是取得选中的值, jQuery("#select1").text();就是取得的文本.

  10. 微信支付.NET版开发总结(JS API),好多坑,适当精简。

    前2天,做一个手机网页的微信支付的项目,费了好些周折,记录一下.接下来,按照开发步骤,细数一下,我遇到的那些坑. [坑1]官方邮件中下载的demo只有PHP版本,其他版本没有给链接.可能让人误以为只有 ...