Функция темы формы не вызывается для содержимого блока
Есть пользовательский модуль с блоком. Добавлены функции формы и темы формы. Использование функции hook_theme() для регистрации функции темы формы.
Попытка поместить содержимое формы в функцию _block_view() в содержимое блока. Но, наконец, он не использует функцию темы формы - theme_mymodule_custom_form()
Форма отображается в блоке, но функция темы не используется, понятия не имею, как это сделать. Нашел хороший образец здесь http://www.jaypan.com/comment/1758 , но это мне не помогло.
function mymodule_block_view($delta = '') {
switch($delta){
case 'mymodule':
if(user_access('access content')){
$block['subject'] = 'Block header';
$block['content'] = drupal_get_form('mymodule_custom_form');
}
return $block;
}
}
function mymodule_theme()
{
return array
(
'mymodule_custom_form' => array
(
'render element' => 'form'
),
);
}
/**
* Create a form
*/
function mymodule_custom_form($form, $form_state) {
// Form elements
$form = array();
// Text field
$form['Input'] = array(
'#title' => t('Input field'),
'#type' => 'textfield',
'#required' => TRUE,
);
// Submit
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Search',
);
// Get the path to the module
$path = drupal_get_path('module', 'mymodule');
$form['#attached'] = array
(
'css' => array
(
'type' => 'file',
'data' => $path . '/css/style.css',
),
'js' => array
(
'type' => 'file',
'data' => $path . '/js/sample.js',
)
);
return $form;
}
function theme_mymodule_custom_form($variables )
{
// Isolate the form definition form the $variables array
$form = $variables['form'];
$output = '<h3>Themed form</h3>';
$output .= drupal_render($form['Input']);
$output .= drupal_render_children($form);
return $output;
}
2 answers
Добавьте $form['#тема'] = "my_theme_form"; в свою форму.
Я всегда использую эту базу для тематизации форм и работаю без проблем.
function contact_form() {
$form['name'] = array(
'#title' => t('Name'),
'#type' => 'textfield',
'#required' => TRUE,
);
$form['mail'] = array(
'#title' => t('e-mail'),
'#type' => 'textfield',
'#required' => TRUE,
);
$form['comment'] = array(
'#title' => t('Comment'),
'#type' => 'textarea',
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
$form['#theme'] = "my_theme_form";
return $form;
}
function MYMODULE_theme() {
return array(
'my_theme_form' => array(
'render element' => 'form'
),
);
}
function theme_my_theme_form(&$vars) {
$form = $vars['form'];
$output = "";
//Render separated fiels
$output .= drupal_render($form["Input"]);
$output .= drupal_render($form["submit"]);
//And the rest of your form
foreach (element_children($form) as $key) {
$output .= drupal_render($form[$key]);
}
return $output;
}
Вот и все. просто вызовите форму в блоке, например:
$form = drupal_get_form("contact_form");
Каким-то образом это начало работать на моем локальном хостинге. Я думаю, что это была проблема с кэшем. Если у вас такая же проблема, попробуйте очистить кэш.