要学习Drupal 7作为PHP框架的应用首先要学习怎样写模块,我们以创建一个最简单的hello模块为例。
先创建模块目录:sites/default/modules/hello
一个最简单的Drupal 7模块至少包含两个文件:hello.info, hello.module
hello.info是对模块信息的描述:
name = "Hello"
description = "Hello World"
package = "Other"
core = "7.x"
version = "7.x-1.0"
hello.module的内容如下:
<?php
// hook_menu定义了URL和处理函数的映射关系
function hello_menu() {
$items = array();
$items['hello'] = array(
'title' => 'Hello',
'page callback' => 'hello_world',
'access callback' => TRUE,
);
return $items;
}
function hello_world() {
echo 'hello world';
}
完成以上模块代码之后,启用Hello模块,然后访问http://localhost/hello可以看到hello world的输出。
可以看到,Drupal 7不是MVC结构,没有View层(Drupal有专门的主题扩展,可以很容易地为网站更换皮肤)和Model层 。路由的定义通过hook_menu实现。hook_menu里的page callback属性值就是页面处理函数,在函数里可以直接打印HTML代码。
虽然Drupal 7不使用MVC结构,但不意味着Drupal 7就很混乱。MVC结构的框架可以认为是把整个网站使用的编程语言按M(SQL语言)、V(HTML、JS、CSS)、C(PHP)分类到3各目录去组织。而Drupal 7则是把整个网站按功能分类到不同的模块,每一个模块独立成目录,独立开启关闭管理。
表单处理是网站的一个常用功能,下面我们介绍一个怎样处理表单,我们把hello.module改成如下:
<?php
function hello_menu() {
$items = array();
$items['hello-form'] = array(
'title' => 'Hello Form',
'page callback' => 'drupal_get_ form',
'page arguments' => array('hello_form'),
'access callback' => TRUE,
);
return $items;
}
function hello_form($form, &$form_state) {
$form['name'] = array(
'#type' => 'textfield',
'#title' => '姓名',
);$form['save'] = array(
'#type' => 'submit',
'#value' => '保存',
);return $form;
}// hook_submit
function hello_form_submit($form, &$form_state) {
// 表单提交的值保存在$form_state['values']里
drupal_set_message('姓名:' . $form_state['values']['name']);
}
完成表单代码之后,我们需要在系统菜单->配置->性能->清除所有缓存,访问http://localhost/hello-form
在这个表单的例子中,我们可以看到Drupal 7有几个特点:
- get和post请求的路由都通过hook_menu定义,post的请求由get请求对应的函数名后加_submit处理
- 所有提交的参数保存在$form_state['values']数组里
- 对于一个没有特殊格式要求的表单页面,是不需要写HTML代码的,全部通过特殊格式的PHP数组实现
评论