Drupal 7模块编写

By admin, 28 二月, 2017

要学习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有几个特点:

  1. get和post请求的路由都通过hook_menu定义,post的请求由get请求对应的函数名后加_submit处理
  2. 所有提交的参数保存在$form_state['values']数组里
  3. 对于一个没有特殊格式要求的表单页面,是不需要写HTML代码的,全部通过特殊格式的PHP数组实现

标签

评论

Restricted HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id> <img src>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。
验证码
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
请输入"Drupal10"