手挽手教你写第一个简单的drupal模块留言板 -- 打基础篇之drupal模块开发的简单概念

Drupal的中文资料很是匮乏,虽然有不少有质量的文章,但往往零零落落,或者无法让人整体把握作drupal模块开发的要点。

回想当初本人看那本 pro drupal development 2nd的时候,一边看一边想干那作者的老娘,因为很多词用的对中国人来说太生硬了,

很奇怪他为什么不产用一点通俗易懂的解释,你看写c++ primer的lippman大师,功夫高又不摆架子,写的深入浅出通俗易懂的。
当然,我看的是盗版PDF书,没有指责它的权利。

 

本文基于你已经了解过drupal是什么,对于drupal是由模块组成的有一个基本的概念,知道它的文件夹放置结构,然后听过下列名词。

Node

Form Api

Schema Api

Theme Layer

 

名词解释:

1, 所谓的Node 就是drupal这个CMS所管理的一个文档,drupal管理着不同类型的文档,称作content type, 可以看作是它所维护的文档的模板。它采用类似于单层继承的方式来形成各种content type,我们可以通过hook_node_info 回调函数来向它注册一种新的内容类型,在下面留言板的例子中你将看到如何做到。

一个最基本的Node, 也就是内容类型的基类只有俩个有意义的字段 。

title

body

 分别标明文档的标题和内容。 然后每一种自定义的content type就自然获得这俩个字段了。比如你可以定义一个电影信息的内容类型,拥有三个字段如下

title

body

coverimg 

上俩个字段插入编辑之类的操作由drupal自动维护, 你只需要管好自己添加进去的字段的维护就好了,Node是什么就讲到这里了。

 

2, Form Api

这又是一个让人痛恨的叫法,明明就是用php的数组来描述一个html表单元素,它非要叫做api。用drupal_get_form($form_id)函数,$form_id就是一个函数名字,这个函数返回了描述html表单结构的数组,这样调用drupal_get_form后就能得到生成好的html代码。
这样来定义表单的好处就是验证表单也比较容易,还可以防止数据被客户端恶意修改。

 比如


function get_a_textfield() {
  
$form['username'= array(
    
'#title' => '用户名',
    
'#type' => 'textfield',
    
'#maxlength' => 20,
    
'#description' => '请输入你的用户名',
  );
  
  
return $form;

就能得到一个textfield文本框。

 

3, Schema Api

这个作用跟所谓的表单api是一样的,同样是用数组来描述数据表的结构,用这玩意来定义数据表结构目的据说是为了跨数据库服务器。比如定义一个varchar字段,用如下数组可以定义一个数据表的结构。

     

<?php
$schema['testtable'= array(
  
'description' => '定义testtable结构',
  
'fields' => array(
    
'id' => array(
      
'type' => 'serial',
      
'not null' => TRUE,
    )
,
    
'username' => array(
      
'type' => 'varchar',
      
'length' => 255,
      
'not null' => TRUE,
      
'default' => '',
      
'description' => '用户名字段',
    )
,
  )
,
  
'primary key' => array('id'),
  
'indexes' => array(
    
'username' => array('username'),
  )
,
);
?>
 
abc
这样就定义了一个叫做testtable的表,有一个字段叫做id,是一个自动增长的主键,一个字段叫做username,是一个varchar类型的,本身是一个索引。


4, 最后还剩一个theme层
最简单的定义theme,其实就是通过一个theme()函数,传递若干或者没有变量给这个函数,这个函数会帮你找到相应的模板,然后把你的界面给呈现出来。
一般的用法是 

echo theme("front_page", $frontpage_vars);

很明显目的是为了显示出首页的html, 这里$frontpage_vars 则是我们从数据库或者其他途径得到的首页应该呈现的部分动态内容。

现在通过第一个参数front_page, theme函数还没办法知道应该用哪个模板或者函数来输出内容,这里我们就要用一个叫做hook_theme()的回调函数来通知drupal去哪里可以找到front_page标量对应的默认模板,代码如下。

<?php
function testmod_theme() {
  
return array(
    
'front_page' => array(
      
'template' => 'front-page',
      
'arguments' => array('fontpage_vars' => NULL),
    )
,
  );
}
?>


这里我们指定了使用模板: front-page, 会传递一个变量$frontpage_vars给这个模板使用,若没有传递的话则默认给个NULL值. 在这个目录下我们现在要建立这个模板,文件名为这个名字后面加上.tpl.php, 也就是我们建立一个文件叫做 front-page.tpl.php   然后输入下面内容:

<?php if ($frontpage_vars): ?>
 我知道要显示什么 
<?php else: ?>
 你都没给东西我
<?php endif?>


简单又清楚。

 

基本概念的解释就到这里了,下一篇博客开始讲如何写一个简单的留言本挂载到drupal系统里。


本文版权规本人和cnblogs所有
本人博客地址: http://www.cnblogs.com/eleganthqy/



posted on 2010-01-26 21:45  eleganthqy  阅读(1921)  评论(1编辑  收藏  举报

导航