You are here

8 钩子hook_element_info

admin 的头像
Submitted by admin on 星期一, 2015-06-29 09:55

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com

    这段代码看起来有点简单,加进来以后,并没有得到我们想要的效果,是的。我们还需要实现更多一点的钩子。在Drupal的表单元素中,部分表单元素是由其它表单元素复合而成的,比如datefile,以及一些第三方的表单元素。其实我们可以把我们的这个输入控件,定义成为一个表单元素类型,这样更有利于复用。我们来看看这个表单元素类型的定义:

 

/**

 * Implements hook_element_info().

 */

function transliteration_title_element_info() {

  $elements = array();

  $elements['transliteration_title_field'] =  array(

    '#input' => TRUE,

    '#process' => array('transliteration_title_field_process'),

    '#theme' => 'transliteration_title_field',

    '#theme_wrappers' => array('form_element'),

  );

  return $elements;

}

 

/**

 * Process the transliteration_title type element before displaying the field.

 *

 * Build the form element. When creating a form using FAPI #process,

 * note that $element['#value'] is already set.

 *

 * The $fields array is in $complete_form['#field_info'][$element['#field_name']].

 */

function transliteration_title_field_process($element, $form_state, $complete_form) {

  $settings = &$form_state['field'][$element['#field_name']][$element['#language']]['instance']['settings'];

  $element['value'] = array(

    '#type' => 'textfield',

    '#maxlength' => 255,

    '#title' => t('transliteration title'),

    '#required' => isset($element['#required']) ? $element['#required'] : FALSE,

    '#default_value' => isset($element['#value']['value']) ? $element['#value']['value'] : NULL,

  );

  $element['manual'] = array(

'#type' => 'checkbox',

'#title' => t('manual'),

'#default_value' => isset($element['#value']['manual']) ? $element['#value']['manual'] : NULL,

);

  return $element;

}

    我们在前面讲表单元素的时候,就提到过hook_element_info(),这里我们使用这个钩子函数定义了一个自己的表单元素类型,为它指定了一个定制的处理函数,在transliteration_title_field_process里面,我们看到这个表单元素是由一个文本字段和一个复选框复合而成的。

    让我们清空缓存,然后刷新添加节点的表单页面,此时我们看到了新增的这个表单元素了。它和普通的表单元素没有太大的区别,如图所示:

图片1.png 

              transliteration_title_field表单元素(输入控件)


Drupal版本: