web-dev-qa-db-ja.com

カスタムテンプレートでカスタムフォームをレンダリングする

私のサイトでは、カスタムテンプレートでカスタムフォームを作成する必要があります。カスタムブロックではなく、カスタムtplファイルにあります。インターネットで解決策を検索しましたが、フォームが表示されないか、フィールドが表示されていますが、<form>タグ内にありません。この方法では、送信ボタンは機能しません。自己記述型フォームタグでフィールドをレンダリングすると、検証関数と送信関数が機能しません。

誰かが私を助けてくれますか?

TPL-ファイル

$form = _odisee_forms($form, $dag, $datum, $uur, $campussen);
$form['infodag'] = form_process_checkboxes($form['infodag']);
$formulier = drupal_get_form('infodagen-block-form');
print '<form id="'.$formulier['#id'].'" accept-charset="UTF-8" method="'.$formulier['#method'].'" action="'.$formulier['#action'].'">'; 
print drupal_render_children($form); 
//print render($form);
print render($formulier['form_id']);
print render($formulier['form_build_id']);
print render($formulier['form_token']);
print '</form>';

forms.inc

function _odisee_forms($type, $dag, $datum, $uur, $campussen) {
  $form = array();
  foreach ($campussen as $key => $campus) {
  $infomoment[] = t($dag[$key])." ".$datum[$key]. " @ " .$campus. " om ".$uur[$key];
  }
  $form['#id'] = 'infodagen-block-form';
  $form['infodag'] = array(
    '#type' => 'checkboxes',
    '#options' => $infomoment,
    '#required' => TRUE,
  );
  $form['voornaam'] = array(
    '#type'  => 'textfield',
    '#title' => t('<img src="/sites/all/modules/custom/odisee_forms/images/icon.png" class="icon">'),
    '#size'  => 15,
    '#attributes' => array(
      'placeholder' => array('Voornaam'),
      'class' => array('breed')
    ),
    '#required' => TRUE,  
  ); 
  $form['naam'] = array(
    '#type'  => 'textfield',
    '#title' => t('<img src="/sites/all/modules/custom/odisee_forms/images/icon.png" class="icon">'),
    '#size'  => 15,
    '#attributes' => array(
      'placeholder' => array('Naam'),
      'class' => array('breed')
    ),
    '#required' => TRUE,  
  );
  $form['emailadres'] = array(
    '#type' => 'textfield', 
    '#title' => t('<img src="/sites/all/modules/custom/odisee_forms/images/arroba-symbol.png" class="icon">'),
    '#size' => 20, 
    '#maxlength' => 128, 
    '#required' => TRUE,
    '#attributes' => array(
      'placeholder' => array('E-mailadres'),
      'class' => array('breed')
    ),
  );
  $form['submit'] = array(
    '#type'  => 'submit',
    '#value' => t('Schrijf in!'),
    '#attributes' => array('class' => array('button')),
    '#submit' => array('_odisee_form_submit'),
    '#validate' => array('_odisee_form_validate'),
  );
  return $form;
}


function _odisee_forms_validate($form_id, &$form, &$form_state) {
  dpm($form_state, "state");
  dpm($form);
}

function _odisee_forms_submit($form, &$form_state) {
}

テンプレートでフォームをレンダリングする必要があります。 drupal_get_formを呼び出すだけでは不十分です。フォームをレンダリングするには、以下を使用します。

drupal_render(drupal_get_form( 'form_nam'))

次のことも確認する必要があります。

  • カスタムフォームで、#themeパラメータが適切なテーマ関数に設定されています。
    • さらに、hook_themeの実装は正しいです。

このリンクを参照してください

0
Hardik Rawal