Функция темы формы не вызывается для содержимого блока


Есть пользовательский модуль с блоком. Добавлены функции формы и темы формы. Использование функции 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;
}
Author: James, 2012-08-29

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");
 0
Author: Capy, 2012-08-29 23:11:49

Каким-то образом это начало работать на моем локальном хостинге. Я думаю, что это была проблема с кэшем. Если у вас такая же проблема, попробуйте очистить кэш.

 0
Author: James, 2012-08-29 23:59:03