web-dev-qa-db-ja.com

フォーム項目の周りの<div class = "form-item">を削除します

私は http://Twitter.github.com/bootstrap/base-css.html#forms から可能な限り多くをテーマに使用したいと思っています。これの一部として、本当に取得したいです各<div class="form-item">要素にラップされている<input>を削除します。

これを行う唯一の方法を私が知ることができる限り、全体をコピーすることです http://api.drupal.org/api/drupal/includes!form.inc/function/theme_form_element/7 theme_form_element ()関数を呼び出し、<div>ラッパーを生成するコードを削除します。

これは本当に唯一の方法ですか?

2
kristian nissen

はい。これらのクラスは、Drupalにハードコードされており、表示スタイル設定だけでなく、フォームを「アニメーション化」するjQueryコード(検証、自動入力、自動フォーカスなど)にも使用されます)

HTML要素は複数のクラスを持つことができます。クラスをDrupalフォームに追加してから、独自のテーマを作成することができます。独自のテーマを作成すると、デフォルトのDrupalクラスをテーマにできず、代わりにベースCSSのクラスにテーマを設定するだけです。

2
Kevin Morse

私はそれを追加するだけであることがわかりました:

'#theme_wrappers' => array(),

フォームアイテムにDIVを削除しました。

1
Angus Walker
  1. Hook_themeを実装する

/**
 * Implements hook_theme().
 */
 function mytheme_theme($existing, $type, $theme, $path)
 {
     return array(
         'mywrapper' => array(
             'render element'  => 'element',
         ),
     );
 }
  1. フックを使用してフォームを変更する(またはフォームにアクセスしている場所はどこでも)

 /**
  * Implements hook_form_FORMID_alter().
  */
 function mytheme_form_formid_alter(&$form, &$form_state)
 {
      // You could wrap the element using this 
      $form['quantity']['#prefix'] = 'div class="custom_class_outer">';
      $form['quantity']['#suffix'] = '/div>';

      // And clear the other wrappers
      $form['quantity']['#theme_wrappers'] = array();

      // Or we could use wrapper
      $form['quantity']['#theme_wrappers'] = array('mywrapper');
 }
  1. ラッピング機能を実装する

 /**
  * Theme wrapper
  */
 function mytheme_mywrapper(&$vars)
 {
     return 'div class="custom_class_inner">' .
           $vars['element']['#children'] . '/div>';
 }
  1. drush cc all
0
krk