Для создания своего поля необходимо реализовать три обязательные функции. hook_element_info(), hook_theme() и theme_hook().
К примеру, реализуем тип формы number (пример работы):
hook_element_info()
<?php
/**
* Implementation of hook_element_info()
*/
function MYMODULE_element_info() {
$types = array();
$types['number'] = array(
'#input' => TRUE,
'#default_value' => 0,
'#size' => 60,
'#theme' => 'number',
'#theme_wrappers' => array('form_element'),
'#process' => array('ajax_process_form'),
);
return $types;
}
hook_theme()
<?php
/**
* Implementation of hook_theme()
*/
function MYMODULE_theme($existing, $type, $theme, $path){
return array(
'number' => array(
'render element' => 'element'
),
);
}
theme_hook()
<?php
/**
* Theme func for form item with type 'number'
*/
function theme_number($variables){
$element = $variables['element'];
$element['#attributes']['type'] = 'number';
element_set_attributes($element, array('id', 'name', 'value', 'size', 'min', 'max', 'step'));
_form_set_class($element, array('form-number'));
$output = '<input' . drupal_attributes($element['#attributes']) . ' />';
return $output;
}