theme elements in the form

2 methods


first one:

在template.php文件中加入override函数,函数名称的规则为themeName_type,例如simplegreen_textfield()。

function simplygreen_textfield()
{
$args = func_get_args();
$output = '<input type="text" value="jerry love cecy" size="35" id="edit-email" name="email" maxlength="128"/>';
return $output;
}

该方法全面覆盖原来的系统核心文件form.inc中的theme_textfield方法。在网站中的每一个textfield都是默认使用该函数render。


second one:使用模板的方法,该方法可以只针对某一个元素,而不影响其他的元素。

在构造$form数组时,为指定的元素指定theme模板。
function register_user_form()
{
$period = drupal_map_assoc(array(3600,10800,21600,32400,43200,86400),'format_interval');

$form['email'] = array('#type' => 'textfield','#theme'=>'user_textfield_render','#size' => '45', '#default_value'=>'jerry jia cecy');
$form['fullname'] = array('#type' => 'textfield','#size' => '32');
$form['month'] = array('#type' => 'select','#options' => $period);
$form['day'] = array('#type' => 'select','#options' => $period);
$form['year'] = array('#type' => 'select','#options' => $period);

$form['submit'] = array('#type' => 'submit', '#value' => t('Save form'));

$form['#theme'] = 'simplygreen_register_user_form';
$form['#submit'] = array('register_user_form_submit');

return $form;
}

然后在该模块的hook_theme中加入代码注册该模板:

/**
* Implementation of hook_theme().
*/
function user_theme() {
return array(
'user_picture' => array(
'arguments' => array('account' => NULL),
'template' => 'user-picture',
),
'simplygreen_register_user_form' => array(
'arguments' => array('form' => NULL),
'template' => 'theme_register_user_form',
),
'user_textfield_render' => array(
'arguments' => array('textfield' => NULL),
'template' => 'theme_user_custom_textfield',
),
);
}

posted on 2009-11-28 09:06  jerry data  阅读(156)  评论(0编辑  收藏  举报