表形式のビューを使用して記事のリストを表示しますarticle-list
ドラッグ可能なビューを使用して、編集者がリストを注文できるようにします。ブールフィールドis_header
とフォーマット済みテキストフィールドtitle_override
に応じて、行のコンテンツをカスタマイズします。これを達成するために、私はviews-view-table--article-list.html.twig
というサブテーマを付けました。それは十分に機能します。
テンプレートでは、次のようにis_header
の真実とtitle_override
の空でないことをテストします。
{% if row.columns.field_is_header|render|striptags|trim %}
そして
{% if row.columns.field_title_override|render|striptags|trim %}
これらのテストは適切な結果をもたらしますが、テンプレートを非常に遅くします! render|striptags|trim
未満は機能しません。
質問:
これらの変数の生データ値に直接アクセスしてrender|striptags|trim
オーバーヘッドを回避する方法はありますか?
row._entity.field_is_header
のようなものを使用するための提案を見てきましたが、_entity
を使用するこの方法は、HTMLまたはフォーマットされていないビュースタイルのテンプレートでのみ機能するようです。これを行う簡単な方法があるはずです。
注意として、HTMLまたはUnformattedスタイルの使用への切り替えは、AFAIKのドラッグ可能なビューはテーブル形式でのみ設定できるため、不可能と思われます。
回答:
この質問への回答をありがとう4k4(下記参照)。私の特定の質問に彼/彼女の一般的な答えを適用するために、ここにtwigスクリプトのスニペットがあります:
{% for key, row in rows %}
{% if view.field.field_is_header.value(view.result[key]) %}
<conditional stuff>
{% endif %}
{% if view.field.field_title_override.value(view.result[key]) %}
<stuff when the override is non-empty>
{% else %}
<stuff when the override is empty>
{% endif %}
{% endfor %}
rows
は、元のテンプレートのヘッダーコメントに記載されているように、通常はviews-view-table.html.twigテンプレートに渡される配列です。 view
配列の可用性は、元のテンプレートのヘッダーコメントに記載されていないことにも注意してください(4k4の助けがなければ私を救うことができなかったでしょう)。
たとえば、結果行にフィールドハンドラの getValue() を適用してみます。
{% if view.field.field_name.value(view.result[key]) %}
編集:
ビューテーブルテンプレートでは、row
はResultRow
タイプではないため、ループのview
を使用してkey
オブジェクトから直接取得する必要があります{% for key, row in rows %}
。
さまざまなビューテンプレートについては、次の質問を参照してください。 ビューテンプレートのResultRowオブジェクトからデータを取得する方法 および ビューフィールドを前処理する方法