drupal5和drupal6的theme函数也发生了很大的变化。
我在改写alinks模块的时候,感触很深,在后台显示alinks添加的列表的时候,出现
如下图所示的显示问题,原来的drupal5版本的alinks后台列表是横排显示的,但是
下图是竖排显示的,最后确定就是theme有问题。
图1
找了好多的关于theme的资料都没有理清头绪,后来就看drupal6下其他的模块写得关于theme
的函数,找到一个问题所在,就是drupal6下多了一个hook_theme的钩子。于是赶紧的写了这个
钩子:
/**
* Theme function for the list of alinks
*/
function alinks_theme() {
return array(
'alinks_list' => array(
'arguments' => array('form' => NULL)//'form' => NULL里的form是alinks_list这个函数的参数。
)
);
但是写好以后,显示还是有问题!我找了好久也没找到原因,后来想到估计是缓存的问题,然后清空缓存。
一切显示正常了!!!大家一定要记得,开发中遇到实在想不明白的事情,先清空缓存!!!
显示正常以后,效果如下图所示:

再次强调一定要清空缓存!!!
下面写出来那个alinks_list这个theme函数和它被调用的函数.
//调用alinks_list这个theme函数的函数
function alinks_edit_form(){
$form['alinks_edit_form'] = array(
'#type' => 'fieldset',
'#title' => t('Edit alinks'),
'#description' => t('Use this form to edit alinks. If you want to delete an entry, just select the corresponding checkbox. To edit the entry, edit the desired text. Click update to confirm any changes.'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
......
$form['alinks_edit_form']['#theme'] = 'alinks_list';
return $form;
}
//alinks_list这个theme函数
function theme_alinks_list($form) {
$header = array(t('Start'), t('String'), t('End'), t('Case'), t('URL'), t('URL title'), t('External'), t('Class'), t('Weight'), t('Delete'));
$rows = array();
foreach($form['alinks']['#value'] as $id=>$alink) {
$row = array();
$row[] = array('data' => drupal_render($form['edit_alink'][$alink['id']]['start_boundary_edit']), 'align' => 'center');
$row[] = array('data' => drupal_render($form['edit_alink'][$alink['id']]['word_edit']), 'align' => 'left');
$row[] = array('data' => drupal_render($form['edit_alink'][$alink['id']]['end_boundary_edit']), 'align' => 'center');
$row[] = array('data' => drupal_render($form['edit_alink'][$alink['id']]['case_insensitive_edit']), 'align' => 'center');
$row[] = array('data' => drupal_render($form['edit_alink'][$alink['id']]['url_edit']), 'align' => 'left');
$row[] = array('data' => drupal_render($form['edit_alink'][$alink['id']]['url_title_edit']), 'align' => 'left');
$row[] = array('data' => drupal_render($form['edit_alink'][$alink['id']]['external_edit']), 'align' => 'center');
$row[] = array('data' => drupal_render($form['edit_alink'][$alink['id']]['class_edit']), 'align' => 'left');
$row[] = array('data' => drupal_render($form['edit_alink'][$alink['id']]['weight_edit']), 'align' => 'center');
$row[] = array('data' => drupal_render($form['edit_alink'][$alink['id']]['delete']), 'align' => 'center');
$rows[] = $row;
}
$output = theme('table', $header, $rows);
$output .= drupal_render($form);
return $output;
}
总结:
1、drupal5和drupal6的theme函数的最大区别是,drupal6添加了一个hook_theme来声明
哪个是theme函数,这个theme函数需要什么参数。
2、再次强调,清空缓存!
