写本文是想跟刚用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. C#创建、读取和修改Excel

    // Namespaces, Variables, and Constants using System; using System.Configuration; using System.Data; ...

  2. 【TOP10 APP】这些应用成了AppCan千人大会的焦点

    如何评价一款APP的好坏?首先,实用性.一款好的APP,首先要能为用户所用.然后是稳定流畅.闪退.卡顿,这样的APP用起来让人抓狂.再一个,界面美观.视觉主观性,在很大程度上会影响使用情况,毕竟没有人 ...

  3. netlink

    http://blog.csdn.net/zirconsdu/article/details/8569193 http://www.xuebuyuan.com/1725837.html netlink ...

  4. Reverse String

    Write a function that takes a string as input and returns the string reversed. Example:Given s = &qu ...

  5. 使用 RestEasy 和 Apache Tomcat 构建 RESTful Web 服务

    第一次,用这个RestEasy框架,用的时候,总是提示,404的错误,郁闷,呵呵,不过经过努力,终于解决问题,特别留个标记. 关于404的错误,上网找了一大堆,也还不行. 我感觉应该是lib下面架包的 ...

  6. OC中的消息传递和初始化

    [receiver message]:[接收者 消息] 把消息传递给接收者. getter(接收器),setter(设置器):只设置和读取一个参数. Person *p1 = [[Person all ...

  7. VisualSVN Server添加svn项目

    如果你想把一个项目添加到svn的步骤: 第一步:打开VisualSVN Server,在目录Repositries目录下,创建一个文件夹名称: 第二步:要把导入的项目,指定到这个路径:如下图:

  8. QtSpim实现MIPS指令的编写

    QtSpim实现MIPS指令的编写 由于各种对齐问题,cnblogs的格式难以控制,故贴图片,谅解.

  9. ASP.NET Web API 入门大杂烩

    [前言] 本文是大杂烩,意思即是:到处Copy再加一点点思考而混在一起的文章,引用来源因为太多太杂故而省略,望原作者原谅. [概述] ASP.NET Web API随ASP.NET MVC 4一起发行 ...

  10. svn版本控制器在vs2013中的使用

      下面记录常用的几种用法:   a) SVN检出 将SVN服务端所保存的数据下载到个人工作平台. 组长上传初始项目后,各组员可以到服务器上检出项目 1. 打开Visual Studio 2010-& ...