5

Drupal フォーム API を理解するのに本当に苦労しています...実際には Drupal 全体です。

これが私の問題です。レンダリングがうまくいくフォームを作成しましたが、今やりたいのは特定のフォーム要素のラッパー div です。ボックス標準のがらくた。

誰かが助けてくれますか、少なくとも「良い」チュートリアルの正しい方向を示してくれますか?

ありがとう。

4

2 に答える 2

13

hook_form_alter はあなたの友達です。

テーマの template.php ファイルで、フォームやフォーム要素などに接頭辞と接尾辞を追加できます。

以下は、私が最近行ったサイトの例です。

function bhha_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'user_login') {      
    $form['#prefix'] = '<div class="loginForm">';
    $form['#suffix'] = '</div>';
    $form['name']['#title'] = Null; // Change text on form
    $form['name']['#description'] = Null; // Change text on form
    $form['name']['#attributes'] = array('placeholder' => t('username'));
    $form['name']['#size'] = '30';
    $form['pass']['#title'] = Null;
    $form['pass']['#description'] = Null; // Change text on form
    $form['pass']['#attributes'] = array('placeholder' => t('password'));
    $form['pass']['#size'] = '30';
    //$form['actions']['submit']['#value'] = t('password');
    $form['actions']['submit'] = array('#type' => 'image_button', '#src' => base_path() . path_to_theme() . '/images/Login.png');
    $form['links']['#markup'] = '<a class="user-password" href="'.url('user/password').'">' . t('Forgot your password?') . '</a>'; // Remove Request New Password from Block form
    $form['links']['#weight'] = 540;
  }
}

コードを調べて、テーマの ID にしたいフォームを取得します。アンダースコアをハイフンに置き換えると、上記の例を使用して必要なことを実行できるはずです。

最も基本的な例は次のようになります。

function THEME_NAME_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'FORM_ID') {      
        // Adds a wrapper div to the whole form
    $form['#prefix'] = '<div class="loginForm">';
    $form['#suffix'] = '</div>';

        // Adds a wrapper div to the element NAME
    $form['name']['#prefix'] = '<div class="formRow">';
    $form['name']['#suffix'] = '</div>';
  }
}
于 2012-07-04T14:21:15.440 に答える
2

これを行うにはいくつかの方法があります。例えば

  1. フィールド レベルでマークアップを上書きする場合は、field.tpl.phpまたはを使用できますtemplate_preprocess_field()
  2. フォームの囲みマークアップを変更したい場合 (Drupal の標準マークアップは非常にスタイルに対応しているため、なぜだろうと思いますが)、テーマ関数を登録し、マークアップをそのように処理する必要があります。これについて詳しく説明している素敵な記事があります。
于 2012-07-04T14:24:38.357 に答える