drupal5.7和drupal6.4的install文件的很多区别
drupal6.4的install文件里的hook_install钩子里面引入了hook_schema,我暂时叫它模式钩子。
按照官方的说法,这个钩子被定义成数组的形式,应用的好处很多。
还引入了drupal_install_schema函数,这个函数就是系统自带的,这个函数的作用就是按照hook_schema钩子里
创建的数据表结构来生成数据表。
一个例子如下:
在drupal5.7中,用下面的代码就可以创建数据表alinks了。
function alinks_install() {
switch ($GLOBALS['db_type']) {
case 'mysql':
case 'mysqli':
db_query("CREATE TABLE {alinks} (
id INT(10) unsigned NOT NULL auto_increment,
alink_start_boundary TINYINT(1) NOT NULL DEFAULT '0',
alink_text varchar(255) NOT NULL default '',
alink_end_boundary TINYINT(1) NOT NULL DEFAULT '0',
alink_case_insensitive TINYINT(1) NOT NULL DEFAULT '0',
alink_url varchar(255) NOT NULL default '',
url_title varchar(255) NOT NULL default '',
alink_external TINYINT(1) NOT NULL DEFAULT '0',
alink_class varchar(255) NOT NULL default 'alinks-link',
alink_weight INT(3) NOT NULL DEFAULT '0',
PRIMARY KEY (id)
) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
}
}
而在drupal6.4下创建相同的数据表,需要如下操作:
function alinks_install() {
// Create tables.
drupal_install_schema('alinks');// 这里的alinks是调用了alinks_schema函数
}
/**
* Implementation of hook_schema().
*/
function alinks_schema() {
$schema['alinks'] = array(//$schema['alinks']里的alinks是要创建的数据表的名字
'fields' => array(//fields开始,要创建的数据表的字段
'id' => array(
'type' => 'serial',
/*类型为serial代表了是一个auto_increment的字段,这个数组等值于id INT(10) unsigned NOT NULL auto_increment*/
'unsigned' => TRUE,
'not null' => TRUE,
),
'alink_start_boundary' => array(
'type' => 'int',
'not null' => TRUE,
'default' => 0,
'size' => 'tiny',
),
'alink_text' => array(
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => '',
),
'alink_end_boundary' => array(
'type' => 'int',
'not null' => TRUE,
'default' => 0,
'size' => 'tiny',
),
'alink_case_insensitive' => array(
'type' => 'int',
'not null' => TRUE,
'default' => 0,
'size' => 'tiny',
),
'alink_url' => array(
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => '',
),
'url_title' => array(
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => '',
),
'alink_external' => array(
'type' => 'int',
'not null' => TRUE,
'default' => 0,
'size' => 'tiny',
),
'alink_class' => array(
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => 'alinks-link',
),
'alink_weight' => array(
'type' => 'int',
'not null' => TRUE,
'default' => 0,
),
),//fields结束
'primary key' => array('id'),
);
return $schema;
}
