メインコンテンツに移動
ホーム

古松

メインナビゲーション

  • ホーム
  • ビデオ
  • ご連絡

パンくず

  • ホーム
  • DrupalのBootstrapが”#field_suffix”エレメントのレンダリングをサポートしない

DrupalのBootstrapが”#field_suffix”エレメントのレンダリングをサポートしない

問題点:テーマ(Bootstrap)環境でモジュール(Entityreference view widget)の編集画面に選択された参照ターゲットが表示されません

  • 背景:Drupal7.55、Entity Reference view widget7.x-2.0、Bootstrap7.x-3.14
  • モジュール(Entity Reference view widget)がDrupalの初期テーマ(Bartik)環境では問題なく作動しています(Drupalのモジュール(Entityreference view widget)にほかのフィールド検索条件の追加 )
  • テーマ(Bootstrap)の環境では、Entity Reference view widgetの編集画面に選択された参照ターゲットが表示されない現象があります
    Bootstrapテーマの環境ではEntity Reference view widgetの参照ターゲットが表示されない
  • インターネットで検索してみたらこの現象の説明記事がありました(entity reference view widget doesn't work with theme bootstrap)

原因:Drupalのテーマ(Bootstrap)がフォームの”#field_suffix”エレメントのレンダリングをサポートしていないからだ

  • モジュール(Entity Reference view widget)の参照ターゲット先を表示するエレメントが”#field_suffix”で作成されています( entityreference_view_widget.module の459行あたり )
    Entity Reference view widgetが参照ターゲットを表示するエレメントが”#field_suffix”を利用しています
  • 紹介文書に提示された解決策は、Bootstrapのレンダリング方法を修正することでした
    • Bootstrapモジュール内で直接に修正たら、次回Bootstrapを更新したら、修正が上書きされますね
    • サードパーティーに提供されたソースコードをなるべく修正しないほうがよいでしょう
  • D7のFormAPIから見ると、”#field_suffix”がサポートされていないはずですが、なぜ通ってしまったか、理由は不明です。
  • D7のFormAPIのチェックボックスのエレメントは”#title”を利用すべきですね

解決:カスタムモジュール内でモジュール(Entity Reference view widget)のフォームにある”#field_suffix”を”#title”に修正することになりました

  • カスタムモジュールを作成して、hook_field_widget_form_alter() を実装します
    /**
     * Implements hook_field_widget_form_alter().
     */
    function YOUR_MODULE_NAME_field_widget_form_alter(&$element, &$form_state, $context)
    {
        if( !isset( $element['#theme'] ) || $element['#theme']!== 'entityreference_view_widget_widget' ) return ;
    
        // change target element from '#field_suffix' to '#title'
        $index = 0;
        while( isset($element[$index] ) ){
            if( isset( $element[$index]['target_id']['#field_suffix'] ) ){
                $title =  $element[$index]['target_id']['#field_suffix'] ;
                unset( $element[$index]['target_id']['#field_suffix'] ) ;
                $element[$index]['target_id']['#title'] = $title  ;
            }
            $index ++ ;
        }
    
    }
    
    • チェックボックスのエレメント”#field_suffix”を消してい、かわりに”#title”エレメントを利用しました
  • サードパーティーのソースコードを触れずに、問題解決しました

Drupalのモジュール(Entityreference view widget)にほかのフィールド検索条件の追加

モジュール(Entityreference view widget)を用いてほかのコンテンツ一覧の検索、参照が可能です

  • 背景:Drupal7.55、Entityreference7.x-1.4、Entityreference view widget7.x-2.0、Views7.x-3.16
  • フィールドタイプの一つEntityreferenceがよく利用されます
  • Viewsの検索機能を生かすEntityreference view widgetモジュールでほかのコンテンツを検索することもできます(Drupalのモジュール(Entity Reference Views Widget)で大量の記事から検索検索/選択 )

問題点:参照側からほかのフィールドの値をViewsに渡して、関連性のあるコンテンツ検索はできません

  • 例:単語のコンテンツタイプ
    • タイトル:テキストフィールド (単語をタイトルフィールドに保存)
    • 例文: Entityreferenceタイプのフィールド (単語に関連する例文一覧)
  • Entityreference view widgetを利用すると、全部の例文検索ができますが、その単語を含まれる例文一覧を出すことはできません
    • Entityreference view widgetがほかのフィールドの値をViewsに渡すことができません
  • Viewsで外部設置フィルターを追加して、検索することができますが、一つ手間がかかります

解決:ほかのフィールド(Title)の値をEntityreference view widgetを通じてViewsに渡すカスタムモジュールを作成

  • Entityreference view widgetをベースモジュールにしますほかのフィールド(Title)をViewsに渡すカスタムモジュールの作成
  • カスタムモジュール(view widget custom)はここからダウンロードします

使用時の注意点:Entityreferenceフィールド設定で「タイトルをビューに渡す」を許可し、Viewsのフィルターにタイトルを追加します

  • カスタムモジュールを利用する二つの条件があります
  • Entityreferenceフィールドの管理が面に「Pass content title to view」をチェックします
    TitleをViewsに渡す許可
  • ViewsのEntityreference view widgetディスプレイに「Title」フィルターを追加しますViewsでタイトルフィルターを追加します
    • フィルターの値は空白でよいです(入力されても渡されたタイトルに上書きされます)
    • オペレータで含む/一致などの条件指定ができます

検索フォーム

カテゴリ別

  • laravel
  • drupal
  • javascript
  • windows
  • html
  • mysql
  • php
  • apache
  • css
  • SEO
  • video
  • wordpress
  • linux
  • python
  • Electron
  • Visual Studio Code

google ads