对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
对drupal的理解【转】的更多相关文章
- drupal node机制理解
[1]根据结构的功能结构的不同,drupal划分为,node,user,comment等不同的结构,他们的结构是不同的.他们可以作为四个不同的抽象类,根据这个抽象类,分别有一套hook函数去控制实现的 ...
- Drupal所能够理解的资源
Drupal能够识别哪些资源类型? profile,不知道怎么翻译,应该是指安装类型,固定地存放于profiles目录下. module,模块,可以存在于多个目录下:modules.profiles/ ...
- Drupal 关于节点(nodes)的理解
在 Drupal 构建的站点中.全部的内容都是以节点形式存储的,一个节点能够是公布的不论什么一个内容,比方说一个单面(page).一个投票(Poll).一篇文章(article).论坛主题(forum ...
- drupal里面的ajax最粗浅的理解-流程
1, form里面的ajax所在地表单元素有一个事件,激发system/ajax,相应的有ajax_form_callback(), 会把被改变的元素值传到form_state[values]中, ...
- 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 ...
- Drupal 7.23:函数drupal_alter()注释
/** * Passes alterable variables to specific hook_TYPE_alter() implementations. * * This dispatch fu ...
- JavaScript 应用开发 #1:理解模型与集合
在 < Backbone 应用实例 > 这个课程里面,我们会一起用 JavaScript 做一个小应用,它可以管理任务列表,应用可以创建新任务,编辑还有删除任务等等.这个实例非常好的演示了 ...
- Drupal建站过程思考——不识庐山真面目,只缘身在此山中
使用drupal与没有使用drupal,在网站的设计过程上本质是一样的!所以,我们在使用drupal建一个新网站时,要时刻联想自己在没有drupal时是如何设计开发的. 不使用drupal时,我们通常 ...
- 隔壁小孩都要知道的Drupal配置
i春秋作家:Arizona 原文来自:隔壁小孩都要知道的Drupal配置 隔壁小孩都要知道的Drupal配置 Drupal是一个开源的PHP内容管理系统,具有相当复杂的架构.它还具有强大的安全模型.感 ...
随机推荐
- ruby 程序中的文字编码
1,问题 在写一个统计代码行数的脚本时遇到一个问题: 代码: file_name = "code.rb"c = 0File.foreach(file_name) do |x| ne ...
- JS把函数当作参数传递
getDescPage("commonPage","/page/common/tips/tips.html",init()); $("#"+ ...
- esp和ebp详解
最近在研究栈帧的结构,但总是有点乱,所以写了一个小程序来看看esp和ebp在栈帧中的作用.这个程序如下: 这个程序很简单,就是求两个数的值,然后输出即可.所以首先把它用gcc编译链接成a.out,进入 ...
- Should .close() be put in finally block or not?
The following are 3 different ways to close a output writer. The first one puts close() method in tr ...
- poj 1679 The Unique MST
题目连接 http://poj.org/problem?id=1679 The Unique MST Description Given a connected undirected graph, t ...
- ORACLE SQL TUNING ADVISOR 使用方法
sql tunning advisor 使用的主要步骤: 1 建立tunning task 2 执行task 3 显示tunning 结果 4 根据建议来运行相应的调优方法 下面来按照这个顺序来实施 ...
- Spring Roo
Spring Roo 是SpringSource新的开放源码技术,该技术主要面向企业中的Java开发者,使之更富有成效和愉快的进行开发工作,而不会牺牲工程完整或灵活性.无论你是一个新的Java开发人员 ...
- 关于使用,NI采集卡+labview信号采集,问题交流【第二贴】
*** 采集卡 NI PCI-6534: max sample rate 20MHz:32位的数字输入,数字输出. ***输入信号: 峰峰值,4.16V 最小值 -80mV 频率 ...
- Java把内存划分为4个部分 1. 代码区 1、栈区 3、堆区 4、静态区域
1.栈区(stacksegment)—由编译器自动分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束之后,系统自动释放JVM内存资源 2.堆区(heapsegment)—一般由程序员分配释放 ...
- VRP-Lua学习笔记
至于vrp是什么东西以及为什么要学习vrp,vrp的简单操作这些问题请自行右转抵拢倒拐找百度或者去中视典官网去找教程,我这里不会在赘述. 今天默认我们已经会使用VRP的脚本编辑器,用其他语言来为VRP ...