質問: テンプレートファイルを使用してフォームのテーマを設定する方法 drupalのノード、コメント、ブロック、その他の多くはテーマテンプレートファイル(node.tpl.phpなど)を使用してテーマ化されていますが、フォームは別のストーリーです。フォーム用のテーマテンプレートファイルはありません。 。特定のフォームでカスタムテーマテンプレートを使用するにはどうすればよいですか?
回答: フォームを表示するためにtplファイルを使用することは完全に合理的です。多くの無関係なcssと#prefix/#suffixプロパティを使用して同様の結果を得ることができますが、tplを使用することで、ロジックレイヤーとプレゼンテーションレイヤーの分離を混乱させる必要がなく、 #user-login labelのような醜いcssセレクタをターゲットにする。 drupal 7 ...の例を示します。mytheme/template.php:function mytheme_theme($existing, $type, $theme, $path) { // ex 1: the "story" node edit form. $items['story_node_form'] = array( 'render element' => 'form', 'template' => 'node-edit--story', 'path' => drupal_get_path('theme', 'mytheme') . '/template/form', ); // ex 2: a custom form that comes from a custom module's "custom_donate_form()" function. $items['custom_donate_form'] = array( 'render element' => 'form', 'template' => 'donate', 'path' => drupal_get_path('theme', 'mytheme') . '/template/form', ); return $items; } custom_donate_form():function custom_donate_form($form, &$form_state) { $form['first_name'] = array( '#type' => 'textfield', '#attributes' => array('placeholder' => t('first name')), ); $form['last_name'] = array( '#type' => 'textfield', '#attributes' => array('placeholder' => t('last name')), ); $form['address'] = array( '#type' => 'textfield', '#attributes' => array('placeholder' => t('address')), ); $form['city'] = array( '#type' => 'textfield', '#attributes' => array('placeholder' => t('city')), ); $form['state'] = array( '#type' => 'select', '#options' => array( 'default' => 'state', '...' => '...', ), ); $form['zip'] = array( '#type' => 'textfield', '#attributes' => array('placeholder' => t('zip')), ); $form['email'] = array( '#type' => 'textfield', '#attributes' => array('placeholder' => t('email')), ); $form['phone'] = array( '#type' => 'textfield', '#attributes' => array('placeholder' => t('phone')), ); $form['submit'] = array( '#type' => 'submit', '#value' => 'submit', ); return $form; } mytheme/template/form/donate.tpl.php:<div class="row"> <div class="small-12 medium-12 large-8 columns"> <div class="row"> <div class="small-12 columns"> <h5>contact information</h5> </div> </div> <div class="row"> <div class="small-12 large-6 medium-6 columns"> <?php print render($form['first_name']); ?> </div> <div class="small-12 large-6 medium-6 columns"> <?php print render($form['last_name']); ?> </div> </div> <div class="row"> <div class="small-12 medium-6 large-6 columns"> <?php print render($form['address']); ?> </div> <div class="small-12 medium-6 large-6 columns"> <?php print render($form['city']); ?> </div> </div> <div class="row"> <div class="small-12 medium-3 large-3 columns"> <?php print render($form['state']); ?> </div> <div class="small-12 medium-3 large-3 columns"> <?php print render($form['zip']); ?> </div> <div class="medium-6 large-6 columns"></div> </div> <div class="row"> <div class="small-12 medium-6 large-6 columns"> <?php print render($form['email']); ?> </div> <div class="small-12 medium-6 large-6 columns"> <?php print render($form['phone']); ?> </div> </div> </div> <div class="row"> <div class="small-12 medium-12 large-8 large-offset-2 columns"> <?php print render($form['submit']); ?> </div> </div> </div> <!-- render any remaining elements, such as hidden inputs (token, form_id, etc). --> <?php print drupal_render_children($form); ?> これは foundation を使用しており、次のような形式になります。