web-dev-qa-db-ja.com

ビューが表示されたフォームを変更し、フィルターにajaxを追加する方法

私は2つの公開されたフィルターを持つビューを持っています-両方の分類基準参照、選択します。最初からのユーザー選択に基づいて、2番目のフィルターのオプションを制限したい。ビューでajaxを有効化/無効化してテスト-違いはありません。ブロック内の公開フォームでテスト-違いはありません。

エラーメッセージはターゲットフィルターを置き換えます:"回復不能なエラーが発生しました。アップロードされたファイルは、このサーバーがサポートする最大ファイルサイズ(60 MB)を超えている可能性があります。"

フォームに公開されたフィルターで標準のフォーム変更とajaxを使用すると、フィルター処理でエラーが発生します。これはカスタムフォームでは正常に機能しますが、ビューに公開されたフィルターでは機能しません。

<?php

use Drupal\Core\Form\FormStateInterface;

function mymodule_form_alter(&$form, FormStateInterface $form_state, $form_id) {  
  if ($form_id == 'views_exposed_form') {
    if ($form['#id'] == 'views-exposed-form-articles-page-1') {
      //kint($form);
      //kint($form_state);
      //
      $form['field_tags2_target_id']['#prefix'] = '<div id="tags2-replace">';
      $form['field_tags2_target_id']['#suffix'] = '</div>';

      $form['field_tags_target_id']['#ajax'] = [
        'callback' => 'tags_ajax_callback',
        'wrapper' => 'tags2-replace'
      ];
    }
  }
}

function tags_ajax_callback($form, FormStateInterface $form_state) {
  // remove test2 1 (tid 3) from Tags2 options
  unset($form['field_tags2_target_id']['#options'][3]);

  $response = new AjaxResponse();
  $response->addCommand(new ReplaceCommand(
    '#tags2-replace',
    $form['field_tags2_target_id']
  ));
  return $response;

  //return $form['field_tags2_target_id'];
}

これを機能させるには?

2
svetlio

このパッチはこの問題に関連しています https://www.drupal.org/files/issues/2019-08-01/2842525-56.patch 。特にcore/modules/views/src/ViewExecutable.phpのセクションを参照してください。FormBuilderの部分はすでにコミットされていますが、残りは待機しています。

1
orioncabbar