web-dev-qa-db-ja.com

同じ行にフィールドとその変換を表示するビューを作成する方法

2つの言語のサイト(EN-FR)で翻訳できる2つのフィールドを持つコンテンツタイプがあるとします。タイトルとfield_tobe_translated

ノードごとに1行のみのこのコンテンツタイプのすべてのノードを(ビューに)リストしたいと思います。各行は次の形式である必要があります。

Title_FR-Title_EN-translatable_field_FR-translatable_field_EN

前の「-」は、テーブルタイプビューの列セパレータを意味します。

追加された質問:

このビューをフィルタリングして、「Title_FR!= Title_EN」の行のみを表示することはできますか?[他の翻訳可能なフィールドでもプロセスは同じだと思います]

1
Baud

追加のモジュールがなければ、ソースと同じ行に翻訳を表示する方法が見つかりませんでした。それがあればいいのに。

これらのモジュールは現在Drupalのセキュリティ勧告ポリシーの対象ではないため、賢明な選択ではない可能性があります。

妥協案は、情報が1行ではなく2行に広がることを示すことです。

  1. 2つの言語のタイトルとフィールドを表示するビューを作成する
  2. IDで並べ替えます(これにより、ソースに近い翻訳が一覧表示されるため、同じコンテンツの翻訳である英語とフランス語のノードのペアが作成されます)
  3. 言語ごとに別の並べ替え条件を追加します(これにより、各ペア内で並べ替えることができるため、最初にフランス語が最初に、次に英語が2番目に優先されます)。

つまり、最終的には次のようになります。

+----+------------+-------------------------+
| ID | Title | Field |
+----+------------+-------------------------+
| 1 | Title_FR_1 | translatable_field_FR_1 |
+----+------------+-------------------------+
| 1 | Title_EN_1 | translatable_field_EN_1 |
+----+------------+-------------------------+
| 2 | Title_FR_2 | translatable_field_FR_2 |
+----+------------+-------------------------+
| 2 | Title_EN_2 | translatable_field_EN_2 |
+----+------------+-------------------------+
| 3 | Title_FR_3 | translatable_field_FR_3 |
+----+------------+-------------------------+
| 3 | Title_EN_3 | translatable_field_EN_3 |
+----+------------+-------------------------+

1
prkos

古い方法であるとしても、私は方法があることを知っていました(私は箱から出してD8でそれが可能になると思っていました)。

ビューフィールドビューモジュールを使用する

Views Field View を使用してそれを行うことができます。これは基本的に、ビューを別のビューに埋め込み、フィールドとして表示します。

親ビューに追加する前に、子ビューを作成する必要があります。親と子は同じビューの2つのディスプレイにすることができますが、2つの異なるビューにある必要はありません。

あなたの場合、子ビューは1つのノードに関連するフィールドのみを表示するようにフィルタリングされ(通常のコンテキストフィルターを使用)、1つのノード情報が1つのテーブル行に表示される、スタイルの良い結果が得られます。

  1. 子ディスプレイとして機能するタイプEmbedのビューディスプレイを作成します。
  2. フィルターしてコンテンツを一覧表示し、フィルターContent: Translation languageを追加してフランス語(または英語)に設定します
  3. タイトルと表示したい他のフィールドを追加します
  4. 形式Unformatted listおよびFields設定の下で、両方のフィールドをInlineに設定します。区切り文字は|のようになります。
  5. コンテキストフィルターContent: IDを追加して、次のように構成します。
    フィルター値が利用できない場合
    デフォルト値を提供
    URLからのコンテンツID
    (オプションで検証基準を指定)
  6. テーブル形式のページビューを作成します(おそらくこれがすでにあるはずです)。
  7. フィルターしてコンテンツを一覧表示し、フィルターContent: Translation languageを追加して英語(または手順2で設定したものとは反対のフランス語)に設定します。
  8. フィールドを追加コンテンツ:IDおよびディスプレイから除外この情報は埋め込みビューに供給され、そのノードの翻訳のみをフィルタリングします
  9. タイトルと表示する必要があるその他のフィールドを追加します
  10. フィールドGlobal: Viewを追加し、[ビュー設定]で最初のドロップダウンからビュー名を選択します
  11. 申し込む
  12. ビューを保存する
  13. Global: Viewをもう一度編集します。今回は、手順1で作成した正確なビューの表示を選択できます。
  14. Contextual filters{{ raw_fields.nid }}を入力するか、ケースで意味のあるものを入力して、置換パターン

同じ行に英語とフランス語のフィールドを持つノードのリストが表示されます。

インラインフィールドは、テーブルセルの外観を正確にエミュレートしない場合があります。これをテーブルセルとして正確に表示し、より複雑なHTMLを上書きして、それらをブレンドすることができます。

0
prkos