メインコンテンツに移動

メインナビゲーション

  • ホーム
  • サイトマップ
  • ビデオ
  • ご連絡

パンくず

  • ホーム
  • Drupalモジュール(views)でのExposedFilterの入力フォームにjsファイルの追加および引数をjsに渡す

Drupalモジュール(views)でのExposedFilterの入力フォームにjsファイルの追加および引数をjsに渡す

drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
views

やりたいこと:モジュール(Views)のExposed FilterのフォームIDの確認、取得

  • ViewsのExposed Filterのクライアント側でJavascriptで入力データを加工したりして、「適応」ボタンが押されたときに入力データをチェックしたりする場合、フォームIDなどが必要となります
  • ブラウザのプロパティでViewsのExposed FilterのフォームIDを確認することができますが、Viewsの表示名が変わったら、フォームIDも変わりますので、汎用性が欠けています。

ViewsのExposed FilterのフォームIDは: "views-exposed-form" + View Display Name + Page Name

  • モジュール(Devel)のdsm($form_state['view'])で確認すれば、Exposed FilterのフォームIDの命名規則が分かります: views-exposed-form + View Display Name + Page Name
    • 各名前の間にハイフンで連結します
  • views-exposed-form: 定数、決まりの頭文字
  • view Dispaly Name: (例:zhong_wen)ビューを作成するときにつけられたシステム名
    • dsm($form_state['view']['name'])で確認できます
  • Page Name:(例:cn_page)ビューを作成したときに、そのページのシステム名(高度な設定にある「システム内部名称」)
    • dsm($form_state['view']['current_display'])で確認できます
  • すべての名前にあるアンダーバー('_')をハイフン('-')に変更します
    Drupalのモジュール(Viuews)のExporsed FilterのフォームIDの命名規則と確認
  • 上記例の名前でExposed FilterのフォームIDは: views-exposed-form-zhong-wen-cn-page となります
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
views

やりたいこと:モジュール(Views)のExposed FilterのフォームIDの確認、取得

  • ViewsのExposed Filterのクライアント側でJavascriptで入力データを加工したりして、「適応」ボタンが押されたときに入力データをチェックしたりする場合、フォームIDなどが必要となります
  • ブラウザのプロパティでViewsのExposed FilterのフォームIDを確認することができますが、Viewsの表示名が変わったら、フォームIDも変わりますので、汎用性が欠けています。

ViewsのExposed FilterのフォームIDは: "views-exposed-form" + View Display Name + Page Name

  • モジュール(Devel)のdsm($form_state['view'])で確認すれば、Exposed FilterのフォームIDの命名規則が分かります: views-exposed-form + View Display Name + Page Name
    • 各名前の間にハイフンで連結します
  • views-exposed-form: 定数、決まりの頭文字
  • view Dispaly Name: (例:zhong_wen)ビューを作成するときにつけられたシステム名
    • dsm($form_state['view']['name'])で確認できます
  • Page Name:(例:cn_page)ビューを作成したときに、そのページのシステム名(高度な設定にある「システム内部名称」)
    • dsm($form_state['view']['current_display'])で確認できます
  • すべての名前にあるアンダーバー('_')をハイフン('-')に変更します
    Drupalのモジュール(Viuews)のExporsed FilterのフォームIDの命名規則と確認
  • 上記例の名前でExposed FilterのフォームIDは: views-exposed-form-zhong-wen-cn-page となります
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
views

やりたいこと:モジュール(Views)のExposed FilterのフォームIDの確認、取得

  • ViewsのExposed Filterのクライアント側でJavascriptで入力データを加工したりして、「適応」ボタンが押されたときに入力データをチェックしたりする場合、フォームIDなどが必要となります
  • ブラウザのプロパティでViewsのExposed FilterのフォームIDを確認することができますが、Viewsの表示名が変わったら、フォームIDも変わりますので、汎用性が欠けています。

ViewsのExposed FilterのフォームIDは: "views-exposed-form" + View Display Name + Page Name

  • モジュール(Devel)のdsm($form_state['view'])で確認すれば、Exposed FilterのフォームIDの命名規則が分かります: views-exposed-form + View Display Name + Page Name
    • 各名前の間にハイフンで連結します
  • views-exposed-form: 定数、決まりの頭文字
  • view Dispaly Name: (例:zhong_wen)ビューを作成するときにつけられたシステム名
    • dsm($form_state['view']['name'])で確認できます
  • Page Name:(例:cn_page)ビューを作成したときに、そのページのシステム名(高度な設定にある「システム内部名称」)
    • dsm($form_state['view']['current_display'])で確認できます
  • すべての名前にあるアンダーバー('_')をハイフン('-')に変更します
    Drupalのモジュール(Viuews)のExporsed FilterのフォームIDの命名規則と確認
  • 上記例の名前でExposed FilterのフォームIDは: views-exposed-form-zhong-wen-cn-page となります
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
views

やりたいこと:モジュール(Views)のExposed FilterのフォームIDの確認、取得

  • ViewsのExposed Filterのクライアント側でJavascriptで入力データを加工したりして、「適応」ボタンが押されたときに入力データをチェックしたりする場合、フォームIDなどが必要となります
  • ブラウザのプロパティでViewsのExposed FilterのフォームIDを確認することができますが、Viewsの表示名が変わったら、フォームIDも変わりますので、汎用性が欠けています。

ViewsのExposed FilterのフォームIDは: "views-exposed-form" + View Display Name + Page Name

  • モジュール(Devel)のdsm($form_state['view'])で確認すれば、Exposed FilterのフォームIDの命名規則が分かります: views-exposed-form + View Display Name + Page Name
    • 各名前の間にハイフンで連結します
  • views-exposed-form: 定数、決まりの頭文字
  • view Dispaly Name: (例:zhong_wen)ビューを作成するときにつけられたシステム名
    • dsm($form_state['view']['name'])で確認できます
  • Page Name:(例:cn_page)ビューを作成したときに、そのページのシステム名(高度な設定にある「システム内部名称」)
    • dsm($form_state['view']['current_display'])で確認できます
  • すべての名前にあるアンダーバー('_')をハイフン('-')に変更します
    Drupalのモジュール(Viuews)のExporsed FilterのフォームIDの命名規則と確認
  • 上記例の名前でExposed FilterのフォームIDは: views-exposed-form-zhong-wen-cn-page となります
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
views

やりたいこと:モジュール(Views)のExposed FilterのフォームIDの確認、取得

  • ViewsのExposed Filterのクライアント側でJavascriptで入力データを加工したりして、「適応」ボタンが押されたときに入力データをチェックしたりする場合、フォームIDなどが必要となります
  • ブラウザのプロパティでViewsのExposed FilterのフォームIDを確認することができますが、Viewsの表示名が変わったら、フォームIDも変わりますので、汎用性が欠けています。

ViewsのExposed FilterのフォームIDは: "views-exposed-form" + View Display Name + Page Name

  • モジュール(Devel)のdsm($form_state['view'])で確認すれば、Exposed FilterのフォームIDの命名規則が分かります: views-exposed-form + View Display Name + Page Name
    • 各名前の間にハイフンで連結します
  • views-exposed-form: 定数、決まりの頭文字
  • view Dispaly Name: (例:zhong_wen)ビューを作成するときにつけられたシステム名
    • dsm($form_state['view']['name'])で確認できます
  • Page Name:(例:cn_page)ビューを作成したときに、そのページのシステム名(高度な設定にある「システム内部名称」)
    • dsm($form_state['view']['current_display'])で確認できます
  • すべての名前にあるアンダーバー('_')をハイフン('-')に変更します
    Drupalのモジュール(Viuews)のExporsed FilterのフォームIDの命名規則と確認
  • 上記例の名前でExposed FilterのフォームIDは: views-exposed-form-zhong-wen-cn-page となります
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
views

やりたいこと:モジュール(Views)のExposed FilterのフォームIDの確認、取得

  • ViewsのExposed Filterのクライアント側でJavascriptで入力データを加工したりして、「適応」ボタンが押されたときに入力データをチェックしたりする場合、フォームIDなどが必要となります
  • ブラウザのプロパティでViewsのExposed FilterのフォームIDを確認することができますが、Viewsの表示名が変わったら、フォームIDも変わりますので、汎用性が欠けています。

ViewsのExposed FilterのフォームIDは: "views-exposed-form" + View Display Name + Page Name

  • モジュール(Devel)のdsm($form_state['view'])で確認すれば、Exposed FilterのフォームIDの命名規則が分かります: views-exposed-form + View Display Name + Page Name
    • 各名前の間にハイフンで連結します
  • views-exposed-form: 定数、決まりの頭文字
  • view Dispaly Name: (例:zhong_wen)ビューを作成するときにつけられたシステム名
    • dsm($form_state['view']['name'])で確認できます
  • Page Name:(例:cn_page)ビューを作成したときに、そのページのシステム名(高度な設定にある「システム内部名称」)
    • dsm($form_state['view']['current_display'])で確認できます
  • すべての名前にあるアンダーバー('_')をハイフン('-')に変更します
    Drupalのモジュール(Viuews)のExporsed FilterのフォームIDの命名規則と確認
  • 上記例の名前でExposed FilterのフォームIDは: views-exposed-form-zhong-wen-cn-page となります
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
views

やりたいこと:モジュール(Views)のExposed FilterのフォームIDの確認、取得

  • ViewsのExposed Filterのクライアント側でJavascriptで入力データを加工したりして、「適応」ボタンが押されたときに入力データをチェックしたりする場合、フォームIDなどが必要となります
  • ブラウザのプロパティでViewsのExposed FilterのフォームIDを確認することができますが、Viewsの表示名が変わったら、フォームIDも変わりますので、汎用性が欠けています。

ViewsのExposed FilterのフォームIDは: "views-exposed-form" + View Display Name + Page Name

  • モジュール(Devel)のdsm($form_state['view'])で確認すれば、Exposed FilterのフォームIDの命名規則が分かります: views-exposed-form + View Display Name + Page Name
    • 各名前の間にハイフンで連結します
  • views-exposed-form: 定数、決まりの頭文字
  • view Dispaly Name: (例:zhong_wen)ビューを作成するときにつけられたシステム名
    • dsm($form_state['view']['name'])で確認できます
  • Page Name:(例:cn_page)ビューを作成したときに、そのページのシステム名(高度な設定にある「システム内部名称」)
    • dsm($form_state['view']['current_display'])で確認できます
  • すべての名前にあるアンダーバー('_')をハイフン('-')に変更します
    Drupalのモジュール(Viuews)のExporsed FilterのフォームIDの命名規則と確認
  • 上記例の名前でExposed FilterのフォームIDは: views-exposed-form-zhong-wen-cn-page となります
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
views

やりたいこと:モジュール(Views)のExposed FilterのフォームIDの確認、取得

  • ViewsのExposed Filterのクライアント側でJavascriptで入力データを加工したりして、「適応」ボタンが押されたときに入力データをチェックしたりする場合、フォームIDなどが必要となります
  • ブラウザのプロパティでViewsのExposed FilterのフォームIDを確認することができますが、Viewsの表示名が変わったら、フォームIDも変わりますので、汎用性が欠けています。

ViewsのExposed FilterのフォームIDは: "views-exposed-form" + View Display Name + Page Name

  • モジュール(Devel)のdsm($form_state['view'])で確認すれば、Exposed FilterのフォームIDの命名規則が分かります: views-exposed-form + View Display Name + Page Name
    • 各名前の間にハイフンで連結します
  • views-exposed-form: 定数、決まりの頭文字
  • view Dispaly Name: (例:zhong_wen)ビューを作成するときにつけられたシステム名
    • dsm($form_state['view']['name'])で確認できます
  • Page Name:(例:cn_page)ビューを作成したときに、そのページのシステム名(高度な設定にある「システム内部名称」)
    • dsm($form_state['view']['current_display'])で確認できます
  • すべての名前にあるアンダーバー('_')をハイフン('-')に変更します
    Drupalのモジュール(Viuews)のExporsed FilterのフォームIDの命名規則と確認
  • 上記例の名前でExposed FilterのフォームIDは: views-exposed-form-zhong-wen-cn-page となります
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
views

やりたいこと:モジュール(Views)のExposed FilterのフォームIDの確認、取得

  • ViewsのExposed Filterのクライアント側でJavascriptで入力データを加工したりして、「適応」ボタンが押されたときに入力データをチェックしたりする場合、フォームIDなどが必要となります
  • ブラウザのプロパティでViewsのExposed FilterのフォームIDを確認することができますが、Viewsの表示名が変わったら、フォームIDも変わりますので、汎用性が欠けています。

ViewsのExposed FilterのフォームIDは: "views-exposed-form" + View Display Name + Page Name

  • モジュール(Devel)のdsm($form_state['view'])で確認すれば、Exposed FilterのフォームIDの命名規則が分かります: views-exposed-form + View Display Name + Page Name
    • 各名前の間にハイフンで連結します
  • views-exposed-form: 定数、決まりの頭文字
  • view Dispaly Name: (例:zhong_wen)ビューを作成するときにつけられたシステム名
    • dsm($form_state['view']['name'])で確認できます
  • Page Name:(例:cn_page)ビューを作成したときに、そのページのシステム名(高度な設定にある「システム内部名称」)
    • dsm($form_state['view']['current_display'])で確認できます
  • すべての名前にあるアンダーバー('_')をハイフン('-')に変更します
    Drupalのモジュール(Viuews)のExporsed FilterのフォームIDの命名規則と確認
  • 上記例の名前でExposed FilterのフォームIDは: views-exposed-form-zhong-wen-cn-page となります
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
views

やりたいこと:モジュール(Views)のExposed FilterのフォームIDの確認、取得

  • ViewsのExposed Filterのクライアント側でJavascriptで入力データを加工したりして、「適応」ボタンが押されたときに入力データをチェックしたりする場合、フォームIDなどが必要となります
  • ブラウザのプロパティでViewsのExposed FilterのフォームIDを確認することができますが、Viewsの表示名が変わったら、フォームIDも変わりますので、汎用性が欠けています。

ViewsのExposed FilterのフォームIDは: "views-exposed-form" + View Display Name + Page Name

  • モジュール(Devel)のdsm($form_state['view'])で確認すれば、Exposed FilterのフォームIDの命名規則が分かります: views-exposed-form + View Display Name + Page Name
    • 各名前の間にハイフンで連結します
  • views-exposed-form: 定数、決まりの頭文字
  • view Dispaly Name: (例:zhong_wen)ビューを作成するときにつけられたシステム名
    • dsm($form_state['view']['name'])で確認できます
  • Page Name:(例:cn_page)ビューを作成したときに、そのページのシステム名(高度な設定にある「システム内部名称」)
    • dsm($form_state['view']['current_display'])で確認できます
  • すべての名前にあるアンダーバー('_')をハイフン('-')に変更します
    Drupalのモジュール(Viuews)のExporsed FilterのフォームIDの命名規則と確認
  • 上記例の名前でExposed FilterのフォームIDは: views-exposed-form-zhong-wen-cn-page となります
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
views

やりたいこと:モジュール(Views)のExposed FilterのフォームIDの確認、取得

  • ViewsのExposed Filterのクライアント側でJavascriptで入力データを加工したりして、「適応」ボタンが押されたときに入力データをチェックしたりする場合、フォームIDなどが必要となります
  • ブラウザのプロパティでViewsのExposed FilterのフォームIDを確認することができますが、Viewsの表示名が変わったら、フォームIDも変わりますので、汎用性が欠けています。

ViewsのExposed FilterのフォームIDは: "views-exposed-form" + View Display Name + Page Name

  • モジュール(Devel)のdsm($form_state['view'])で確認すれば、Exposed FilterのフォームIDの命名規則が分かります: views-exposed-form + View Display Name + Page Name
    • 各名前の間にハイフンで連結します
  • views-exposed-form: 定数、決まりの頭文字
  • view Dispaly Name: (例:zhong_wen)ビューを作成するときにつけられたシステム名
    • dsm($form_state['view']['name'])で確認できます
  • Page Name:(例:cn_page)ビューを作成したときに、そのページのシステム名(高度な設定にある「システム内部名称」)
    • dsm($form_state['view']['current_display'])で確認できます
  • すべての名前にあるアンダーバー('_')をハイフン('-')に変更します
    Drupalのモジュール(Viuews)のExporsed FilterのフォームIDの命名規則と確認
  • 上記例の名前でExposed FilterのフォームIDは: views-exposed-form-zhong-wen-cn-page となります
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
views

やりたいこと:モジュール(Views)のExposed FilterのフォームIDの確認、取得

  • ViewsのExposed Filterのクライアント側でJavascriptで入力データを加工したりして、「適応」ボタンが押されたときに入力データをチェックしたりする場合、フォームIDなどが必要となります
  • ブラウザのプロパティでViewsのExposed FilterのフォームIDを確認することができますが、Viewsの表示名が変わったら、フォームIDも変わりますので、汎用性が欠けています。

ViewsのExposed FilterのフォームIDは: "views-exposed-form" + View Display Name + Page Name

  • モジュール(Devel)のdsm($form_state['view'])で確認すれば、Exposed FilterのフォームIDの命名規則が分かります: views-exposed-form + View Display Name + Page Name
    • 各名前の間にハイフンで連結します
  • views-exposed-form: 定数、決まりの頭文字
  • view Dispaly Name: (例:zhong_wen)ビューを作成するときにつけられたシステム名
    • dsm($form_state['view']['name'])で確認できます
  • Page Name:(例:cn_page)ビューを作成したときに、そのページのシステム名(高度な設定にある「システム内部名称」)
    • dsm($form_state['view']['current_display'])で確認できます
  • すべての名前にあるアンダーバー('_')をハイフン('-')に変更します
    Drupalのモジュール(Viuews)のExporsed FilterのフォームIDの命名規則と確認
  • 上記例の名前でExposed FilterのフォームIDは: views-exposed-form-zhong-wen-cn-page となります
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
views

やりたいこと:モジュール(Views)のExposed FilterのフォームIDの確認、取得

  • ViewsのExposed Filterのクライアント側でJavascriptで入力データを加工したりして、「適応」ボタンが押されたときに入力データをチェックしたりする場合、フォームIDなどが必要となります
  • ブラウザのプロパティでViewsのExposed FilterのフォームIDを確認することができますが、Viewsの表示名が変わったら、フォームIDも変わりますので、汎用性が欠けています。

ViewsのExposed FilterのフォームIDは: "views-exposed-form" + View Display Name + Page Name

  • モジュール(Devel)のdsm($form_state['view'])で確認すれば、Exposed FilterのフォームIDの命名規則が分かります: views-exposed-form + View Display Name + Page Name
    • 各名前の間にハイフンで連結します
  • views-exposed-form: 定数、決まりの頭文字
  • view Dispaly Name: (例:zhong_wen)ビューを作成するときにつけられたシステム名
    • dsm($form_state['view']['name'])で確認できます
  • Page Name:(例:cn_page)ビューを作成したときに、そのページのシステム名(高度な設定にある「システム内部名称」)
    • dsm($form_state['view']['current_display'])で確認できます
  • すべての名前にあるアンダーバー('_')をハイフン('-')に変更します
    Drupalのモジュール(Viuews)のExporsed FilterのフォームIDの命名規則と確認
  • 上記例の名前でExposed FilterのフォームIDは: views-exposed-form-zhong-wen-cn-page となります
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
views

やりたいこと:モジュール(Views)のExposed FilterのフォームIDの確認、取得

  • ViewsのExposed Filterのクライアント側でJavascriptで入力データを加工したりして、「適応」ボタンが押されたときに入力データをチェックしたりする場合、フォームIDなどが必要となります
  • ブラウザのプロパティでViewsのExposed FilterのフォームIDを確認することができますが、Viewsの表示名が変わったら、フォームIDも変わりますので、汎用性が欠けています。

ViewsのExposed FilterのフォームIDは: "views-exposed-form" + View Display Name + Page Name

  • モジュール(Devel)のdsm($form_state['view'])で確認すれば、Exposed FilterのフォームIDの命名規則が分かります: views-exposed-form + View Display Name + Page Name
    • 各名前の間にハイフンで連結します
  • views-exposed-form: 定数、決まりの頭文字
  • view Dispaly Name: (例:zhong_wen)ビューを作成するときにつけられたシステム名
    • dsm($form_state['view']['name'])で確認できます
  • Page Name:(例:cn_page)ビューを作成したときに、そのページのシステム名(高度な設定にある「システム内部名称」)
    • dsm($form_state['view']['current_display'])で確認できます
  • すべての名前にあるアンダーバー('_')をハイフン('-')に変更します
    Drupalのモジュール(Viuews)のExporsed FilterのフォームIDの命名規則と確認
  • 上記例の名前でExposed FilterのフォームIDは: views-exposed-form-zhong-wen-cn-page となります
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
views

やりたいこと:モジュール(Views)のExposed FilterのフォームIDの確認、取得

  • ViewsのExposed Filterのクライアント側でJavascriptで入力データを加工したりして、「適応」ボタンが押されたときに入力データをチェックしたりする場合、フォームIDなどが必要となります
  • ブラウザのプロパティでViewsのExposed FilterのフォームIDを確認することができますが、Viewsの表示名が変わったら、フォームIDも変わりますので、汎用性が欠けています。

ViewsのExposed FilterのフォームIDは: "views-exposed-form" + View Display Name + Page Name

  • モジュール(Devel)のdsm($form_state['view'])で確認すれば、Exposed FilterのフォームIDの命名規則が分かります: views-exposed-form + View Display Name + Page Name
    • 各名前の間にハイフンで連結します
  • views-exposed-form: 定数、決まりの頭文字
  • view Dispaly Name: (例:zhong_wen)ビューを作成するときにつけられたシステム名
    • dsm($form_state['view']['name'])で確認できます
  • Page Name:(例:cn_page)ビューを作成したときに、そのページのシステム名(高度な設定にある「システム内部名称」)
    • dsm($form_state['view']['current_display'])で確認できます
  • すべての名前にあるアンダーバー('_')をハイフン('-')に変更します
    Drupalのモジュール(Viuews)のExporsed FilterのフォームIDの命名規則と確認
  • 上記例の名前でExposed FilterのフォームIDは: views-exposed-form-zhong-wen-cn-page となります
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
views

やりたいこと:モジュール(Views)のExposed FilterのフォームIDの確認、取得

  • ViewsのExposed Filterのクライアント側でJavascriptで入力データを加工したりして、「適応」ボタンが押されたときに入力データをチェックしたりする場合、フォームIDなどが必要となります
  • ブラウザのプロパティでViewsのExposed FilterのフォームIDを確認することができますが、Viewsの表示名が変わったら、フォームIDも変わりますので、汎用性が欠けています。

ViewsのExposed FilterのフォームIDは: "views-exposed-form" + View Display Name + Page Name

  • モジュール(Devel)のdsm($form_state['view'])で確認すれば、Exposed FilterのフォームIDの命名規則が分かります: views-exposed-form + View Display Name + Page Name
    • 各名前の間にハイフンで連結します
  • views-exposed-form: 定数、決まりの頭文字
  • view Dispaly Name: (例:zhong_wen)ビューを作成するときにつけられたシステム名
    • dsm($form_state['view']['name'])で確認できます
  • Page Name:(例:cn_page)ビューを作成したときに、そのページのシステム名(高度な設定にある「システム内部名称」)
    • dsm($form_state['view']['current_display'])で確認できます
  • すべての名前にあるアンダーバー('_')をハイフン('-')に変更します
    Drupalのモジュール(Viuews)のExporsed FilterのフォームIDの命名規則と確認
  • 上記例の名前でExposed FilterのフォームIDは: views-exposed-form-zhong-wen-cn-page となります
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
views

やりたいこと:モジュール(Views)のExposed FilterのフォームIDの確認、取得

  • ViewsのExposed Filterのクライアント側でJavascriptで入力データを加工したりして、「適応」ボタンが押されたときに入力データをチェックしたりする場合、フォームIDなどが必要となります
  • ブラウザのプロパティでViewsのExposed FilterのフォームIDを確認することができますが、Viewsの表示名が変わったら、フォームIDも変わりますので、汎用性が欠けています。

ViewsのExposed FilterのフォームIDは: "views-exposed-form" + View Display Name + Page Name

  • モジュール(Devel)のdsm($form_state['view'])で確認すれば、Exposed FilterのフォームIDの命名規則が分かります: views-exposed-form + View Display Name + Page Name
    • 各名前の間にハイフンで連結します
  • views-exposed-form: 定数、決まりの頭文字
  • view Dispaly Name: (例:zhong_wen)ビューを作成するときにつけられたシステム名
    • dsm($form_state['view']['name'])で確認できます
  • Page Name:(例:cn_page)ビューを作成したときに、そのページのシステム名(高度な設定にある「システム内部名称」)
    • dsm($form_state['view']['current_display'])で確認できます
  • すべての名前にあるアンダーバー('_')をハイフン('-')に変更します
    Drupalのモジュール(Viuews)のExporsed FilterのフォームIDの命名規則と確認
  • 上記例の名前でExposed FilterのフォームIDは: views-exposed-form-zhong-wen-cn-page となります
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
views

やりたいこと:モジュール(Views)のExposed FilterのフォームIDの確認、取得

  • ViewsのExposed Filterのクライアント側でJavascriptで入力データを加工したりして、「適応」ボタンが押されたときに入力データをチェックしたりする場合、フォームIDなどが必要となります
  • ブラウザのプロパティでViewsのExposed FilterのフォームIDを確認することができますが、Viewsの表示名が変わったら、フォームIDも変わりますので、汎用性が欠けています。

ViewsのExposed FilterのフォームIDは: "views-exposed-form" + View Display Name + Page Name

  • モジュール(Devel)のdsm($form_state['view'])で確認すれば、Exposed FilterのフォームIDの命名規則が分かります: views-exposed-form + View Display Name + Page Name
    • 各名前の間にハイフンで連結します
  • views-exposed-form: 定数、決まりの頭文字
  • view Dispaly Name: (例:zhong_wen)ビューを作成するときにつけられたシステム名
    • dsm($form_state['view']['name'])で確認できます
  • Page Name:(例:cn_page)ビューを作成したときに、そのページのシステム名(高度な設定にある「システム内部名称」)
    • dsm($form_state['view']['current_display'])で確認できます
  • すべての名前にあるアンダーバー('_')をハイフン('-')に変更します
    Drupalのモジュール(Viuews)のExporsed FilterのフォームIDの命名規則と確認
  • 上記例の名前でExposed FilterのフォームIDは: views-exposed-form-zhong-wen-cn-page となります
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
views

やりたいこと:モジュール(Views)のExposed FilterのフォームIDの確認、取得

  • ViewsのExposed Filterのクライアント側でJavascriptで入力データを加工したりして、「適応」ボタンが押されたときに入力データをチェックしたりする場合、フォームIDなどが必要となります
  • ブラウザのプロパティでViewsのExposed FilterのフォームIDを確認することができますが、Viewsの表示名が変わったら、フォームIDも変わりますので、汎用性が欠けています。

ViewsのExposed FilterのフォームIDは: "views-exposed-form" + View Display Name + Page Name

  • モジュール(Devel)のdsm($form_state['view'])で確認すれば、Exposed FilterのフォームIDの命名規則が分かります: views-exposed-form + View Display Name + Page Name
    • 各名前の間にハイフンで連結します
  • views-exposed-form: 定数、決まりの頭文字
  • view Dispaly Name: (例:zhong_wen)ビューを作成するときにつけられたシステム名
    • dsm($form_state['view']['name'])で確認できます
  • Page Name:(例:cn_page)ビューを作成したときに、そのページのシステム名(高度な設定にある「システム内部名称」)
    • dsm($form_state['view']['current_display'])で確認できます
  • すべての名前にあるアンダーバー('_')をハイフン('-')に変更します
    Drupalのモジュール(Viuews)のExporsed FilterのフォームIDの命名規則と確認
  • 上記例の名前でExposed FilterのフォームIDは: views-exposed-form-zhong-wen-cn-page となります
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
views

やりたいこと:モジュール(Views)のExposed FilterのフォームIDの確認、取得

  • ViewsのExposed Filterのクライアント側でJavascriptで入力データを加工したりして、「適応」ボタンが押されたときに入力データをチェックしたりする場合、フォームIDなどが必要となります
  • ブラウザのプロパティでViewsのExposed FilterのフォームIDを確認することができますが、Viewsの表示名が変わったら、フォームIDも変わりますので、汎用性が欠けています。

ViewsのExposed FilterのフォームIDは: "views-exposed-form" + View Display Name + Page Name

  • モジュール(Devel)のdsm($form_state['view'])で確認すれば、Exposed FilterのフォームIDの命名規則が分かります: views-exposed-form + View Display Name + Page Name
    • 各名前の間にハイフンで連結します
  • views-exposed-form: 定数、決まりの頭文字
  • view Dispaly Name: (例:zhong_wen)ビューを作成するときにつけられたシステム名
    • dsm($form_state['view']['name'])で確認できます
  • Page Name:(例:cn_page)ビューを作成したときに、そのページのシステム名(高度な設定にある「システム内部名称」)
    • dsm($form_state['view']['current_display'])で確認できます
  • すべての名前にあるアンダーバー('_')をハイフン('-')に変更します
    Drupalのモジュール(Viuews)のExporsed FilterのフォームIDの命名規則と確認
  • 上記例の名前でExposed FilterのフォームIDは: views-exposed-form-zhong-wen-cn-page となります
drupal
customization
Views

やりたいこと:モジュール(Views)で複数の文字列を完全一致検索したい

  • 環境:Drupal7.54、Views7.x-3.15
  • モジュール(Views)の文字列検索フィルダーの検索オプション:「含む」があります
    • これは文字の含み検索となります
    • 複数のキーワードがあった場合、or条件で含み検索を行います
  • 実現したいことは:複数のキーワード + 各キーワードの完全一致検索 + OR検索条件
    • 例:「午前 午後」のキーワードを入力します
    • コンテンツタイトル:「午前」と「午後」を完全一致のコンテンツを取得します
  • Viewsの既存機能ではこの検索ができないです

カスタマイズ:モジュール(Views)の複数文字列検索変更の計画

  • Viewsの既存文字検索機能をそのままにして、以下の点を追加します
    • 複数のキーワード(カンマ/空白スペース/改行などで区切り)を切り出して、INオペレーターで完全一致検索(例:select * from node where node.title IN ('午前', '午後') )
    • キーワード入力フォームはテキストフィールドからテキストエリアに変更
      DrupalのViewsのテキスト検索フォームをテキストフィールドからテキストエリアに変更
  • モジュールAPI(Views API)より、Viewsへのプラグインを作成することになりました

DrupalのモジュールAPI(Views API)より文字列検索ハンドルをカスタマイズします

  • モジュールViewsAPIよりいろいろな既存な機能をカスタマイズすることが可能です
  • 今回は文字列検索部分のカスタマイズを行います
    • 既存のハンドル:views_handler_filter_stringを継承して、カスタマイズします
  • ステップ1:ViewsAPIの使用宣言(カスタムモジュール内で)
    /**
     * Implements hook_views_api().
     */
    function my_module_views_api() {
      return array(
        'api' => 3,
      );
    }
  • ステップ2:「hook_views_data_alter」を実装して、新しいフィルダーの作成
    /**
     * Implements hook_views_data_alter().
     */
    function my_module_views_data_alter(&$data) {
      $data['node']['title_count']['title_multiple'] = 'Title multiple wrods';
      $data['node']['title_count']['help_multiple'] = 'Filter multiple words with or operation in Title field';
      $data['node']['title_count']['filter_multiple']['handler'] = 'my_module_handler_filter_multiple_word';
    }
  • ステップ3:カスタムクラス作成のファイルを定義します
    • 定義はモジュールのinfoファイルで行います
    • 定義:
      ; Views handlers
      files[]=views/my_module_handler_filter_multiple_word.inc
      
  • ステップ4:定義されたファイル内でカスタムクラスを作成し、「views_handler_filter_string」を継承して、新規フィルダーの入力フォームをテキストエリアに変更、複数のキーワードを切り出して、ノードの「Title」完全一致検索するロジックの作成
    class my_module_filter_multiple_word_handler extends views_handler_filter_string{
        function operators(){
            $operators = parent::operators();
    
            $operators['multiple word match'] = array(
                'title' => t('Match multiple words'),
                'short' => t('has multiple'),
                'method' => 'op_word',
                'values' => 1,
    
            );
            return $operators;
        }
    
        function op_word($field) {
            $where = $this->operator == 'word' ? db_or() : db_and();
    
            // Don't filter on empty strings.
            if (empty($this->value)) {
                return;
            }
    
            $matches = $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', $this->value);
            if( empty($matches) ) return ;
            if( $matches[0]=="" ) unset($matches[0]);
            $where->condition("node.title", $matches, 'IN');
    
            if (!$where) {
                return;
            }
    
            // previously this was a call_user_func_array but that's unnecessary
            // as views will unpack an array that is a single arg.
            $this->query->add_where($this->options['group'], $where);
        }
    
        /**
         * Provide a simple textarea for equality
         */
        function value_form(&$form, &$form_state) {
            // We have to make some choices when creating this as an exposed
            // filter form. For example, if the operator is locked and thus
            // not rendered, we can't render dependencies; instead we only
            // render the form items we need.
            $which = 'all';
            if (!empty($form['operator'])) {
                $source = ($form['operator']['#type'] == 'radios') ? 'radio:options[operator]' : 'edit-options-operator';
            }
            if (!empty($form_state['exposed'])) {
                $identifier = $this->options['expose']['identifier'];
    
                if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
                    // exposed and locked.
                    $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none';
                }
                else {
                    $source = 'edit-' . drupal_html_id($this->options['expose']['operator_id']);
                }
            }
    
            if ($which == 'all' || $which == 'value') {
                $form['value'] = array(
                    '#type' => 'textarea',
                    '#title' => t('Value'),
                    '#rows' => 10,
                    '#resizable' => TRUE,
                    '#default_value' => $this->value,
                );
                if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
                    $form_state['input'][$identifier] = $this->value;
                }
    
                if ($which == 'all') {
                    $form['value'] += array(
                        '#dependency' => array($source => $this->operator_values(1)),
                    );
                }
            }
    
            if (!isset($form['value'])) {
                // Ensure there is something in the 'value'.
                $form['value'] = array(
                    '#type' => 'value',
                    '#value' => NULL
                );
            }
        }
    
    }
    • ここでは、「value_form」、「op_word」メッソードが親クラス(views_handler_filter_string)のものをオーバーライドします
  • Drupalサイトのキャッシュをクリアして、Viewsの管理画面のフィルダー選択肢に新規複数完全一致検査フィルダーが現れます
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
Views

やりたいこと:モジュール(Views)で複数の文字列を完全一致検索したい

  • 環境:Drupal7.54、Views7.x-3.15
  • モジュール(Views)の文字列検索フィルダーの検索オプション:「含む」があります
    • これは文字の含み検索となります
    • 複数のキーワードがあった場合、or条件で含み検索を行います
  • 実現したいことは:複数のキーワード + 各キーワードの完全一致検索 + OR検索条件
    • 例:「午前 午後」のキーワードを入力します
    • コンテンツタイトル:「午前」と「午後」を完全一致のコンテンツを取得します
  • Viewsの既存機能ではこの検索ができないです

カスタマイズ:モジュール(Views)の複数文字列検索変更の計画

  • Viewsの既存文字検索機能をそのままにして、以下の点を追加します
    • 複数のキーワード(カンマ/空白スペース/改行などで区切り)を切り出して、INオペレーターで完全一致検索(例:select * from node where node.title IN ('午前', '午後') )
    • キーワード入力フォームはテキストフィールドからテキストエリアに変更
      DrupalのViewsのテキスト検索フォームをテキストフィールドからテキストエリアに変更
  • モジュールAPI(Views API)より、Viewsへのプラグインを作成することになりました

DrupalのモジュールAPI(Views API)より文字列検索ハンドルをカスタマイズします

  • モジュールViewsAPIよりいろいろな既存な機能をカスタマイズすることが可能です
  • 今回は文字列検索部分のカスタマイズを行います
    • 既存のハンドル:views_handler_filter_stringを継承して、カスタマイズします
  • ステップ1:ViewsAPIの使用宣言(カスタムモジュール内で)
    /**
     * Implements hook_views_api().
     */
    function my_module_views_api() {
      return array(
        'api' => 3,
      );
    }
  • ステップ2:「hook_views_data_alter」を実装して、新しいフィルダーの作成
    /**
     * Implements hook_views_data_alter().
     */
    function my_module_views_data_alter(&$data) {
      $data['node']['title_count']['title_multiple'] = 'Title multiple wrods';
      $data['node']['title_count']['help_multiple'] = 'Filter multiple words with or operation in Title field';
      $data['node']['title_count']['filter_multiple']['handler'] = 'my_module_handler_filter_multiple_word';
    }
  • ステップ3:カスタムクラス作成のファイルを定義します
    • 定義はモジュールのinfoファイルで行います
    • 定義:
      ; Views handlers
      files[]=views/my_module_handler_filter_multiple_word.inc
      
  • ステップ4:定義されたファイル内でカスタムクラスを作成し、「views_handler_filter_string」を継承して、新規フィルダーの入力フォームをテキストエリアに変更、複数のキーワードを切り出して、ノードの「Title」完全一致検索するロジックの作成
    class my_module_filter_multiple_word_handler extends views_handler_filter_string{
        function operators(){
            $operators = parent::operators();
    
            $operators['multiple word match'] = array(
                'title' => t('Match multiple words'),
                'short' => t('has multiple'),
                'method' => 'op_word',
                'values' => 1,
    
            );
            return $operators;
        }
    
        function op_word($field) {
            $where = $this->operator == 'word' ? db_or() : db_and();
    
            // Don't filter on empty strings.
            if (empty($this->value)) {
                return;
            }
    
            $matches = $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', $this->value);
            if( empty($matches) ) return ;
            if( $matches[0]=="" ) unset($matches[0]);
            $where->condition("node.title", $matches, 'IN');
    
            if (!$where) {
                return;
            }
    
            // previously this was a call_user_func_array but that's unnecessary
            // as views will unpack an array that is a single arg.
            $this->query->add_where($this->options['group'], $where);
        }
    
        /**
         * Provide a simple textarea for equality
         */
        function value_form(&$form, &$form_state) {
            // We have to make some choices when creating this as an exposed
            // filter form. For example, if the operator is locked and thus
            // not rendered, we can't render dependencies; instead we only
            // render the form items we need.
            $which = 'all';
            if (!empty($form['operator'])) {
                $source = ($form['operator']['#type'] == 'radios') ? 'radio:options[operator]' : 'edit-options-operator';
            }
            if (!empty($form_state['exposed'])) {
                $identifier = $this->options['expose']['identifier'];
    
                if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
                    // exposed and locked.
                    $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none';
                }
                else {
                    $source = 'edit-' . drupal_html_id($this->options['expose']['operator_id']);
                }
            }
    
            if ($which == 'all' || $which == 'value') {
                $form['value'] = array(
                    '#type' => 'textarea',
                    '#title' => t('Value'),
                    '#rows' => 10,
                    '#resizable' => TRUE,
                    '#default_value' => $this->value,
                );
                if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
                    $form_state['input'][$identifier] = $this->value;
                }
    
                if ($which == 'all') {
                    $form['value'] += array(
                        '#dependency' => array($source => $this->operator_values(1)),
                    );
                }
            }
    
            if (!isset($form['value'])) {
                // Ensure there is something in the 'value'.
                $form['value'] = array(
                    '#type' => 'value',
                    '#value' => NULL
                );
            }
        }
    
    }
    • ここでは、「value_form」、「op_word」メッソードが親クラス(views_handler_filter_string)のものをオーバーライドします
  • Drupalサイトのキャッシュをクリアして、Viewsの管理画面のフィルダー選択肢に新規複数完全一致検査フィルダーが現れます
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
Views

やりたいこと:モジュール(Views)で複数の文字列を完全一致検索したい

  • 環境:Drupal7.54、Views7.x-3.15
  • モジュール(Views)の文字列検索フィルダーの検索オプション:「含む」があります
    • これは文字の含み検索となります
    • 複数のキーワードがあった場合、or条件で含み検索を行います
  • 実現したいことは:複数のキーワード + 各キーワードの完全一致検索 + OR検索条件
    • 例:「午前 午後」のキーワードを入力します
    • コンテンツタイトル:「午前」と「午後」を完全一致のコンテンツを取得します
  • Viewsの既存機能ではこの検索ができないです

カスタマイズ:モジュール(Views)の複数文字列検索変更の計画

  • Viewsの既存文字検索機能をそのままにして、以下の点を追加します
    • 複数のキーワード(カンマ/空白スペース/改行などで区切り)を切り出して、INオペレーターで完全一致検索(例:select * from node where node.title IN ('午前', '午後') )
    • キーワード入力フォームはテキストフィールドからテキストエリアに変更
      DrupalのViewsのテキスト検索フォームをテキストフィールドからテキストエリアに変更
  • モジュールAPI(Views API)より、Viewsへのプラグインを作成することになりました

DrupalのモジュールAPI(Views API)より文字列検索ハンドルをカスタマイズします

  • モジュールViewsAPIよりいろいろな既存な機能をカスタマイズすることが可能です
  • 今回は文字列検索部分のカスタマイズを行います
    • 既存のハンドル:views_handler_filter_stringを継承して、カスタマイズします
  • ステップ1:ViewsAPIの使用宣言(カスタムモジュール内で)
    /**
     * Implements hook_views_api().
     */
    function my_module_views_api() {
      return array(
        'api' => 3,
      );
    }
  • ステップ2:「hook_views_data_alter」を実装して、新しいフィルダーの作成
    /**
     * Implements hook_views_data_alter().
     */
    function my_module_views_data_alter(&$data) {
      $data['node']['title_count']['title_multiple'] = 'Title multiple wrods';
      $data['node']['title_count']['help_multiple'] = 'Filter multiple words with or operation in Title field';
      $data['node']['title_count']['filter_multiple']['handler'] = 'my_module_handler_filter_multiple_word';
    }
  • ステップ3:カスタムクラス作成のファイルを定義します
    • 定義はモジュールのinfoファイルで行います
    • 定義:
      ; Views handlers
      files[]=views/my_module_handler_filter_multiple_word.inc
      
  • ステップ4:定義されたファイル内でカスタムクラスを作成し、「views_handler_filter_string」を継承して、新規フィルダーの入力フォームをテキストエリアに変更、複数のキーワードを切り出して、ノードの「Title」完全一致検索するロジックの作成
    class my_module_filter_multiple_word_handler extends views_handler_filter_string{
        function operators(){
            $operators = parent::operators();
    
            $operators['multiple word match'] = array(
                'title' => t('Match multiple words'),
                'short' => t('has multiple'),
                'method' => 'op_word',
                'values' => 1,
    
            );
            return $operators;
        }
    
        function op_word($field) {
            $where = $this->operator == 'word' ? db_or() : db_and();
    
            // Don't filter on empty strings.
            if (empty($this->value)) {
                return;
            }
    
            $matches = $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', $this->value);
            if( empty($matches) ) return ;
            if( $matches[0]=="" ) unset($matches[0]);
            $where->condition("node.title", $matches, 'IN');
    
            if (!$where) {
                return;
            }
    
            // previously this was a call_user_func_array but that's unnecessary
            // as views will unpack an array that is a single arg.
            $this->query->add_where($this->options['group'], $where);
        }
    
        /**
         * Provide a simple textarea for equality
         */
        function value_form(&$form, &$form_state) {
            // We have to make some choices when creating this as an exposed
            // filter form. For example, if the operator is locked and thus
            // not rendered, we can't render dependencies; instead we only
            // render the form items we need.
            $which = 'all';
            if (!empty($form['operator'])) {
                $source = ($form['operator']['#type'] == 'radios') ? 'radio:options[operator]' : 'edit-options-operator';
            }
            if (!empty($form_state['exposed'])) {
                $identifier = $this->options['expose']['identifier'];
    
                if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
                    // exposed and locked.
                    $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none';
                }
                else {
                    $source = 'edit-' . drupal_html_id($this->options['expose']['operator_id']);
                }
            }
    
            if ($which == 'all' || $which == 'value') {
                $form['value'] = array(
                    '#type' => 'textarea',
                    '#title' => t('Value'),
                    '#rows' => 10,
                    '#resizable' => TRUE,
                    '#default_value' => $this->value,
                );
                if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
                    $form_state['input'][$identifier] = $this->value;
                }
    
                if ($which == 'all') {
                    $form['value'] += array(
                        '#dependency' => array($source => $this->operator_values(1)),
                    );
                }
            }
    
            if (!isset($form['value'])) {
                // Ensure there is something in the 'value'.
                $form['value'] = array(
                    '#type' => 'value',
                    '#value' => NULL
                );
            }
        }
    
    }
    • ここでは、「value_form」、「op_word」メッソードが親クラス(views_handler_filter_string)のものをオーバーライドします
  • Drupalサイトのキャッシュをクリアして、Viewsの管理画面のフィルダー選択肢に新規複数完全一致検査フィルダーが現れます
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
Views

やりたいこと:モジュール(Views)で複数の文字列を完全一致検索したい

  • 環境:Drupal7.54、Views7.x-3.15
  • モジュール(Views)の文字列検索フィルダーの検索オプション:「含む」があります
    • これは文字の含み検索となります
    • 複数のキーワードがあった場合、or条件で含み検索を行います
  • 実現したいことは:複数のキーワード + 各キーワードの完全一致検索 + OR検索条件
    • 例:「午前 午後」のキーワードを入力します
    • コンテンツタイトル:「午前」と「午後」を完全一致のコンテンツを取得します
  • Viewsの既存機能ではこの検索ができないです

カスタマイズ:モジュール(Views)の複数文字列検索変更の計画

  • Viewsの既存文字検索機能をそのままにして、以下の点を追加します
    • 複数のキーワード(カンマ/空白スペース/改行などで区切り)を切り出して、INオペレーターで完全一致検索(例:select * from node where node.title IN ('午前', '午後') )
    • キーワード入力フォームはテキストフィールドからテキストエリアに変更
      DrupalのViewsのテキスト検索フォームをテキストフィールドからテキストエリアに変更
  • モジュールAPI(Views API)より、Viewsへのプラグインを作成することになりました

DrupalのモジュールAPI(Views API)より文字列検索ハンドルをカスタマイズします

  • モジュールViewsAPIよりいろいろな既存な機能をカスタマイズすることが可能です
  • 今回は文字列検索部分のカスタマイズを行います
    • 既存のハンドル:views_handler_filter_stringを継承して、カスタマイズします
  • ステップ1:ViewsAPIの使用宣言(カスタムモジュール内で)
    /**
     * Implements hook_views_api().
     */
    function my_module_views_api() {
      return array(
        'api' => 3,
      );
    }
  • ステップ2:「hook_views_data_alter」を実装して、新しいフィルダーの作成
    /**
     * Implements hook_views_data_alter().
     */
    function my_module_views_data_alter(&$data) {
      $data['node']['title_count']['title_multiple'] = 'Title multiple wrods';
      $data['node']['title_count']['help_multiple'] = 'Filter multiple words with or operation in Title field';
      $data['node']['title_count']['filter_multiple']['handler'] = 'my_module_handler_filter_multiple_word';
    }
  • ステップ3:カスタムクラス作成のファイルを定義します
    • 定義はモジュールのinfoファイルで行います
    • 定義:
      ; Views handlers
      files[]=views/my_module_handler_filter_multiple_word.inc
      
  • ステップ4:定義されたファイル内でカスタムクラスを作成し、「views_handler_filter_string」を継承して、新規フィルダーの入力フォームをテキストエリアに変更、複数のキーワードを切り出して、ノードの「Title」完全一致検索するロジックの作成
    class my_module_filter_multiple_word_handler extends views_handler_filter_string{
        function operators(){
            $operators = parent::operators();
    
            $operators['multiple word match'] = array(
                'title' => t('Match multiple words'),
                'short' => t('has multiple'),
                'method' => 'op_word',
                'values' => 1,
    
            );
            return $operators;
        }
    
        function op_word($field) {
            $where = $this->operator == 'word' ? db_or() : db_and();
    
            // Don't filter on empty strings.
            if (empty($this->value)) {
                return;
            }
    
            $matches = $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', $this->value);
            if( empty($matches) ) return ;
            if( $matches[0]=="" ) unset($matches[0]);
            $where->condition("node.title", $matches, 'IN');
    
            if (!$where) {
                return;
            }
    
            // previously this was a call_user_func_array but that's unnecessary
            // as views will unpack an array that is a single arg.
            $this->query->add_where($this->options['group'], $where);
        }
    
        /**
         * Provide a simple textarea for equality
         */
        function value_form(&$form, &$form_state) {
            // We have to make some choices when creating this as an exposed
            // filter form. For example, if the operator is locked and thus
            // not rendered, we can't render dependencies; instead we only
            // render the form items we need.
            $which = 'all';
            if (!empty($form['operator'])) {
                $source = ($form['operator']['#type'] == 'radios') ? 'radio:options[operator]' : 'edit-options-operator';
            }
            if (!empty($form_state['exposed'])) {
                $identifier = $this->options['expose']['identifier'];
    
                if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
                    // exposed and locked.
                    $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none';
                }
                else {
                    $source = 'edit-' . drupal_html_id($this->options['expose']['operator_id']);
                }
            }
    
            if ($which == 'all' || $which == 'value') {
                $form['value'] = array(
                    '#type' => 'textarea',
                    '#title' => t('Value'),
                    '#rows' => 10,
                    '#resizable' => TRUE,
                    '#default_value' => $this->value,
                );
                if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
                    $form_state['input'][$identifier] = $this->value;
                }
    
                if ($which == 'all') {
                    $form['value'] += array(
                        '#dependency' => array($source => $this->operator_values(1)),
                    );
                }
            }
    
            if (!isset($form['value'])) {
                // Ensure there is something in the 'value'.
                $form['value'] = array(
                    '#type' => 'value',
                    '#value' => NULL
                );
            }
        }
    
    }
    • ここでは、「value_form」、「op_word」メッソードが親クラス(views_handler_filter_string)のものをオーバーライドします
  • Drupalサイトのキャッシュをクリアして、Viewsの管理画面のフィルダー選択肢に新規複数完全一致検査フィルダーが現れます
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
Views

やりたいこと:モジュール(Views)で複数の文字列を完全一致検索したい

  • 環境:Drupal7.54、Views7.x-3.15
  • モジュール(Views)の文字列検索フィルダーの検索オプション:「含む」があります
    • これは文字の含み検索となります
    • 複数のキーワードがあった場合、or条件で含み検索を行います
  • 実現したいことは:複数のキーワード + 各キーワードの完全一致検索 + OR検索条件
    • 例:「午前 午後」のキーワードを入力します
    • コンテンツタイトル:「午前」と「午後」を完全一致のコンテンツを取得します
  • Viewsの既存機能ではこの検索ができないです

カスタマイズ:モジュール(Views)の複数文字列検索変更の計画

  • Viewsの既存文字検索機能をそのままにして、以下の点を追加します
    • 複数のキーワード(カンマ/空白スペース/改行などで区切り)を切り出して、INオペレーターで完全一致検索(例:select * from node where node.title IN ('午前', '午後') )
    • キーワード入力フォームはテキストフィールドからテキストエリアに変更
      DrupalのViewsのテキスト検索フォームをテキストフィールドからテキストエリアに変更
  • モジュールAPI(Views API)より、Viewsへのプラグインを作成することになりました

DrupalのモジュールAPI(Views API)より文字列検索ハンドルをカスタマイズします

  • モジュールViewsAPIよりいろいろな既存な機能をカスタマイズすることが可能です
  • 今回は文字列検索部分のカスタマイズを行います
    • 既存のハンドル:views_handler_filter_stringを継承して、カスタマイズします
  • ステップ1:ViewsAPIの使用宣言(カスタムモジュール内で)
    /**
     * Implements hook_views_api().
     */
    function my_module_views_api() {
      return array(
        'api' => 3,
      );
    }
  • ステップ2:「hook_views_data_alter」を実装して、新しいフィルダーの作成
    /**
     * Implements hook_views_data_alter().
     */
    function my_module_views_data_alter(&$data) {
      $data['node']['title_count']['title_multiple'] = 'Title multiple wrods';
      $data['node']['title_count']['help_multiple'] = 'Filter multiple words with or operation in Title field';
      $data['node']['title_count']['filter_multiple']['handler'] = 'my_module_handler_filter_multiple_word';
    }
  • ステップ3:カスタムクラス作成のファイルを定義します
    • 定義はモジュールのinfoファイルで行います
    • 定義:
      ; Views handlers
      files[]=views/my_module_handler_filter_multiple_word.inc
      
  • ステップ4:定義されたファイル内でカスタムクラスを作成し、「views_handler_filter_string」を継承して、新規フィルダーの入力フォームをテキストエリアに変更、複数のキーワードを切り出して、ノードの「Title」完全一致検索するロジックの作成
    class my_module_filter_multiple_word_handler extends views_handler_filter_string{
        function operators(){
            $operators = parent::operators();
    
            $operators['multiple word match'] = array(
                'title' => t('Match multiple words'),
                'short' => t('has multiple'),
                'method' => 'op_word',
                'values' => 1,
    
            );
            return $operators;
        }
    
        function op_word($field) {
            $where = $this->operator == 'word' ? db_or() : db_and();
    
            // Don't filter on empty strings.
            if (empty($this->value)) {
                return;
            }
    
            $matches = $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', $this->value);
            if( empty($matches) ) return ;
            if( $matches[0]=="" ) unset($matches[0]);
            $where->condition("node.title", $matches, 'IN');
    
            if (!$where) {
                return;
            }
    
            // previously this was a call_user_func_array but that's unnecessary
            // as views will unpack an array that is a single arg.
            $this->query->add_where($this->options['group'], $where);
        }
    
        /**
         * Provide a simple textarea for equality
         */
        function value_form(&$form, &$form_state) {
            // We have to make some choices when creating this as an exposed
            // filter form. For example, if the operator is locked and thus
            // not rendered, we can't render dependencies; instead we only
            // render the form items we need.
            $which = 'all';
            if (!empty($form['operator'])) {
                $source = ($form['operator']['#type'] == 'radios') ? 'radio:options[operator]' : 'edit-options-operator';
            }
            if (!empty($form_state['exposed'])) {
                $identifier = $this->options['expose']['identifier'];
    
                if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
                    // exposed and locked.
                    $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none';
                }
                else {
                    $source = 'edit-' . drupal_html_id($this->options['expose']['operator_id']);
                }
            }
    
            if ($which == 'all' || $which == 'value') {
                $form['value'] = array(
                    '#type' => 'textarea',
                    '#title' => t('Value'),
                    '#rows' => 10,
                    '#resizable' => TRUE,
                    '#default_value' => $this->value,
                );
                if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
                    $form_state['input'][$identifier] = $this->value;
                }
    
                if ($which == 'all') {
                    $form['value'] += array(
                        '#dependency' => array($source => $this->operator_values(1)),
                    );
                }
            }
    
            if (!isset($form['value'])) {
                // Ensure there is something in the 'value'.
                $form['value'] = array(
                    '#type' => 'value',
                    '#value' => NULL
                );
            }
        }
    
    }
    • ここでは、「value_form」、「op_word」メッソードが親クラス(views_handler_filter_string)のものをオーバーライドします
  • Drupalサイトのキャッシュをクリアして、Viewsの管理画面のフィルダー選択肢に新規複数完全一致検査フィルダーが現れます
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
Views

やりたいこと:モジュール(Views)で複数の文字列を完全一致検索したい

  • 環境:Drupal7.54、Views7.x-3.15
  • モジュール(Views)の文字列検索フィルダーの検索オプション:「含む」があります
    • これは文字の含み検索となります
    • 複数のキーワードがあった場合、or条件で含み検索を行います
  • 実現したいことは:複数のキーワード + 各キーワードの完全一致検索 + OR検索条件
    • 例:「午前 午後」のキーワードを入力します
    • コンテンツタイトル:「午前」と「午後」を完全一致のコンテンツを取得します
  • Viewsの既存機能ではこの検索ができないです

カスタマイズ:モジュール(Views)の複数文字列検索変更の計画

  • Viewsの既存文字検索機能をそのままにして、以下の点を追加します
    • 複数のキーワード(カンマ/空白スペース/改行などで区切り)を切り出して、INオペレーターで完全一致検索(例:select * from node where node.title IN ('午前', '午後') )
    • キーワード入力フォームはテキストフィールドからテキストエリアに変更
      DrupalのViewsのテキスト検索フォームをテキストフィールドからテキストエリアに変更
  • モジュールAPI(Views API)より、Viewsへのプラグインを作成することになりました

DrupalのモジュールAPI(Views API)より文字列検索ハンドルをカスタマイズします

  • モジュールViewsAPIよりいろいろな既存な機能をカスタマイズすることが可能です
  • 今回は文字列検索部分のカスタマイズを行います
    • 既存のハンドル:views_handler_filter_stringを継承して、カスタマイズします
  • ステップ1:ViewsAPIの使用宣言(カスタムモジュール内で)
    /**
     * Implements hook_views_api().
     */
    function my_module_views_api() {
      return array(
        'api' => 3,
      );
    }
  • ステップ2:「hook_views_data_alter」を実装して、新しいフィルダーの作成
    /**
     * Implements hook_views_data_alter().
     */
    function my_module_views_data_alter(&$data) {
      $data['node']['title_count']['title_multiple'] = 'Title multiple wrods';
      $data['node']['title_count']['help_multiple'] = 'Filter multiple words with or operation in Title field';
      $data['node']['title_count']['filter_multiple']['handler'] = 'my_module_handler_filter_multiple_word';
    }
  • ステップ3:カスタムクラス作成のファイルを定義します
    • 定義はモジュールのinfoファイルで行います
    • 定義:
      ; Views handlers
      files[]=views/my_module_handler_filter_multiple_word.inc
      
  • ステップ4:定義されたファイル内でカスタムクラスを作成し、「views_handler_filter_string」を継承して、新規フィルダーの入力フォームをテキストエリアに変更、複数のキーワードを切り出して、ノードの「Title」完全一致検索するロジックの作成
    class my_module_filter_multiple_word_handler extends views_handler_filter_string{
        function operators(){
            $operators = parent::operators();
    
            $operators['multiple word match'] = array(
                'title' => t('Match multiple words'),
                'short' => t('has multiple'),
                'method' => 'op_word',
                'values' => 1,
    
            );
            return $operators;
        }
    
        function op_word($field) {
            $where = $this->operator == 'word' ? db_or() : db_and();
    
            // Don't filter on empty strings.
            if (empty($this->value)) {
                return;
            }
    
            $matches = $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', $this->value);
            if( empty($matches) ) return ;
            if( $matches[0]=="" ) unset($matches[0]);
            $where->condition("node.title", $matches, 'IN');
    
            if (!$where) {
                return;
            }
    
            // previously this was a call_user_func_array but that's unnecessary
            // as views will unpack an array that is a single arg.
            $this->query->add_where($this->options['group'], $where);
        }
    
        /**
         * Provide a simple textarea for equality
         */
        function value_form(&$form, &$form_state) {
            // We have to make some choices when creating this as an exposed
            // filter form. For example, if the operator is locked and thus
            // not rendered, we can't render dependencies; instead we only
            // render the form items we need.
            $which = 'all';
            if (!empty($form['operator'])) {
                $source = ($form['operator']['#type'] == 'radios') ? 'radio:options[operator]' : 'edit-options-operator';
            }
            if (!empty($form_state['exposed'])) {
                $identifier = $this->options['expose']['identifier'];
    
                if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
                    // exposed and locked.
                    $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none';
                }
                else {
                    $source = 'edit-' . drupal_html_id($this->options['expose']['operator_id']);
                }
            }
    
            if ($which == 'all' || $which == 'value') {
                $form['value'] = array(
                    '#type' => 'textarea',
                    '#title' => t('Value'),
                    '#rows' => 10,
                    '#resizable' => TRUE,
                    '#default_value' => $this->value,
                );
                if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
                    $form_state['input'][$identifier] = $this->value;
                }
    
                if ($which == 'all') {
                    $form['value'] += array(
                        '#dependency' => array($source => $this->operator_values(1)),
                    );
                }
            }
    
            if (!isset($form['value'])) {
                // Ensure there is something in the 'value'.
                $form['value'] = array(
                    '#type' => 'value',
                    '#value' => NULL
                );
            }
        }
    
    }
    • ここでは、「value_form」、「op_word」メッソードが親クラス(views_handler_filter_string)のものをオーバーライドします
  • Drupalサイトのキャッシュをクリアして、Viewsの管理画面のフィルダー選択肢に新規複数完全一致検査フィルダーが現れます
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
Views

やりたいこと:モジュール(Views)で複数の文字列を完全一致検索したい

  • 環境:Drupal7.54、Views7.x-3.15
  • モジュール(Views)の文字列検索フィルダーの検索オプション:「含む」があります
    • これは文字の含み検索となります
    • 複数のキーワードがあった場合、or条件で含み検索を行います
  • 実現したいことは:複数のキーワード + 各キーワードの完全一致検索 + OR検索条件
    • 例:「午前 午後」のキーワードを入力します
    • コンテンツタイトル:「午前」と「午後」を完全一致のコンテンツを取得します
  • Viewsの既存機能ではこの検索ができないです

カスタマイズ:モジュール(Views)の複数文字列検索変更の計画

  • Viewsの既存文字検索機能をそのままにして、以下の点を追加します
    • 複数のキーワード(カンマ/空白スペース/改行などで区切り)を切り出して、INオペレーターで完全一致検索(例:select * from node where node.title IN ('午前', '午後') )
    • キーワード入力フォームはテキストフィールドからテキストエリアに変更
      DrupalのViewsのテキスト検索フォームをテキストフィールドからテキストエリアに変更
  • モジュールAPI(Views API)より、Viewsへのプラグインを作成することになりました

DrupalのモジュールAPI(Views API)より文字列検索ハンドルをカスタマイズします

  • モジュールViewsAPIよりいろいろな既存な機能をカスタマイズすることが可能です
  • 今回は文字列検索部分のカスタマイズを行います
    • 既存のハンドル:views_handler_filter_stringを継承して、カスタマイズします
  • ステップ1:ViewsAPIの使用宣言(カスタムモジュール内で)
    /**
     * Implements hook_views_api().
     */
    function my_module_views_api() {
      return array(
        'api' => 3,
      );
    }
  • ステップ2:「hook_views_data_alter」を実装して、新しいフィルダーの作成
    /**
     * Implements hook_views_data_alter().
     */
    function my_module_views_data_alter(&$data) {
      $data['node']['title_count']['title_multiple'] = 'Title multiple wrods';
      $data['node']['title_count']['help_multiple'] = 'Filter multiple words with or operation in Title field';
      $data['node']['title_count']['filter_multiple']['handler'] = 'my_module_handler_filter_multiple_word';
    }
  • ステップ3:カスタムクラス作成のファイルを定義します
    • 定義はモジュールのinfoファイルで行います
    • 定義:
      ; Views handlers
      files[]=views/my_module_handler_filter_multiple_word.inc
      
  • ステップ4:定義されたファイル内でカスタムクラスを作成し、「views_handler_filter_string」を継承して、新規フィルダーの入力フォームをテキストエリアに変更、複数のキーワードを切り出して、ノードの「Title」完全一致検索するロジックの作成
    class my_module_filter_multiple_word_handler extends views_handler_filter_string{
        function operators(){
            $operators = parent::operators();
    
            $operators['multiple word match'] = array(
                'title' => t('Match multiple words'),
                'short' => t('has multiple'),
                'method' => 'op_word',
                'values' => 1,
    
            );
            return $operators;
        }
    
        function op_word($field) {
            $where = $this->operator == 'word' ? db_or() : db_and();
    
            // Don't filter on empty strings.
            if (empty($this->value)) {
                return;
            }
    
            $matches = $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', $this->value);
            if( empty($matches) ) return ;
            if( $matches[0]=="" ) unset($matches[0]);
            $where->condition("node.title", $matches, 'IN');
    
            if (!$where) {
                return;
            }
    
            // previously this was a call_user_func_array but that's unnecessary
            // as views will unpack an array that is a single arg.
            $this->query->add_where($this->options['group'], $where);
        }
    
        /**
         * Provide a simple textarea for equality
         */
        function value_form(&$form, &$form_state) {
            // We have to make some choices when creating this as an exposed
            // filter form. For example, if the operator is locked and thus
            // not rendered, we can't render dependencies; instead we only
            // render the form items we need.
            $which = 'all';
            if (!empty($form['operator'])) {
                $source = ($form['operator']['#type'] == 'radios') ? 'radio:options[operator]' : 'edit-options-operator';
            }
            if (!empty($form_state['exposed'])) {
                $identifier = $this->options['expose']['identifier'];
    
                if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
                    // exposed and locked.
                    $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none';
                }
                else {
                    $source = 'edit-' . drupal_html_id($this->options['expose']['operator_id']);
                }
            }
    
            if ($which == 'all' || $which == 'value') {
                $form['value'] = array(
                    '#type' => 'textarea',
                    '#title' => t('Value'),
                    '#rows' => 10,
                    '#resizable' => TRUE,
                    '#default_value' => $this->value,
                );
                if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
                    $form_state['input'][$identifier] = $this->value;
                }
    
                if ($which == 'all') {
                    $form['value'] += array(
                        '#dependency' => array($source => $this->operator_values(1)),
                    );
                }
            }
    
            if (!isset($form['value'])) {
                // Ensure there is something in the 'value'.
                $form['value'] = array(
                    '#type' => 'value',
                    '#value' => NULL
                );
            }
        }
    
    }
    • ここでは、「value_form」、「op_word」メッソードが親クラス(views_handler_filter_string)のものをオーバーライドします
  • Drupalサイトのキャッシュをクリアして、Viewsの管理画面のフィルダー選択肢に新規複数完全一致検査フィルダーが現れます
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
Views

やりたいこと:モジュール(Views)で複数の文字列を完全一致検索したい

  • 環境:Drupal7.54、Views7.x-3.15
  • モジュール(Views)の文字列検索フィルダーの検索オプション:「含む」があります
    • これは文字の含み検索となります
    • 複数のキーワードがあった場合、or条件で含み検索を行います
  • 実現したいことは:複数のキーワード + 各キーワードの完全一致検索 + OR検索条件
    • 例:「午前 午後」のキーワードを入力します
    • コンテンツタイトル:「午前」と「午後」を完全一致のコンテンツを取得します
  • Viewsの既存機能ではこの検索ができないです

カスタマイズ:モジュール(Views)の複数文字列検索変更の計画

  • Viewsの既存文字検索機能をそのままにして、以下の点を追加します
    • 複数のキーワード(カンマ/空白スペース/改行などで区切り)を切り出して、INオペレーターで完全一致検索(例:select * from node where node.title IN ('午前', '午後') )
    • キーワード入力フォームはテキストフィールドからテキストエリアに変更
      DrupalのViewsのテキスト検索フォームをテキストフィールドからテキストエリアに変更
  • モジュールAPI(Views API)より、Viewsへのプラグインを作成することになりました

DrupalのモジュールAPI(Views API)より文字列検索ハンドルをカスタマイズします

  • モジュールViewsAPIよりいろいろな既存な機能をカスタマイズすることが可能です
  • 今回は文字列検索部分のカスタマイズを行います
    • 既存のハンドル:views_handler_filter_stringを継承して、カスタマイズします
  • ステップ1:ViewsAPIの使用宣言(カスタムモジュール内で)
    /**
     * Implements hook_views_api().
     */
    function my_module_views_api() {
      return array(
        'api' => 3,
      );
    }
  • ステップ2:「hook_views_data_alter」を実装して、新しいフィルダーの作成
    /**
     * Implements hook_views_data_alter().
     */
    function my_module_views_data_alter(&$data) {
      $data['node']['title_count']['title_multiple'] = 'Title multiple wrods';
      $data['node']['title_count']['help_multiple'] = 'Filter multiple words with or operation in Title field';
      $data['node']['title_count']['filter_multiple']['handler'] = 'my_module_handler_filter_multiple_word';
    }
  • ステップ3:カスタムクラス作成のファイルを定義します
    • 定義はモジュールのinfoファイルで行います
    • 定義:
      ; Views handlers
      files[]=views/my_module_handler_filter_multiple_word.inc
      
  • ステップ4:定義されたファイル内でカスタムクラスを作成し、「views_handler_filter_string」を継承して、新規フィルダーの入力フォームをテキストエリアに変更、複数のキーワードを切り出して、ノードの「Title」完全一致検索するロジックの作成
    class my_module_filter_multiple_word_handler extends views_handler_filter_string{
        function operators(){
            $operators = parent::operators();
    
            $operators['multiple word match'] = array(
                'title' => t('Match multiple words'),
                'short' => t('has multiple'),
                'method' => 'op_word',
                'values' => 1,
    
            );
            return $operators;
        }
    
        function op_word($field) {
            $where = $this->operator == 'word' ? db_or() : db_and();
    
            // Don't filter on empty strings.
            if (empty($this->value)) {
                return;
            }
    
            $matches = $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', $this->value);
            if( empty($matches) ) return ;
            if( $matches[0]=="" ) unset($matches[0]);
            $where->condition("node.title", $matches, 'IN');
    
            if (!$where) {
                return;
            }
    
            // previously this was a call_user_func_array but that's unnecessary
            // as views will unpack an array that is a single arg.
            $this->query->add_where($this->options['group'], $where);
        }
    
        /**
         * Provide a simple textarea for equality
         */
        function value_form(&$form, &$form_state) {
            // We have to make some choices when creating this as an exposed
            // filter form. For example, if the operator is locked and thus
            // not rendered, we can't render dependencies; instead we only
            // render the form items we need.
            $which = 'all';
            if (!empty($form['operator'])) {
                $source = ($form['operator']['#type'] == 'radios') ? 'radio:options[operator]' : 'edit-options-operator';
            }
            if (!empty($form_state['exposed'])) {
                $identifier = $this->options['expose']['identifier'];
    
                if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
                    // exposed and locked.
                    $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none';
                }
                else {
                    $source = 'edit-' . drupal_html_id($this->options['expose']['operator_id']);
                }
            }
    
            if ($which == 'all' || $which == 'value') {
                $form['value'] = array(
                    '#type' => 'textarea',
                    '#title' => t('Value'),
                    '#rows' => 10,
                    '#resizable' => TRUE,
                    '#default_value' => $this->value,
                );
                if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
                    $form_state['input'][$identifier] = $this->value;
                }
    
                if ($which == 'all') {
                    $form['value'] += array(
                        '#dependency' => array($source => $this->operator_values(1)),
                    );
                }
            }
    
            if (!isset($form['value'])) {
                // Ensure there is something in the 'value'.
                $form['value'] = array(
                    '#type' => 'value',
                    '#value' => NULL
                );
            }
        }
    
    }
    • ここでは、「value_form」、「op_word」メッソードが親クラス(views_handler_filter_string)のものをオーバーライドします
  • Drupalサイトのキャッシュをクリアして、Viewsの管理画面のフィルダー選択肢に新規複数完全一致検査フィルダーが現れます
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
Views

やりたいこと:モジュール(Views)で複数の文字列を完全一致検索したい

  • 環境:Drupal7.54、Views7.x-3.15
  • モジュール(Views)の文字列検索フィルダーの検索オプション:「含む」があります
    • これは文字の含み検索となります
    • 複数のキーワードがあった場合、or条件で含み検索を行います
  • 実現したいことは:複数のキーワード + 各キーワードの完全一致検索 + OR検索条件
    • 例:「午前 午後」のキーワードを入力します
    • コンテンツタイトル:「午前」と「午後」を完全一致のコンテンツを取得します
  • Viewsの既存機能ではこの検索ができないです

カスタマイズ:モジュール(Views)の複数文字列検索変更の計画

  • Viewsの既存文字検索機能をそのままにして、以下の点を追加します
    • 複数のキーワード(カンマ/空白スペース/改行などで区切り)を切り出して、INオペレーターで完全一致検索(例:select * from node where node.title IN ('午前', '午後') )
    • キーワード入力フォームはテキストフィールドからテキストエリアに変更
      DrupalのViewsのテキスト検索フォームをテキストフィールドからテキストエリアに変更
  • モジュールAPI(Views API)より、Viewsへのプラグインを作成することになりました

DrupalのモジュールAPI(Views API)より文字列検索ハンドルをカスタマイズします

  • モジュールViewsAPIよりいろいろな既存な機能をカスタマイズすることが可能です
  • 今回は文字列検索部分のカスタマイズを行います
    • 既存のハンドル:views_handler_filter_stringを継承して、カスタマイズします
  • ステップ1:ViewsAPIの使用宣言(カスタムモジュール内で)
    /**
     * Implements hook_views_api().
     */
    function my_module_views_api() {
      return array(
        'api' => 3,
      );
    }
  • ステップ2:「hook_views_data_alter」を実装して、新しいフィルダーの作成
    /**
     * Implements hook_views_data_alter().
     */
    function my_module_views_data_alter(&$data) {
      $data['node']['title_count']['title_multiple'] = 'Title multiple wrods';
      $data['node']['title_count']['help_multiple'] = 'Filter multiple words with or operation in Title field';
      $data['node']['title_count']['filter_multiple']['handler'] = 'my_module_handler_filter_multiple_word';
    }
  • ステップ3:カスタムクラス作成のファイルを定義します
    • 定義はモジュールのinfoファイルで行います
    • 定義:
      ; Views handlers
      files[]=views/my_module_handler_filter_multiple_word.inc
      
  • ステップ4:定義されたファイル内でカスタムクラスを作成し、「views_handler_filter_string」を継承して、新規フィルダーの入力フォームをテキストエリアに変更、複数のキーワードを切り出して、ノードの「Title」完全一致検索するロジックの作成
    class my_module_filter_multiple_word_handler extends views_handler_filter_string{
        function operators(){
            $operators = parent::operators();
    
            $operators['multiple word match'] = array(
                'title' => t('Match multiple words'),
                'short' => t('has multiple'),
                'method' => 'op_word',
                'values' => 1,
    
            );
            return $operators;
        }
    
        function op_word($field) {
            $where = $this->operator == 'word' ? db_or() : db_and();
    
            // Don't filter on empty strings.
            if (empty($this->value)) {
                return;
            }
    
            $matches = $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', $this->value);
            if( empty($matches) ) return ;
            if( $matches[0]=="" ) unset($matches[0]);
            $where->condition("node.title", $matches, 'IN');
    
            if (!$where) {
                return;
            }
    
            // previously this was a call_user_func_array but that's unnecessary
            // as views will unpack an array that is a single arg.
            $this->query->add_where($this->options['group'], $where);
        }
    
        /**
         * Provide a simple textarea for equality
         */
        function value_form(&$form, &$form_state) {
            // We have to make some choices when creating this as an exposed
            // filter form. For example, if the operator is locked and thus
            // not rendered, we can't render dependencies; instead we only
            // render the form items we need.
            $which = 'all';
            if (!empty($form['operator'])) {
                $source = ($form['operator']['#type'] == 'radios') ? 'radio:options[operator]' : 'edit-options-operator';
            }
            if (!empty($form_state['exposed'])) {
                $identifier = $this->options['expose']['identifier'];
    
                if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
                    // exposed and locked.
                    $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none';
                }
                else {
                    $source = 'edit-' . drupal_html_id($this->options['expose']['operator_id']);
                }
            }
    
            if ($which == 'all' || $which == 'value') {
                $form['value'] = array(
                    '#type' => 'textarea',
                    '#title' => t('Value'),
                    '#rows' => 10,
                    '#resizable' => TRUE,
                    '#default_value' => $this->value,
                );
                if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
                    $form_state['input'][$identifier] = $this->value;
                }
    
                if ($which == 'all') {
                    $form['value'] += array(
                        '#dependency' => array($source => $this->operator_values(1)),
                    );
                }
            }
    
            if (!isset($form['value'])) {
                // Ensure there is something in the 'value'.
                $form['value'] = array(
                    '#type' => 'value',
                    '#value' => NULL
                );
            }
        }
    
    }
    • ここでは、「value_form」、「op_word」メッソードが親クラス(views_handler_filter_string)のものをオーバーライドします
  • Drupalサイトのキャッシュをクリアして、Viewsの管理画面のフィルダー選択肢に新規複数完全一致検査フィルダーが現れます
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
Views

やりたいこと:モジュール(Views)で複数の文字列を完全一致検索したい

  • 環境:Drupal7.54、Views7.x-3.15
  • モジュール(Views)の文字列検索フィルダーの検索オプション:「含む」があります
    • これは文字の含み検索となります
    • 複数のキーワードがあった場合、or条件で含み検索を行います
  • 実現したいことは:複数のキーワード + 各キーワードの完全一致検索 + OR検索条件
    • 例:「午前 午後」のキーワードを入力します
    • コンテンツタイトル:「午前」と「午後」を完全一致のコンテンツを取得します
  • Viewsの既存機能ではこの検索ができないです

カスタマイズ:モジュール(Views)の複数文字列検索変更の計画

  • Viewsの既存文字検索機能をそのままにして、以下の点を追加します
    • 複数のキーワード(カンマ/空白スペース/改行などで区切り)を切り出して、INオペレーターで完全一致検索(例:select * from node where node.title IN ('午前', '午後') )
    • キーワード入力フォームはテキストフィールドからテキストエリアに変更
      DrupalのViewsのテキスト検索フォームをテキストフィールドからテキストエリアに変更
  • モジュールAPI(Views API)より、Viewsへのプラグインを作成することになりました

DrupalのモジュールAPI(Views API)より文字列検索ハンドルをカスタマイズします

  • モジュールViewsAPIよりいろいろな既存な機能をカスタマイズすることが可能です
  • 今回は文字列検索部分のカスタマイズを行います
    • 既存のハンドル:views_handler_filter_stringを継承して、カスタマイズします
  • ステップ1:ViewsAPIの使用宣言(カスタムモジュール内で)
    /**
     * Implements hook_views_api().
     */
    function my_module_views_api() {
      return array(
        'api' => 3,
      );
    }
  • ステップ2:「hook_views_data_alter」を実装して、新しいフィルダーの作成
    /**
     * Implements hook_views_data_alter().
     */
    function my_module_views_data_alter(&$data) {
      $data['node']['title_count']['title_multiple'] = 'Title multiple wrods';
      $data['node']['title_count']['help_multiple'] = 'Filter multiple words with or operation in Title field';
      $data['node']['title_count']['filter_multiple']['handler'] = 'my_module_handler_filter_multiple_word';
    }
  • ステップ3:カスタムクラス作成のファイルを定義します
    • 定義はモジュールのinfoファイルで行います
    • 定義:
      ; Views handlers
      files[]=views/my_module_handler_filter_multiple_word.inc
      
  • ステップ4:定義されたファイル内でカスタムクラスを作成し、「views_handler_filter_string」を継承して、新規フィルダーの入力フォームをテキストエリアに変更、複数のキーワードを切り出して、ノードの「Title」完全一致検索するロジックの作成
    class my_module_filter_multiple_word_handler extends views_handler_filter_string{
        function operators(){
            $operators = parent::operators();
    
            $operators['multiple word match'] = array(
                'title' => t('Match multiple words'),
                'short' => t('has multiple'),
                'method' => 'op_word',
                'values' => 1,
    
            );
            return $operators;
        }
    
        function op_word($field) {
            $where = $this->operator == 'word' ? db_or() : db_and();
    
            // Don't filter on empty strings.
            if (empty($this->value)) {
                return;
            }
    
            $matches = $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', $this->value);
            if( empty($matches) ) return ;
            if( $matches[0]=="" ) unset($matches[0]);
            $where->condition("node.title", $matches, 'IN');
    
            if (!$where) {
                return;
            }
    
            // previously this was a call_user_func_array but that's unnecessary
            // as views will unpack an array that is a single arg.
            $this->query->add_where($this->options['group'], $where);
        }
    
        /**
         * Provide a simple textarea for equality
         */
        function value_form(&$form, &$form_state) {
            // We have to make some choices when creating this as an exposed
            // filter form. For example, if the operator is locked and thus
            // not rendered, we can't render dependencies; instead we only
            // render the form items we need.
            $which = 'all';
            if (!empty($form['operator'])) {
                $source = ($form['operator']['#type'] == 'radios') ? 'radio:options[operator]' : 'edit-options-operator';
            }
            if (!empty($form_state['exposed'])) {
                $identifier = $this->options['expose']['identifier'];
    
                if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
                    // exposed and locked.
                    $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none';
                }
                else {
                    $source = 'edit-' . drupal_html_id($this->options['expose']['operator_id']);
                }
            }
    
            if ($which == 'all' || $which == 'value') {
                $form['value'] = array(
                    '#type' => 'textarea',
                    '#title' => t('Value'),
                    '#rows' => 10,
                    '#resizable' => TRUE,
                    '#default_value' => $this->value,
                );
                if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
                    $form_state['input'][$identifier] = $this->value;
                }
    
                if ($which == 'all') {
                    $form['value'] += array(
                        '#dependency' => array($source => $this->operator_values(1)),
                    );
                }
            }
    
            if (!isset($form['value'])) {
                // Ensure there is something in the 'value'.
                $form['value'] = array(
                    '#type' => 'value',
                    '#value' => NULL
                );
            }
        }
    
    }
    • ここでは、「value_form」、「op_word」メッソードが親クラス(views_handler_filter_string)のものをオーバーライドします
  • Drupalサイトのキャッシュをクリアして、Viewsの管理画面のフィルダー選択肢に新規複数完全一致検査フィルダーが現れます
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
Views

やりたいこと:モジュール(Views)で複数の文字列を完全一致検索したい

  • 環境:Drupal7.54、Views7.x-3.15
  • モジュール(Views)の文字列検索フィルダーの検索オプション:「含む」があります
    • これは文字の含み検索となります
    • 複数のキーワードがあった場合、or条件で含み検索を行います
  • 実現したいことは:複数のキーワード + 各キーワードの完全一致検索 + OR検索条件
    • 例:「午前 午後」のキーワードを入力します
    • コンテンツタイトル:「午前」と「午後」を完全一致のコンテンツを取得します
  • Viewsの既存機能ではこの検索ができないです

カスタマイズ:モジュール(Views)の複数文字列検索変更の計画

  • Viewsの既存文字検索機能をそのままにして、以下の点を追加します
    • 複数のキーワード(カンマ/空白スペース/改行などで区切り)を切り出して、INオペレーターで完全一致検索(例:select * from node where node.title IN ('午前', '午後') )
    • キーワード入力フォームはテキストフィールドからテキストエリアに変更
      DrupalのViewsのテキスト検索フォームをテキストフィールドからテキストエリアに変更
  • モジュールAPI(Views API)より、Viewsへのプラグインを作成することになりました

DrupalのモジュールAPI(Views API)より文字列検索ハンドルをカスタマイズします

  • モジュールViewsAPIよりいろいろな既存な機能をカスタマイズすることが可能です
  • 今回は文字列検索部分のカスタマイズを行います
    • 既存のハンドル:views_handler_filter_stringを継承して、カスタマイズします
  • ステップ1:ViewsAPIの使用宣言(カスタムモジュール内で)
    /**
     * Implements hook_views_api().
     */
    function my_module_views_api() {
      return array(
        'api' => 3,
      );
    }
  • ステップ2:「hook_views_data_alter」を実装して、新しいフィルダーの作成
    /**
     * Implements hook_views_data_alter().
     */
    function my_module_views_data_alter(&$data) {
      $data['node']['title_count']['title_multiple'] = 'Title multiple wrods';
      $data['node']['title_count']['help_multiple'] = 'Filter multiple words with or operation in Title field';
      $data['node']['title_count']['filter_multiple']['handler'] = 'my_module_handler_filter_multiple_word';
    }
  • ステップ3:カスタムクラス作成のファイルを定義します
    • 定義はモジュールのinfoファイルで行います
    • 定義:
      ; Views handlers
      files[]=views/my_module_handler_filter_multiple_word.inc
      
  • ステップ4:定義されたファイル内でカスタムクラスを作成し、「views_handler_filter_string」を継承して、新規フィルダーの入力フォームをテキストエリアに変更、複数のキーワードを切り出して、ノードの「Title」完全一致検索するロジックの作成
    class my_module_filter_multiple_word_handler extends views_handler_filter_string{
        function operators(){
            $operators = parent::operators();
    
            $operators['multiple word match'] = array(
                'title' => t('Match multiple words'),
                'short' => t('has multiple'),
                'method' => 'op_word',
                'values' => 1,
    
            );
            return $operators;
        }
    
        function op_word($field) {
            $where = $this->operator == 'word' ? db_or() : db_and();
    
            // Don't filter on empty strings.
            if (empty($this->value)) {
                return;
            }
    
            $matches = $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', $this->value);
            if( empty($matches) ) return ;
            if( $matches[0]=="" ) unset($matches[0]);
            $where->condition("node.title", $matches, 'IN');
    
            if (!$where) {
                return;
            }
    
            // previously this was a call_user_func_array but that's unnecessary
            // as views will unpack an array that is a single arg.
            $this->query->add_where($this->options['group'], $where);
        }
    
        /**
         * Provide a simple textarea for equality
         */
        function value_form(&$form, &$form_state) {
            // We have to make some choices when creating this as an exposed
            // filter form. For example, if the operator is locked and thus
            // not rendered, we can't render dependencies; instead we only
            // render the form items we need.
            $which = 'all';
            if (!empty($form['operator'])) {
                $source = ($form['operator']['#type'] == 'radios') ? 'radio:options[operator]' : 'edit-options-operator';
            }
            if (!empty($form_state['exposed'])) {
                $identifier = $this->options['expose']['identifier'];
    
                if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
                    // exposed and locked.
                    $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none';
                }
                else {
                    $source = 'edit-' . drupal_html_id($this->options['expose']['operator_id']);
                }
            }
    
            if ($which == 'all' || $which == 'value') {
                $form['value'] = array(
                    '#type' => 'textarea',
                    '#title' => t('Value'),
                    '#rows' => 10,
                    '#resizable' => TRUE,
                    '#default_value' => $this->value,
                );
                if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
                    $form_state['input'][$identifier] = $this->value;
                }
    
                if ($which == 'all') {
                    $form['value'] += array(
                        '#dependency' => array($source => $this->operator_values(1)),
                    );
                }
            }
    
            if (!isset($form['value'])) {
                // Ensure there is something in the 'value'.
                $form['value'] = array(
                    '#type' => 'value',
                    '#value' => NULL
                );
            }
        }
    
    }
    • ここでは、「value_form」、「op_word」メッソードが親クラス(views_handler_filter_string)のものをオーバーライドします
  • Drupalサイトのキャッシュをクリアして、Viewsの管理画面のフィルダー選択肢に新規複数完全一致検査フィルダーが現れます
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
Views

やりたいこと:モジュール(Views)で複数の文字列を完全一致検索したい

  • 環境:Drupal7.54、Views7.x-3.15
  • モジュール(Views)の文字列検索フィルダーの検索オプション:「含む」があります
    • これは文字の含み検索となります
    • 複数のキーワードがあった場合、or条件で含み検索を行います
  • 実現したいことは:複数のキーワード + 各キーワードの完全一致検索 + OR検索条件
    • 例:「午前 午後」のキーワードを入力します
    • コンテンツタイトル:「午前」と「午後」を完全一致のコンテンツを取得します
  • Viewsの既存機能ではこの検索ができないです

カスタマイズ:モジュール(Views)の複数文字列検索変更の計画

  • Viewsの既存文字検索機能をそのままにして、以下の点を追加します
    • 複数のキーワード(カンマ/空白スペース/改行などで区切り)を切り出して、INオペレーターで完全一致検索(例:select * from node where node.title IN ('午前', '午後') )
    • キーワード入力フォームはテキストフィールドからテキストエリアに変更
      DrupalのViewsのテキスト検索フォームをテキストフィールドからテキストエリアに変更
  • モジュールAPI(Views API)より、Viewsへのプラグインを作成することになりました

DrupalのモジュールAPI(Views API)より文字列検索ハンドルをカスタマイズします

  • モジュールViewsAPIよりいろいろな既存な機能をカスタマイズすることが可能です
  • 今回は文字列検索部分のカスタマイズを行います
    • 既存のハンドル:views_handler_filter_stringを継承して、カスタマイズします
  • ステップ1:ViewsAPIの使用宣言(カスタムモジュール内で)
    /**
     * Implements hook_views_api().
     */
    function my_module_views_api() {
      return array(
        'api' => 3,
      );
    }
  • ステップ2:「hook_views_data_alter」を実装して、新しいフィルダーの作成
    /**
     * Implements hook_views_data_alter().
     */
    function my_module_views_data_alter(&$data) {
      $data['node']['title_count']['title_multiple'] = 'Title multiple wrods';
      $data['node']['title_count']['help_multiple'] = 'Filter multiple words with or operation in Title field';
      $data['node']['title_count']['filter_multiple']['handler'] = 'my_module_handler_filter_multiple_word';
    }
  • ステップ3:カスタムクラス作成のファイルを定義します
    • 定義はモジュールのinfoファイルで行います
    • 定義:
      ; Views handlers
      files[]=views/my_module_handler_filter_multiple_word.inc
      
  • ステップ4:定義されたファイル内でカスタムクラスを作成し、「views_handler_filter_string」を継承して、新規フィルダーの入力フォームをテキストエリアに変更、複数のキーワードを切り出して、ノードの「Title」完全一致検索するロジックの作成
    class my_module_filter_multiple_word_handler extends views_handler_filter_string{
        function operators(){
            $operators = parent::operators();
    
            $operators['multiple word match'] = array(
                'title' => t('Match multiple words'),
                'short' => t('has multiple'),
                'method' => 'op_word',
                'values' => 1,
    
            );
            return $operators;
        }
    
        function op_word($field) {
            $where = $this->operator == 'word' ? db_or() : db_and();
    
            // Don't filter on empty strings.
            if (empty($this->value)) {
                return;
            }
    
            $matches = $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', $this->value);
            if( empty($matches) ) return ;
            if( $matches[0]=="" ) unset($matches[0]);
            $where->condition("node.title", $matches, 'IN');
    
            if (!$where) {
                return;
            }
    
            // previously this was a call_user_func_array but that's unnecessary
            // as views will unpack an array that is a single arg.
            $this->query->add_where($this->options['group'], $where);
        }
    
        /**
         * Provide a simple textarea for equality
         */
        function value_form(&$form, &$form_state) {
            // We have to make some choices when creating this as an exposed
            // filter form. For example, if the operator is locked and thus
            // not rendered, we can't render dependencies; instead we only
            // render the form items we need.
            $which = 'all';
            if (!empty($form['operator'])) {
                $source = ($form['operator']['#type'] == 'radios') ? 'radio:options[operator]' : 'edit-options-operator';
            }
            if (!empty($form_state['exposed'])) {
                $identifier = $this->options['expose']['identifier'];
    
                if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
                    // exposed and locked.
                    $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none';
                }
                else {
                    $source = 'edit-' . drupal_html_id($this->options['expose']['operator_id']);
                }
            }
    
            if ($which == 'all' || $which == 'value') {
                $form['value'] = array(
                    '#type' => 'textarea',
                    '#title' => t('Value'),
                    '#rows' => 10,
                    '#resizable' => TRUE,
                    '#default_value' => $this->value,
                );
                if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
                    $form_state['input'][$identifier] = $this->value;
                }
    
                if ($which == 'all') {
                    $form['value'] += array(
                        '#dependency' => array($source => $this->operator_values(1)),
                    );
                }
            }
    
            if (!isset($form['value'])) {
                // Ensure there is something in the 'value'.
                $form['value'] = array(
                    '#type' => 'value',
                    '#value' => NULL
                );
            }
        }
    
    }
    • ここでは、「value_form」、「op_word」メッソードが親クラス(views_handler_filter_string)のものをオーバーライドします
  • Drupalサイトのキャッシュをクリアして、Viewsの管理画面のフィルダー選択肢に新規複数完全一致検査フィルダーが現れます
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
Views

やりたいこと:モジュール(Views)で複数の文字列を完全一致検索したい

  • 環境:Drupal7.54、Views7.x-3.15
  • モジュール(Views)の文字列検索フィルダーの検索オプション:「含む」があります
    • これは文字の含み検索となります
    • 複数のキーワードがあった場合、or条件で含み検索を行います
  • 実現したいことは:複数のキーワード + 各キーワードの完全一致検索 + OR検索条件
    • 例:「午前 午後」のキーワードを入力します
    • コンテンツタイトル:「午前」と「午後」を完全一致のコンテンツを取得します
  • Viewsの既存機能ではこの検索ができないです

カスタマイズ:モジュール(Views)の複数文字列検索変更の計画

  • Viewsの既存文字検索機能をそのままにして、以下の点を追加します
    • 複数のキーワード(カンマ/空白スペース/改行などで区切り)を切り出して、INオペレーターで完全一致検索(例:select * from node where node.title IN ('午前', '午後') )
    • キーワード入力フォームはテキストフィールドからテキストエリアに変更
      DrupalのViewsのテキスト検索フォームをテキストフィールドからテキストエリアに変更
  • モジュールAPI(Views API)より、Viewsへのプラグインを作成することになりました

DrupalのモジュールAPI(Views API)より文字列検索ハンドルをカスタマイズします

  • モジュールViewsAPIよりいろいろな既存な機能をカスタマイズすることが可能です
  • 今回は文字列検索部分のカスタマイズを行います
    • 既存のハンドル:views_handler_filter_stringを継承して、カスタマイズします
  • ステップ1:ViewsAPIの使用宣言(カスタムモジュール内で)
    /**
     * Implements hook_views_api().
     */
    function my_module_views_api() {
      return array(
        'api' => 3,
      );
    }
  • ステップ2:「hook_views_data_alter」を実装して、新しいフィルダーの作成
    /**
     * Implements hook_views_data_alter().
     */
    function my_module_views_data_alter(&$data) {
      $data['node']['title_count']['title_multiple'] = 'Title multiple wrods';
      $data['node']['title_count']['help_multiple'] = 'Filter multiple words with or operation in Title field';
      $data['node']['title_count']['filter_multiple']['handler'] = 'my_module_handler_filter_multiple_word';
    }
  • ステップ3:カスタムクラス作成のファイルを定義します
    • 定義はモジュールのinfoファイルで行います
    • 定義:
      ; Views handlers
      files[]=views/my_module_handler_filter_multiple_word.inc
      
  • ステップ4:定義されたファイル内でカスタムクラスを作成し、「views_handler_filter_string」を継承して、新規フィルダーの入力フォームをテキストエリアに変更、複数のキーワードを切り出して、ノードの「Title」完全一致検索するロジックの作成
    class my_module_filter_multiple_word_handler extends views_handler_filter_string{
        function operators(){
            $operators = parent::operators();
    
            $operators['multiple word match'] = array(
                'title' => t('Match multiple words'),
                'short' => t('has multiple'),
                'method' => 'op_word',
                'values' => 1,
    
            );
            return $operators;
        }
    
        function op_word($field) {
            $where = $this->operator == 'word' ? db_or() : db_and();
    
            // Don't filter on empty strings.
            if (empty($this->value)) {
                return;
            }
    
            $matches = $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', $this->value);
            if( empty($matches) ) return ;
            if( $matches[0]=="" ) unset($matches[0]);
            $where->condition("node.title", $matches, 'IN');
    
            if (!$where) {
                return;
            }
    
            // previously this was a call_user_func_array but that's unnecessary
            // as views will unpack an array that is a single arg.
            $this->query->add_where($this->options['group'], $where);
        }
    
        /**
         * Provide a simple textarea for equality
         */
        function value_form(&$form, &$form_state) {
            // We have to make some choices when creating this as an exposed
            // filter form. For example, if the operator is locked and thus
            // not rendered, we can't render dependencies; instead we only
            // render the form items we need.
            $which = 'all';
            if (!empty($form['operator'])) {
                $source = ($form['operator']['#type'] == 'radios') ? 'radio:options[operator]' : 'edit-options-operator';
            }
            if (!empty($form_state['exposed'])) {
                $identifier = $this->options['expose']['identifier'];
    
                if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
                    // exposed and locked.
                    $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none';
                }
                else {
                    $source = 'edit-' . drupal_html_id($this->options['expose']['operator_id']);
                }
            }
    
            if ($which == 'all' || $which == 'value') {
                $form['value'] = array(
                    '#type' => 'textarea',
                    '#title' => t('Value'),
                    '#rows' => 10,
                    '#resizable' => TRUE,
                    '#default_value' => $this->value,
                );
                if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
                    $form_state['input'][$identifier] = $this->value;
                }
    
                if ($which == 'all') {
                    $form['value'] += array(
                        '#dependency' => array($source => $this->operator_values(1)),
                    );
                }
            }
    
            if (!isset($form['value'])) {
                // Ensure there is something in the 'value'.
                $form['value'] = array(
                    '#type' => 'value',
                    '#value' => NULL
                );
            }
        }
    
    }
    • ここでは、「value_form」、「op_word」メッソードが親クラス(views_handler_filter_string)のものをオーバーライドします
  • Drupalサイトのキャッシュをクリアして、Viewsの管理画面のフィルダー選択肢に新規複数完全一致検査フィルダーが現れます
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
Views

やりたいこと:モジュール(Views)で複数の文字列を完全一致検索したい

  • 環境:Drupal7.54、Views7.x-3.15
  • モジュール(Views)の文字列検索フィルダーの検索オプション:「含む」があります
    • これは文字の含み検索となります
    • 複数のキーワードがあった場合、or条件で含み検索を行います
  • 実現したいことは:複数のキーワード + 各キーワードの完全一致検索 + OR検索条件
    • 例:「午前 午後」のキーワードを入力します
    • コンテンツタイトル:「午前」と「午後」を完全一致のコンテンツを取得します
  • Viewsの既存機能ではこの検索ができないです

カスタマイズ:モジュール(Views)の複数文字列検索変更の計画

  • Viewsの既存文字検索機能をそのままにして、以下の点を追加します
    • 複数のキーワード(カンマ/空白スペース/改行などで区切り)を切り出して、INオペレーターで完全一致検索(例:select * from node where node.title IN ('午前', '午後') )
    • キーワード入力フォームはテキストフィールドからテキストエリアに変更
      DrupalのViewsのテキスト検索フォームをテキストフィールドからテキストエリアに変更
  • モジュールAPI(Views API)より、Viewsへのプラグインを作成することになりました

DrupalのモジュールAPI(Views API)より文字列検索ハンドルをカスタマイズします

  • モジュールViewsAPIよりいろいろな既存な機能をカスタマイズすることが可能です
  • 今回は文字列検索部分のカスタマイズを行います
    • 既存のハンドル:views_handler_filter_stringを継承して、カスタマイズします
  • ステップ1:ViewsAPIの使用宣言(カスタムモジュール内で)
    /**
     * Implements hook_views_api().
     */
    function my_module_views_api() {
      return array(
        'api' => 3,
      );
    }
  • ステップ2:「hook_views_data_alter」を実装して、新しいフィルダーの作成
    /**
     * Implements hook_views_data_alter().
     */
    function my_module_views_data_alter(&$data) {
      $data['node']['title_count']['title_multiple'] = 'Title multiple wrods';
      $data['node']['title_count']['help_multiple'] = 'Filter multiple words with or operation in Title field';
      $data['node']['title_count']['filter_multiple']['handler'] = 'my_module_handler_filter_multiple_word';
    }
  • ステップ3:カスタムクラス作成のファイルを定義します
    • 定義はモジュールのinfoファイルで行います
    • 定義:
      ; Views handlers
      files[]=views/my_module_handler_filter_multiple_word.inc
      
  • ステップ4:定義されたファイル内でカスタムクラスを作成し、「views_handler_filter_string」を継承して、新規フィルダーの入力フォームをテキストエリアに変更、複数のキーワードを切り出して、ノードの「Title」完全一致検索するロジックの作成
    class my_module_filter_multiple_word_handler extends views_handler_filter_string{
        function operators(){
            $operators = parent::operators();
    
            $operators['multiple word match'] = array(
                'title' => t('Match multiple words'),
                'short' => t('has multiple'),
                'method' => 'op_word',
                'values' => 1,
    
            );
            return $operators;
        }
    
        function op_word($field) {
            $where = $this->operator == 'word' ? db_or() : db_and();
    
            // Don't filter on empty strings.
            if (empty($this->value)) {
                return;
            }
    
            $matches = $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', $this->value);
            if( empty($matches) ) return ;
            if( $matches[0]=="" ) unset($matches[0]);
            $where->condition("node.title", $matches, 'IN');
    
            if (!$where) {
                return;
            }
    
            // previously this was a call_user_func_array but that's unnecessary
            // as views will unpack an array that is a single arg.
            $this->query->add_where($this->options['group'], $where);
        }
    
        /**
         * Provide a simple textarea for equality
         */
        function value_form(&$form, &$form_state) {
            // We have to make some choices when creating this as an exposed
            // filter form. For example, if the operator is locked and thus
            // not rendered, we can't render dependencies; instead we only
            // render the form items we need.
            $which = 'all';
            if (!empty($form['operator'])) {
                $source = ($form['operator']['#type'] == 'radios') ? 'radio:options[operator]' : 'edit-options-operator';
            }
            if (!empty($form_state['exposed'])) {
                $identifier = $this->options['expose']['identifier'];
    
                if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
                    // exposed and locked.
                    $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none';
                }
                else {
                    $source = 'edit-' . drupal_html_id($this->options['expose']['operator_id']);
                }
            }
    
            if ($which == 'all' || $which == 'value') {
                $form['value'] = array(
                    '#type' => 'textarea',
                    '#title' => t('Value'),
                    '#rows' => 10,
                    '#resizable' => TRUE,
                    '#default_value' => $this->value,
                );
                if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
                    $form_state['input'][$identifier] = $this->value;
                }
    
                if ($which == 'all') {
                    $form['value'] += array(
                        '#dependency' => array($source => $this->operator_values(1)),
                    );
                }
            }
    
            if (!isset($form['value'])) {
                // Ensure there is something in the 'value'.
                $form['value'] = array(
                    '#type' => 'value',
                    '#value' => NULL
                );
            }
        }
    
    }
    • ここでは、「value_form」、「op_word」メッソードが親クラス(views_handler_filter_string)のものをオーバーライドします
  • Drupalサイトのキャッシュをクリアして、Viewsの管理画面のフィルダー選択肢に新規複数完全一致検査フィルダーが現れます
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
Views

やりたいこと:モジュール(Views)で複数の文字列を完全一致検索したい

  • 環境:Drupal7.54、Views7.x-3.15
  • モジュール(Views)の文字列検索フィルダーの検索オプション:「含む」があります
    • これは文字の含み検索となります
    • 複数のキーワードがあった場合、or条件で含み検索を行います
  • 実現したいことは:複数のキーワード + 各キーワードの完全一致検索 + OR検索条件
    • 例:「午前 午後」のキーワードを入力します
    • コンテンツタイトル:「午前」と「午後」を完全一致のコンテンツを取得します
  • Viewsの既存機能ではこの検索ができないです

カスタマイズ:モジュール(Views)の複数文字列検索変更の計画

  • Viewsの既存文字検索機能をそのままにして、以下の点を追加します
    • 複数のキーワード(カンマ/空白スペース/改行などで区切り)を切り出して、INオペレーターで完全一致検索(例:select * from node where node.title IN ('午前', '午後') )
    • キーワード入力フォームはテキストフィールドからテキストエリアに変更
      DrupalのViewsのテキスト検索フォームをテキストフィールドからテキストエリアに変更
  • モジュールAPI(Views API)より、Viewsへのプラグインを作成することになりました

DrupalのモジュールAPI(Views API)より文字列検索ハンドルをカスタマイズします

  • モジュールViewsAPIよりいろいろな既存な機能をカスタマイズすることが可能です
  • 今回は文字列検索部分のカスタマイズを行います
    • 既存のハンドル:views_handler_filter_stringを継承して、カスタマイズします
  • ステップ1:ViewsAPIの使用宣言(カスタムモジュール内で)
    /**
     * Implements hook_views_api().
     */
    function my_module_views_api() {
      return array(
        'api' => 3,
      );
    }
  • ステップ2:「hook_views_data_alter」を実装して、新しいフィルダーの作成
    /**
     * Implements hook_views_data_alter().
     */
    function my_module_views_data_alter(&$data) {
      $data['node']['title_count']['title_multiple'] = 'Title multiple wrods';
      $data['node']['title_count']['help_multiple'] = 'Filter multiple words with or operation in Title field';
      $data['node']['title_count']['filter_multiple']['handler'] = 'my_module_handler_filter_multiple_word';
    }
  • ステップ3:カスタムクラス作成のファイルを定義します
    • 定義はモジュールのinfoファイルで行います
    • 定義:
      ; Views handlers
      files[]=views/my_module_handler_filter_multiple_word.inc
      
  • ステップ4:定義されたファイル内でカスタムクラスを作成し、「views_handler_filter_string」を継承して、新規フィルダーの入力フォームをテキストエリアに変更、複数のキーワードを切り出して、ノードの「Title」完全一致検索するロジックの作成
    class my_module_filter_multiple_word_handler extends views_handler_filter_string{
        function operators(){
            $operators = parent::operators();
    
            $operators['multiple word match'] = array(
                'title' => t('Match multiple words'),
                'short' => t('has multiple'),
                'method' => 'op_word',
                'values' => 1,
    
            );
            return $operators;
        }
    
        function op_word($field) {
            $where = $this->operator == 'word' ? db_or() : db_and();
    
            // Don't filter on empty strings.
            if (empty($this->value)) {
                return;
            }
    
            $matches = $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', $this->value);
            if( empty($matches) ) return ;
            if( $matches[0]=="" ) unset($matches[0]);
            $where->condition("node.title", $matches, 'IN');
    
            if (!$where) {
                return;
            }
    
            // previously this was a call_user_func_array but that's unnecessary
            // as views will unpack an array that is a single arg.
            $this->query->add_where($this->options['group'], $where);
        }
    
        /**
         * Provide a simple textarea for equality
         */
        function value_form(&$form, &$form_state) {
            // We have to make some choices when creating this as an exposed
            // filter form. For example, if the operator is locked and thus
            // not rendered, we can't render dependencies; instead we only
            // render the form items we need.
            $which = 'all';
            if (!empty($form['operator'])) {
                $source = ($form['operator']['#type'] == 'radios') ? 'radio:options[operator]' : 'edit-options-operator';
            }
            if (!empty($form_state['exposed'])) {
                $identifier = $this->options['expose']['identifier'];
    
                if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
                    // exposed and locked.
                    $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none';
                }
                else {
                    $source = 'edit-' . drupal_html_id($this->options['expose']['operator_id']);
                }
            }
    
            if ($which == 'all' || $which == 'value') {
                $form['value'] = array(
                    '#type' => 'textarea',
                    '#title' => t('Value'),
                    '#rows' => 10,
                    '#resizable' => TRUE,
                    '#default_value' => $this->value,
                );
                if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
                    $form_state['input'][$identifier] = $this->value;
                }
    
                if ($which == 'all') {
                    $form['value'] += array(
                        '#dependency' => array($source => $this->operator_values(1)),
                    );
                }
            }
    
            if (!isset($form['value'])) {
                // Ensure there is something in the 'value'.
                $form['value'] = array(
                    '#type' => 'value',
                    '#value' => NULL
                );
            }
        }
    
    }
    • ここでは、「value_form」、「op_word」メッソードが親クラス(views_handler_filter_string)のものをオーバーライドします
  • Drupalサイトのキャッシュをクリアして、Viewsの管理画面のフィルダー選択肢に新規複数完全一致検査フィルダーが現れます
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
Views

やりたいこと:モジュール(Views)で複数の文字列を完全一致検索したい

  • 環境:Drupal7.54、Views7.x-3.15
  • モジュール(Views)の文字列検索フィルダーの検索オプション:「含む」があります
    • これは文字の含み検索となります
    • 複数のキーワードがあった場合、or条件で含み検索を行います
  • 実現したいことは:複数のキーワード + 各キーワードの完全一致検索 + OR検索条件
    • 例:「午前 午後」のキーワードを入力します
    • コンテンツタイトル:「午前」と「午後」を完全一致のコンテンツを取得します
  • Viewsの既存機能ではこの検索ができないです

カスタマイズ:モジュール(Views)の複数文字列検索変更の計画

  • Viewsの既存文字検索機能をそのままにして、以下の点を追加します
    • 複数のキーワード(カンマ/空白スペース/改行などで区切り)を切り出して、INオペレーターで完全一致検索(例:select * from node where node.title IN ('午前', '午後') )
    • キーワード入力フォームはテキストフィールドからテキストエリアに変更
      DrupalのViewsのテキスト検索フォームをテキストフィールドからテキストエリアに変更
  • モジュールAPI(Views API)より、Viewsへのプラグインを作成することになりました

DrupalのモジュールAPI(Views API)より文字列検索ハンドルをカスタマイズします

  • モジュールViewsAPIよりいろいろな既存な機能をカスタマイズすることが可能です
  • 今回は文字列検索部分のカスタマイズを行います
    • 既存のハンドル:views_handler_filter_stringを継承して、カスタマイズします
  • ステップ1:ViewsAPIの使用宣言(カスタムモジュール内で)
    /**
     * Implements hook_views_api().
     */
    function my_module_views_api() {
      return array(
        'api' => 3,
      );
    }
  • ステップ2:「hook_views_data_alter」を実装して、新しいフィルダーの作成
    /**
     * Implements hook_views_data_alter().
     */
    function my_module_views_data_alter(&$data) {
      $data['node']['title_count']['title_multiple'] = 'Title multiple wrods';
      $data['node']['title_count']['help_multiple'] = 'Filter multiple words with or operation in Title field';
      $data['node']['title_count']['filter_multiple']['handler'] = 'my_module_handler_filter_multiple_word';
    }
  • ステップ3:カスタムクラス作成のファイルを定義します
    • 定義はモジュールのinfoファイルで行います
    • 定義:
      ; Views handlers
      files[]=views/my_module_handler_filter_multiple_word.inc
      
  • ステップ4:定義されたファイル内でカスタムクラスを作成し、「views_handler_filter_string」を継承して、新規フィルダーの入力フォームをテキストエリアに変更、複数のキーワードを切り出して、ノードの「Title」完全一致検索するロジックの作成
    class my_module_filter_multiple_word_handler extends views_handler_filter_string{
        function operators(){
            $operators = parent::operators();
    
            $operators['multiple word match'] = array(
                'title' => t('Match multiple words'),
                'short' => t('has multiple'),
                'method' => 'op_word',
                'values' => 1,
    
            );
            return $operators;
        }
    
        function op_word($field) {
            $where = $this->operator == 'word' ? db_or() : db_and();
    
            // Don't filter on empty strings.
            if (empty($this->value)) {
                return;
            }
    
            $matches = $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', $this->value);
            if( empty($matches) ) return ;
            if( $matches[0]=="" ) unset($matches[0]);
            $where->condition("node.title", $matches, 'IN');
    
            if (!$where) {
                return;
            }
    
            // previously this was a call_user_func_array but that's unnecessary
            // as views will unpack an array that is a single arg.
            $this->query->add_where($this->options['group'], $where);
        }
    
        /**
         * Provide a simple textarea for equality
         */
        function value_form(&$form, &$form_state) {
            // We have to make some choices when creating this as an exposed
            // filter form. For example, if the operator is locked and thus
            // not rendered, we can't render dependencies; instead we only
            // render the form items we need.
            $which = 'all';
            if (!empty($form['operator'])) {
                $source = ($form['operator']['#type'] == 'radios') ? 'radio:options[operator]' : 'edit-options-operator';
            }
            if (!empty($form_state['exposed'])) {
                $identifier = $this->options['expose']['identifier'];
    
                if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
                    // exposed and locked.
                    $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none';
                }
                else {
                    $source = 'edit-' . drupal_html_id($this->options['expose']['operator_id']);
                }
            }
    
            if ($which == 'all' || $which == 'value') {
                $form['value'] = array(
                    '#type' => 'textarea',
                    '#title' => t('Value'),
                    '#rows' => 10,
                    '#resizable' => TRUE,
                    '#default_value' => $this->value,
                );
                if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
                    $form_state['input'][$identifier] = $this->value;
                }
    
                if ($which == 'all') {
                    $form['value'] += array(
                        '#dependency' => array($source => $this->operator_values(1)),
                    );
                }
            }
    
            if (!isset($form['value'])) {
                // Ensure there is something in the 'value'.
                $form['value'] = array(
                    '#type' => 'value',
                    '#value' => NULL
                );
            }
        }
    
    }
    • ここでは、「value_form」、「op_word」メッソードが親クラス(views_handler_filter_string)のものをオーバーライドします
  • Drupalサイトのキャッシュをクリアして、Viewsの管理画面のフィルダー選択肢に新規複数完全一致検査フィルダーが現れます
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
Views

やりたいこと:モジュール(Views)で複数の文字列を完全一致検索したい

  • 環境:Drupal7.54、Views7.x-3.15
  • モジュール(Views)の文字列検索フィルダーの検索オプション:「含む」があります
    • これは文字の含み検索となります
    • 複数のキーワードがあった場合、or条件で含み検索を行います
  • 実現したいことは:複数のキーワード + 各キーワードの完全一致検索 + OR検索条件
    • 例:「午前 午後」のキーワードを入力します
    • コンテンツタイトル:「午前」と「午後」を完全一致のコンテンツを取得します
  • Viewsの既存機能ではこの検索ができないです

カスタマイズ:モジュール(Views)の複数文字列検索変更の計画

  • Viewsの既存文字検索機能をそのままにして、以下の点を追加します
    • 複数のキーワード(カンマ/空白スペース/改行などで区切り)を切り出して、INオペレーターで完全一致検索(例:select * from node where node.title IN ('午前', '午後') )
    • キーワード入力フォームはテキストフィールドからテキストエリアに変更
      DrupalのViewsのテキスト検索フォームをテキストフィールドからテキストエリアに変更
  • モジュールAPI(Views API)より、Viewsへのプラグインを作成することになりました

DrupalのモジュールAPI(Views API)より文字列検索ハンドルをカスタマイズします

  • モジュールViewsAPIよりいろいろな既存な機能をカスタマイズすることが可能です
  • 今回は文字列検索部分のカスタマイズを行います
    • 既存のハンドル:views_handler_filter_stringを継承して、カスタマイズします
  • ステップ1:ViewsAPIの使用宣言(カスタムモジュール内で)
    /**
     * Implements hook_views_api().
     */
    function my_module_views_api() {
      return array(
        'api' => 3,
      );
    }
  • ステップ2:「hook_views_data_alter」を実装して、新しいフィルダーの作成
    /**
     * Implements hook_views_data_alter().
     */
    function my_module_views_data_alter(&$data) {
      $data['node']['title_count']['title_multiple'] = 'Title multiple wrods';
      $data['node']['title_count']['help_multiple'] = 'Filter multiple words with or operation in Title field';
      $data['node']['title_count']['filter_multiple']['handler'] = 'my_module_handler_filter_multiple_word';
    }
  • ステップ3:カスタムクラス作成のファイルを定義します
    • 定義はモジュールのinfoファイルで行います
    • 定義:
      ; Views handlers
      files[]=views/my_module_handler_filter_multiple_word.inc
      
  • ステップ4:定義されたファイル内でカスタムクラスを作成し、「views_handler_filter_string」を継承して、新規フィルダーの入力フォームをテキストエリアに変更、複数のキーワードを切り出して、ノードの「Title」完全一致検索するロジックの作成
    class my_module_filter_multiple_word_handler extends views_handler_filter_string{
        function operators(){
            $operators = parent::operators();
    
            $operators['multiple word match'] = array(
                'title' => t('Match multiple words'),
                'short' => t('has multiple'),
                'method' => 'op_word',
                'values' => 1,
    
            );
            return $operators;
        }
    
        function op_word($field) {
            $where = $this->operator == 'word' ? db_or() : db_and();
    
            // Don't filter on empty strings.
            if (empty($this->value)) {
                return;
            }
    
            $matches = $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', $this->value);
            if( empty($matches) ) return ;
            if( $matches[0]=="" ) unset($matches[0]);
            $where->condition("node.title", $matches, 'IN');
    
            if (!$where) {
                return;
            }
    
            // previously this was a call_user_func_array but that's unnecessary
            // as views will unpack an array that is a single arg.
            $this->query->add_where($this->options['group'], $where);
        }
    
        /**
         * Provide a simple textarea for equality
         */
        function value_form(&$form, &$form_state) {
            // We have to make some choices when creating this as an exposed
            // filter form. For example, if the operator is locked and thus
            // not rendered, we can't render dependencies; instead we only
            // render the form items we need.
            $which = 'all';
            if (!empty($form['operator'])) {
                $source = ($form['operator']['#type'] == 'radios') ? 'radio:options[operator]' : 'edit-options-operator';
            }
            if (!empty($form_state['exposed'])) {
                $identifier = $this->options['expose']['identifier'];
    
                if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
                    // exposed and locked.
                    $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none';
                }
                else {
                    $source = 'edit-' . drupal_html_id($this->options['expose']['operator_id']);
                }
            }
    
            if ($which == 'all' || $which == 'value') {
                $form['value'] = array(
                    '#type' => 'textarea',
                    '#title' => t('Value'),
                    '#rows' => 10,
                    '#resizable' => TRUE,
                    '#default_value' => $this->value,
                );
                if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
                    $form_state['input'][$identifier] = $this->value;
                }
    
                if ($which == 'all') {
                    $form['value'] += array(
                        '#dependency' => array($source => $this->operator_values(1)),
                    );
                }
            }
    
            if (!isset($form['value'])) {
                // Ensure there is something in the 'value'.
                $form['value'] = array(
                    '#type' => 'value',
                    '#value' => NULL
                );
            }
        }
    
    }
    • ここでは、「value_form」、「op_word」メッソードが親クラス(views_handler_filter_string)のものをオーバーライドします
  • Drupalサイトのキャッシュをクリアして、Viewsの管理画面のフィルダー選択肢に新規複数完全一致検査フィルダーが現れます
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
Views

やりたいこと:モジュール(Views)で複数の文字列を完全一致検索したい

  • 環境:Drupal7.54、Views7.x-3.15
  • モジュール(Views)の文字列検索フィルダーの検索オプション:「含む」があります
    • これは文字の含み検索となります
    • 複数のキーワードがあった場合、or条件で含み検索を行います
  • 実現したいことは:複数のキーワード + 各キーワードの完全一致検索 + OR検索条件
    • 例:「午前 午後」のキーワードを入力します
    • コンテンツタイトル:「午前」と「午後」を完全一致のコンテンツを取得します
  • Viewsの既存機能ではこの検索ができないです

カスタマイズ:モジュール(Views)の複数文字列検索変更の計画

  • Viewsの既存文字検索機能をそのままにして、以下の点を追加します
    • 複数のキーワード(カンマ/空白スペース/改行などで区切り)を切り出して、INオペレーターで完全一致検索(例:select * from node where node.title IN ('午前', '午後') )
    • キーワード入力フォームはテキストフィールドからテキストエリアに変更
      DrupalのViewsのテキスト検索フォームをテキストフィールドからテキストエリアに変更
  • モジュールAPI(Views API)より、Viewsへのプラグインを作成することになりました

DrupalのモジュールAPI(Views API)より文字列検索ハンドルをカスタマイズします

  • モジュールViewsAPIよりいろいろな既存な機能をカスタマイズすることが可能です
  • 今回は文字列検索部分のカスタマイズを行います
    • 既存のハンドル:views_handler_filter_stringを継承して、カスタマイズします
  • ステップ1:ViewsAPIの使用宣言(カスタムモジュール内で)
    /**
     * Implements hook_views_api().
     */
    function my_module_views_api() {
      return array(
        'api' => 3,
      );
    }
  • ステップ2:「hook_views_data_alter」を実装して、新しいフィルダーの作成
    /**
     * Implements hook_views_data_alter().
     */
    function my_module_views_data_alter(&$data) {
      $data['node']['title_count']['title_multiple'] = 'Title multiple wrods';
      $data['node']['title_count']['help_multiple'] = 'Filter multiple words with or operation in Title field';
      $data['node']['title_count']['filter_multiple']['handler'] = 'my_module_handler_filter_multiple_word';
    }
  • ステップ3:カスタムクラス作成のファイルを定義します
    • 定義はモジュールのinfoファイルで行います
    • 定義:
      ; Views handlers
      files[]=views/my_module_handler_filter_multiple_word.inc
      
  • ステップ4:定義されたファイル内でカスタムクラスを作成し、「views_handler_filter_string」を継承して、新規フィルダーの入力フォームをテキストエリアに変更、複数のキーワードを切り出して、ノードの「Title」完全一致検索するロジックの作成
    class my_module_filter_multiple_word_handler extends views_handler_filter_string{
        function operators(){
            $operators = parent::operators();
    
            $operators['multiple word match'] = array(
                'title' => t('Match multiple words'),
                'short' => t('has multiple'),
                'method' => 'op_word',
                'values' => 1,
    
            );
            return $operators;
        }
    
        function op_word($field) {
            $where = $this->operator == 'word' ? db_or() : db_and();
    
            // Don't filter on empty strings.
            if (empty($this->value)) {
                return;
            }
    
            $matches = $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', $this->value);
            if( empty($matches) ) return ;
            if( $matches[0]=="" ) unset($matches[0]);
            $where->condition("node.title", $matches, 'IN');
    
            if (!$where) {
                return;
            }
    
            // previously this was a call_user_func_array but that's unnecessary
            // as views will unpack an array that is a single arg.
            $this->query->add_where($this->options['group'], $where);
        }
    
        /**
         * Provide a simple textarea for equality
         */
        function value_form(&$form, &$form_state) {
            // We have to make some choices when creating this as an exposed
            // filter form. For example, if the operator is locked and thus
            // not rendered, we can't render dependencies; instead we only
            // render the form items we need.
            $which = 'all';
            if (!empty($form['operator'])) {
                $source = ($form['operator']['#type'] == 'radios') ? 'radio:options[operator]' : 'edit-options-operator';
            }
            if (!empty($form_state['exposed'])) {
                $identifier = $this->options['expose']['identifier'];
    
                if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
                    // exposed and locked.
                    $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none';
                }
                else {
                    $source = 'edit-' . drupal_html_id($this->options['expose']['operator_id']);
                }
            }
    
            if ($which == 'all' || $which == 'value') {
                $form['value'] = array(
                    '#type' => 'textarea',
                    '#title' => t('Value'),
                    '#rows' => 10,
                    '#resizable' => TRUE,
                    '#default_value' => $this->value,
                );
                if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
                    $form_state['input'][$identifier] = $this->value;
                }
    
                if ($which == 'all') {
                    $form['value'] += array(
                        '#dependency' => array($source => $this->operator_values(1)),
                    );
                }
            }
    
            if (!isset($form['value'])) {
                // Ensure there is something in the 'value'.
                $form['value'] = array(
                    '#type' => 'value',
                    '#value' => NULL
                );
            }
        }
    
    }
    • ここでは、「value_form」、「op_word」メッソードが親クラス(views_handler_filter_string)のものをオーバーライドします
  • Drupalサイトのキャッシュをクリアして、Viewsの管理画面のフィルダー選択肢に新規複数完全一致検査フィルダーが現れます
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
Views

やりたいこと:モジュール(Views)で複数の文字列を完全一致検索したい

  • 環境:Drupal7.54、Views7.x-3.15
  • モジュール(Views)の文字列検索フィルダーの検索オプション:「含む」があります
    • これは文字の含み検索となります
    • 複数のキーワードがあった場合、or条件で含み検索を行います
  • 実現したいことは:複数のキーワード + 各キーワードの完全一致検索 + OR検索条件
    • 例:「午前 午後」のキーワードを入力します
    • コンテンツタイトル:「午前」と「午後」を完全一致のコンテンツを取得します
  • Viewsの既存機能ではこの検索ができないです

カスタマイズ:モジュール(Views)の複数文字列検索変更の計画

  • Viewsの既存文字検索機能をそのままにして、以下の点を追加します
    • 複数のキーワード(カンマ/空白スペース/改行などで区切り)を切り出して、INオペレーターで完全一致検索(例:select * from node where node.title IN ('午前', '午後') )
    • キーワード入力フォームはテキストフィールドからテキストエリアに変更
      DrupalのViewsのテキスト検索フォームをテキストフィールドからテキストエリアに変更
  • モジュールAPI(Views API)より、Viewsへのプラグインを作成することになりました

DrupalのモジュールAPI(Views API)より文字列検索ハンドルをカスタマイズします

  • モジュールViewsAPIよりいろいろな既存な機能をカスタマイズすることが可能です
  • 今回は文字列検索部分のカスタマイズを行います
    • 既存のハンドル:views_handler_filter_stringを継承して、カスタマイズします
  • ステップ1:ViewsAPIの使用宣言(カスタムモジュール内で)
    /**
     * Implements hook_views_api().
     */
    function my_module_views_api() {
      return array(
        'api' => 3,
      );
    }
  • ステップ2:「hook_views_data_alter」を実装して、新しいフィルダーの作成
    /**
     * Implements hook_views_data_alter().
     */
    function my_module_views_data_alter(&$data) {
      $data['node']['title_count']['title_multiple'] = 'Title multiple wrods';
      $data['node']['title_count']['help_multiple'] = 'Filter multiple words with or operation in Title field';
      $data['node']['title_count']['filter_multiple']['handler'] = 'my_module_handler_filter_multiple_word';
    }
  • ステップ3:カスタムクラス作成のファイルを定義します
    • 定義はモジュールのinfoファイルで行います
    • 定義:
      ; Views handlers
      files[]=views/my_module_handler_filter_multiple_word.inc
      
  • ステップ4:定義されたファイル内でカスタムクラスを作成し、「views_handler_filter_string」を継承して、新規フィルダーの入力フォームをテキストエリアに変更、複数のキーワードを切り出して、ノードの「Title」完全一致検索するロジックの作成
    class my_module_filter_multiple_word_handler extends views_handler_filter_string{
        function operators(){
            $operators = parent::operators();
    
            $operators['multiple word match'] = array(
                'title' => t('Match multiple words'),
                'short' => t('has multiple'),
                'method' => 'op_word',
                'values' => 1,
    
            );
            return $operators;
        }
    
        function op_word($field) {
            $where = $this->operator == 'word' ? db_or() : db_and();
    
            // Don't filter on empty strings.
            if (empty($this->value)) {
                return;
            }
    
            $matches = $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', $this->value);
            if( empty($matches) ) return ;
            if( $matches[0]=="" ) unset($matches[0]);
            $where->condition("node.title", $matches, 'IN');
    
            if (!$where) {
                return;
            }
    
            // previously this was a call_user_func_array but that's unnecessary
            // as views will unpack an array that is a single arg.
            $this->query->add_where($this->options['group'], $where);
        }
    
        /**
         * Provide a simple textarea for equality
         */
        function value_form(&$form, &$form_state) {
            // We have to make some choices when creating this as an exposed
            // filter form. For example, if the operator is locked and thus
            // not rendered, we can't render dependencies; instead we only
            // render the form items we need.
            $which = 'all';
            if (!empty($form['operator'])) {
                $source = ($form['operator']['#type'] == 'radios') ? 'radio:options[operator]' : 'edit-options-operator';
            }
            if (!empty($form_state['exposed'])) {
                $identifier = $this->options['expose']['identifier'];
    
                if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
                    // exposed and locked.
                    $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none';
                }
                else {
                    $source = 'edit-' . drupal_html_id($this->options['expose']['operator_id']);
                }
            }
    
            if ($which == 'all' || $which == 'value') {
                $form['value'] = array(
                    '#type' => 'textarea',
                    '#title' => t('Value'),
                    '#rows' => 10,
                    '#resizable' => TRUE,
                    '#default_value' => $this->value,
                );
                if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
                    $form_state['input'][$identifier] = $this->value;
                }
    
                if ($which == 'all') {
                    $form['value'] += array(
                        '#dependency' => array($source => $this->operator_values(1)),
                    );
                }
            }
    
            if (!isset($form['value'])) {
                // Ensure there is something in the 'value'.
                $form['value'] = array(
                    '#type' => 'value',
                    '#value' => NULL
                );
            }
        }
    
    }
    • ここでは、「value_form」、「op_word」メッソードが親クラス(views_handler_filter_string)のものをオーバーライドします
  • Drupalサイトのキャッシュをクリアして、Viewsの管理画面のフィルダー選択肢に新規複数完全一致検査フィルダーが現れます
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
drupal
customization
Views

やりたいこと:モジュール(Views)で複数の文字列を完全一致検索したい

  • 環境:Drupal7.54、Views7.x-3.15
  • モジュール(Views)の文字列検索フィルダーの検索オプション:「含む」があります
    • これは文字の含み検索となります
    • 複数のキーワードがあった場合、or条件で含み検索を行います
  • 実現したいことは:複数のキーワード + 各キーワードの完全一致検索 + OR検索条件
    • 例:「午前 午後」のキーワードを入力します
    • コンテンツタイトル:「午前」と「午後」を完全一致のコンテンツを取得します
  • Viewsの既存機能ではこの検索ができないです

カスタマイズ:モジュール(Views)の複数文字列検索変更の計画

  • Viewsの既存文字検索機能をそのままにして、以下の点を追加します
    • 複数のキーワード(カンマ/空白スペース/改行などで区切り)を切り出して、INオペレーターで完全一致検索(例:select * from node where node.title IN ('午前', '午後') )
    • キーワード入力フォームはテキストフィールドからテキストエリアに変更
      DrupalのViewsのテキスト検索フォームをテキストフィールドからテキストエリアに変更
  • モジュールAPI(Views API)より、Viewsへのプラグインを作成することになりました

DrupalのモジュールAPI(Views API)より文字列検索ハンドルをカスタマイズします

  • モジュールViewsAPIよりいろいろな既存な機能をカスタマイズすることが可能です
  • 今回は文字列検索部分のカスタマイズを行います
    • 既存のハンドル:views_handler_filter_stringを継承して、カスタマイズします
  • ステップ1:ViewsAPIの使用宣言(カスタムモジュール内で)
    /**
     * Implements hook_views_api().
     */
    function my_module_views_api() {
      return array(
        'api' => 3,
      );
    }
  • ステップ2:「hook_views_data_alter」を実装して、新しいフィルダーの作成
    /**
     * Implements hook_views_data_alter().
     */
    function my_module_views_data_alter(&$data) {
      $data['node']['title_count']['title_multiple'] = 'Title multiple wrods';
      $data['node']['title_count']['help_multiple'] = 'Filter multiple words with or operation in Title field';
      $data['node']['title_count']['filter_multiple']['handler'] = 'my_module_handler_filter_multiple_word';
    }
  • ステップ3:カスタムクラス作成のファイルを定義します
    • 定義はモジュールのinfoファイルで行います
    • 定義:
      ; Views handlers
      files[]=views/my_module_handler_filter_multiple_word.inc
      
  • ステップ4:定義されたファイル内でカスタムクラスを作成し、「views_handler_filter_string」を継承して、新規フィルダーの入力フォームをテキストエリアに変更、複数のキーワードを切り出して、ノードの「Title」完全一致検索するロジックの作成
    class my_module_filter_multiple_word_handler extends views_handler_filter_string{
        function operators(){
            $operators = parent::operators();
    
            $operators['multiple word match'] = array(
                'title' => t('Match multiple words'),
                'short' => t('has multiple'),
                'method' => 'op_word',
                'values' => 1,
    
            );
            return $operators;
        }
    
        function op_word($field) {
            $where = $this->operator == 'word' ? db_or() : db_and();
    
            // Don't filter on empty strings.
            if (empty($this->value)) {
                return;
            }
    
            $matches = $split_arr = preg_split('/[  ;;,,、\r\n\t]+/ui', $this->value);
            if( empty($matches) ) return ;
            if( $matches[0]=="" ) unset($matches[0]);
            $where->condition("node.title", $matches, 'IN');
    
            if (!$where) {
                return;
            }
    
            // previously this was a call_user_func_array but that's unnecessary
            // as views will unpack an array that is a single arg.
            $this->query->add_where($this->options['group'], $where);
        }
    
        /**
         * Provide a simple textarea for equality
         */
        function value_form(&$form, &$form_state) {
            // We have to make some choices when creating this as an exposed
            // filter form. For example, if the operator is locked and thus
            // not rendered, we can't render dependencies; instead we only
            // render the form items we need.
            $which = 'all';
            if (!empty($form['operator'])) {
                $source = ($form['operator']['#type'] == 'radios') ? 'radio:options[operator]' : 'edit-options-operator';
            }
            if (!empty($form_state['exposed'])) {
                $identifier = $this->options['expose']['identifier'];
    
                if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
                    // exposed and locked.
                    $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none';
                }
                else {
                    $source = 'edit-' . drupal_html_id($this->options['expose']['operator_id']);
                }
            }
    
            if ($which == 'all' || $which == 'value') {
                $form['value'] = array(
                    '#type' => 'textarea',
                    '#title' => t('Value'),
                    '#rows' => 10,
                    '#resizable' => TRUE,
                    '#default_value' => $this->value,
                );
                if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
                    $form_state['input'][$identifier] = $this->value;
                }
    
                if ($which == 'all') {
                    $form['value'] += array(
                        '#dependency' => array($source => $this->operator_values(1)),
                    );
                }
            }
    
            if (!isset($form['value'])) {
                // Ensure there is something in the 'value'.
                $form['value'] = array(
                    '#type' => 'value',
                    '#value' => NULL
                );
            }
        }
    
    }
    • ここでは、「value_form」、「op_word」メッソードが親クラス(views_handler_filter_string)のものをオーバーライドします
  • Drupalサイトのキャッシュをクリアして、Viewsの管理画面のフィルダー選択肢に新規複数完全一致検査フィルダーが現れます
drupal
customization
Views
jQuery

やりたいこと:ViewsのExposed Filterの入力フォームにjsファイルの追加と引数を渡したいです

  • ViewsのExposed Filterをカスタマイズして、複数のキーワードを完全一致検索できるようにします(「 Drupalのモジュール(Views)の複数のキーワード完全一致検索の実現 」を参考してください)
  • 複数のキーワードの入力チェックをクライアント側のjsで行うため、Exposed Filterフォーム作成時に、入力をチェックするロジックのjsファイルを追加し、フォームIDも渡したいです

drupal_add_js関数でjsファイルの追加とパラメーターを渡します

  • drupal_add_js関数がjsファイルの追加と引数の渡すもできます
  • jsファイルの追加
    $form['#attached']['js'] = array( drupal_get_path("module", "drills_custom_views")."/js/drills_title_form_check.js" );
  • jsファイルにパラメーターを渡す
    $form_id = "views-exposed-form-".$form_state['view']->name."-".$form_state['view']->current_display ;
    $form_id = str_replace( "-", "_", $form_id );
    drupal_add_js(array('drills_custom_views' => array('form_id' => $form_id)), array('type' => 'setting'));
    
  • jsファイル内で引数の受け取ります
    (function($) {
        Drupal.behaviors.drills_custom_views = {
            attach: function (context, settings) {
                alert(settings.drills_custom_views.form_id);
            }
        };
    })(jQuery);
  • 実行結果のイメージは以下のようで
    Drupalでのjsファイル追加およびパラメーターを渡す
ホーム

古松

検索

Article Category

  • apache(7)
  • css(19)
  • drupal(295)
  • Electron(4)
  • html(34)
  • javascript(27)
  • laravel(4)
  • linux(5)
  • macOS(2)
  • mysql(13)
  • php(19)
  • python(4)
  • SEO(12)
  • video(72)
  • Visual Studio Code(4)
  • windows(13)
  • wordpress(32)