[Drupal] カスタムフォームの値でViewsの結果を絞り込む方法
やりたいこと
- コンテンツのタイトルを入力できるカスタムフォームを用意する
- フォームを送信するとコンテンツ一覧画面(
/admin/content
)に遷移する。 - その際先程入力したタイトルであらかじめ絞り込まれた結果が表示される。
クエリパラメーターのキーを設定
コンテンツ一覧でタイトルでフィルタリングを行うと、パスが
/admin/content?title=test&type=All&status=All&langcode=All
のように変化することからわかると思いますが、外部設置フィルターがあるビューではクエリパラメーターの値でフィルターの内容を判断しています。今回もカスタムフォーム送信時にこのパラメーターを同じように追加することで絞り込みを行います。
そのビューに対してどのようなキーが設定されているかは、外部設置フォームの設定のフィルターの識別子から確認できます。今回はタイトルで絞り込みたいので、タイトルのキーを確認しておきます。
フォームを作成
カスタムフォームの基本的な作り方はこちらをご覧ください。
https://www.drupal.org/docs/drupal-apis/form-api/introduction-to-form-api
今回はタイトルフィールドだけの簡単なフォームを作成します。
まずはmy_module/src/Form/TitleForm.php
でフォームを定義します。ポイントはサブミットハンドラーでビューの画面にリダイレクトするように設定することです。
<?php
namespace Drupal\my_module\Form;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
/**
* タイトル検索フォーム.
*/
class TitleForm extends FormBase {
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'title_form';
}
/**
* {@inheritdoc}
*
* フォームの定義.
*/
public function buildForm(array $form, FormStateInterface $form_state) {
$form['title'] = [
'#type' => 'textfield',
'#title' => 'タイトル',
];
$form['actions']['#type'] = 'actions';
$form['actions']['submit'] = [
'#type' => 'submit',
'#value' => '検索',
'#button_type' => 'primary',
];
return $form;
}
/**
* {@inheritdoc}
*
* 「検索」ボタン押下時の処理.
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
// フォームの値を取得する.
$title_value = $form_state->getValue('title');
// コンテンツ一覧画面に遷移する.
$form_state->setRedirect(
// コンテンツ一覧画面のルート名.
'view.content.page_1',
[],
// クエリパラメーターを追加する.
['query' => ['title' => $title_value]]
);
}
}
遷移先のビューのルート名がわからない場合はこちらの画面で探してみてください。
次に、my_module/my_module.routing.yml
でこのフォームのルートを定義します。
my_module.title_form:
path: '/title-form'
defaults:
_title: 'タイトル検索フォーム'
_form: '\Drupal\my_module\Form\TitleForm'
requirements:
_permission: 'access content'
手順としてはこれで完了です。
動作確認
/title-form
に行くと画像のようなフォームが表示されます。
フォームの値で絞り込まれた状態のコンテンツ一覧画面が表示されました
この方法は [Drupal] Viewsの結果をCSVにエクスポートする方法 で紹介したデータエクスポートディスプレイに対しても行うことができます。
カスタムフォームの変わりにウェブフォームで行う方法もありますよ。
https://www.youtube.com/watch?v=-yYj-k_Bwdw
Viewsの幅が広がるので試してみてくださいね
Author And Source
この問題について([Drupal] カスタムフォームの値でViewsの結果を絞り込む方法), 我々は、より多くの情報をここで見つけました https://qiita.com/863/items/054117e87c0755575952著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .