5 钩子hook_field_schema


    为此,我们首先需要在添加这个字段时,能够正确地创建我们想要的表结构,对于这个字段,我们需要保存两个值,一个是转换后的字符串,我们不妨采用默认的value;一个表示是否是手动输入的,我们这里使用manual

 

    接下来,让我们添加一个transliteration_title.install文件,然后向该文件中添加以下内容:

<?php

 

/**

 * @file

 * Install file for the transliteration title module.

 */

 

/**

 * Implements hook_field_schema().

 */ 

function transliteration_title_field_schema($field) {

  return array(

    'columns' => array(

      'value' => array(

        'type' => 'varchar',

        'length' => 255,

        'not null' => FALSE,

        'sortable' => TRUE,

      ),

      'manual' => array(

        'type' => 'int',

'not null' => TRUE,

        'default' => 0,

      ),

    ),

  );

}

 

    注意,这个钩子和hook_schema有点类似,它是专门用于定义字段的表结构的。这里我们按照前面的要求,定义了两列:'value''manual'

    让我们删除以前添加的“Test”字段,再重新创建一遍。我们来看一下新字段对应数据库表的表结构,如图所示:

图片1.png 

         字段对应表field_data_field_test的结构

    注意,transliteration_title_field_schema里面的'value''manual',对应于这个表结构中的field_test_valuefield_test_manual。表结构中的其余列,在所有字段的field_data表中都是通用的。这里前缀“field_test”就是我们这个字段的机读名字。我们来看看对应关系:

    “field_test” _” value  = field_test_value

    “field_test” _” “manual”  = field_test_manual

     字段名      +         列名

字段对应表名的命名规则:

    “field_data” _” field_test”  field_data_field_test

    “field_data” _” body”  field_data_body

     “field_data” 字段名

 

    如果我们想要读取我们这个字段中的值,假定当前语言为未定义语言,也就是“und”:

$node->field_test['und'][0]['value'];

$node->field_test['und'][0]['manual'];

    这里需要注意的是,并不是所有的字段,都采用“value”存储自己的值,比如分类术语字段,采用的就是“tid,获取分类术语字段的值,所用的代码就是:

$node->field_myfield['und'][0]['tid'];

而不是

$node->field_myfield['und'][0]['value'];


Drupal版本: