web-dev-qa-db-ja.com

ビューの変更フィルターフォームの変更

公開されたビューのフィルターフォームにさらに要素を追加しようとしていますが、奇妙な問題が発生し、混乱を招いています。

カスタムモジュールでhook_form_alter呼び出しを使用して、新しい選択ドロップダウンを追加しています。これは、submit要素の一部としてレンダリングされることを除いて、うまく機能します。

function my_module_form_alter(&$form, &$form_state, $form_id) {
  $form['test'] = array(
    '#type' => 'select',
    '#title' => 'New Filter',
    '#options' => array('value 1', 'value 2')
  );
}

レンダリングすると次のようになります。

<div class="views-exposed-form">
  <div class="views-exposed-widgets clear-block">
    <div class="views-exposed-widget views-widget-filter-field_node_status_value_many_to_one">
      <label for="edit-node-status"> Approval Status </label>
      <div class="views-widget">
        <div class="form-item" id="edit-node-status-wrapper">
          <select name="node_status" class="form-select" id="edit-node-status"><option value="All" selected="selected">&lt;Any&gt;</option><option value="0">queued</option><option value="1">approved</option><option value="2">denied</option></select>
        </div>
      </div>
    </div>

<!-- Select SHOULD go here -->

  <div class="views-exposed-widget views-submit-button">
    <input type="submit" id="edit-submit-wpg-content-bulk-admin" value="Apply" class="form-submit">
    <div class="form-item" id="edit-test-wrapper">
      <label for="edit-test">New Filter: </label>
      <select name="test" class="form-select" id="edit-test"><option value="0">value 1</option><option value="1">value 2</option></select>
    </div>
  </div>

</div>

私がここで欠けているものを誰かが知っていますか?新しく追加された 'test'要素がsubmit要素ラッパー内にレンダリングされるのはなぜですか?

4
PrairieHippo

$form['#info']でアイテムを宣言して、新しいフォームアイテムtestをウィジェットに変換する必要があります

したがって、コードは次のようになります。

function my_module_form_alter(&$form, &$form_state, $form_id){
  $form['test'] = array(
    '#type' => 'select',
    '#title' => 'New Filter',
    '#options' => array('value 1', 'value 2')
  );

  $form['#info']['test'] = array(
    'value' => 'test', 
  );
}
5
Aboodred1