好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Drupal使用初探

drupal究竟是什么?我想就不用多说了,不知道的可以去官网上c一下。 虽然本人现在对于drupal的内部结构或者什么的还是不太清楚,但是经过近半个月的时间的摸索,也算有了点儿眉目。以这篇文章记录一下。

为了阅读drupal代码比较方便,可以更改eclipse对install和module等文件的支持。 设置方法如下: 1. Windows – Preferences – General – Editors- File Associations, 关联 *.module and *.install 到 PHP Editor. 2. 在 Windows – Preferences – General – Content Types, 添加 *.module and *.install 到 Text -> PHP Content Type

在进入正题之前需要搞明白钩子究竟是个什么东西?因为钩子在drupal当中的应用可以说是相当广泛的。 钩子的原理与定义: 为了阅读drupal代码比较方便,可以更改eclipse对install和module等文件的支持。 设置方法如下: 1. Windows – Preferences – General – Editors- File Associations, 关联 *.module and *.install 到 PHP Editor. 2. 在 Windows – Preferences – General – Content Types, 添加 *.module and *.install 到 Text -> PHP Content Type 钩子的原理与定义: 有如下程序流: 在B处有以挂钩点

main(){funA();B//-----&gt;挂钩点funB();}

加入钩子挂钩点B的函数funB 则程序流变成如下的结构:

main(){funA();funB();funC();}

有时候容易把drupal的登录框丢掉,写出来以下。登录地址: yoursite.com/?q=user/login

drupal总体感觉最令人叹服的有以下几点: 1.词汇附加term,表示出了平时初级cms难以解决的无限级分类问题。 2.Views模块的应用,他可以经过一定的筛选将特定规则的资源呈现在用户面前。 3.另外还有灵活的资源机制(资源也可以称为内容)。可以动态的添加字段,用来记录内容的表现形式。类似微软的BASIC,拖几个控件一个应用程序就出来了。同理drupal令人叹服的也是这一点吧!修改几个字段,修改一个表现形式,然后就可以添加出来了。 注:也许本人水平目前有限,只能看到这些吧。

drupal的文件夹布局: includes 常用函数库 misc 常用脚本和图标 moduldes 核心模块 profiles 安装轮廓 scripts shell,peal脚本 sites 开发者对drupal做的修改,包括模块主题等 sites/all/modules放下载的或者自己编写的扩展模块 sites/default 站点的默认配置文件 sites/default/settings.php默认配置文件 sites/default/files对外访问上传文件用的 themes 主题引擎和设置下载的主题需要放到sites/all/themes

访问过程首先经过.htaccess过滤,将多余的url重写到index.php?q=fadsf/afdasf drupal的访问过程 1. 浏览器输入 www.example.com/node/123 2. 浏览器将信息传递到www.example.com url数据 node/123 3. web sever重组url,然后建立一个php环境来处理请求 4. 执行index.php 传到node/123 5. drupal核心类库经历初始化,和加载资源(所有的模块),判断出如何处理node/123 6. 请求模块处理 7. 主题模块,将数据包装成为html和css以及javascript 8. 浏览器接收html并将结果呈现给最终用户

Drupal 的请求被分成了两部分 ,一部分加载所有的模块,另一部分,执行相应的菜单请求,并将结果返回给浏览器 心得:只要在任何地方用global声明的变量,都是全局变量,不管是不是在函数内部

模块方法的命名用模块名加钩子名,用下划线隔开,组成覆盖的函数的名字, 例如tianmen_init() 表示在tianmen模块中覆盖了核心init函数 模块的实质就是一堆钩子函数覆盖的堆砌,除此以外也就没有什么了…… hook_init() hook_exit() 两个方法组成了模块的声明周期

Drupal中的Node只是一个结构化文档,一个显示结构,Drupal中的Node概括了网站的内容,里边包含了钩子的定义,其他模块调用的钩子。

自定义模块的位置推荐在/sites/default/modules/ 自定义模块的编写方法和测试方法,启用方法,和测试方法。 注:info文件的头部一定要有分号,否则Drupal不知道如何解析,将报错 从头到尾建立一个模块: 1.建立模块文件夹 testform 2.建立info文件 testform.info 内容大致如下

;$Id$ name = Test form description = this is only test for form api package = Tianmen module test version = VERSION core = 7.x files[] = testform.module

3.实现一个钩子 钩子的命名方法,一般钩子函数定义为hook_function(其中function为钩子的名字),将hook改为模块的名字。 例如hook_theme在本模块中将变成testform_theme; 实现一个简单的钩子吧!

function testform_help($path,$args){ switch($path){ case 'admin/help#testform': return "this is only for the test form api"; } }

4.测试这样将在modules中出现一个新的module,名字为testform 启用以后在后面将多出一个help菜单,点击help菜单将看到help的内容 5.建立一个block显示内容 实现hook_block_info和hook_block_view 如下代码:

function  testform_block_info(){ $blocks = array(); $blocks['list_modules'] = array( 'info' =&gt; t('A listing of all of the enabled modules.'), 'cache' =&gt; DRUPAL_NO_CACHE, ); return $blocks; } function testform_block_view($block_name) { if($block_name == 'list_modules') { $theme_args = array('items' =&gt; $list, 'type' =&gt; 'ol'); $content = theme('item_list', $theme_args); $block=array( 'subject' =&gt; 'Enable Modules', 'content' =&gt; $content, ); return $block; } }

这样就可以在block面板中发现自己建立的block,如果看不到,那么清清除cache。 注:内容可以使得登录以后才可以看到,当user_is_logged_in函数返回true时表示用户已经登录。 对应区域中的内容,可以调用render函数将内容还原成为html代码。参数是$page['region_name'],这也是模块与主题交互的一种手段。 自定义的block一定要在主div内部,即

一个region可以显示若干个block 6. 实现自定义模块菜单,用返回内容的形式,或者处理表单的内容

function testform_menu() { $items['testform'] = array( 'title' =&gt; 'View the sample form', 'page callback' =&gt; 'menucallback', 'page arguments' =&gt; array('testform_page'), 'access callback' =&gt; TRUE, 'type' =&gt; MENU_NORMAL_ITEM ); return $items; }

查看更多关于Drupal使用初探的详细内容...

  阅读:40次