web-dev-qa-db-ja.com

twigテンプレートでビューテーブル形式を使用して生データにアクセスする方法

表形式のビューを使用して記事のリストを表示します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の助けがなければ私を救うことができなかったでしょう)。

2

たとえば、結果行にフィールドハンドラの getValue() を適用してみます。

{% if view.field.field_name.value(view.result[key]) %}

編集:

ビューテーブルテンプレートでは、rowResultRowタイプではないため、ループのviewを使用してkeyオブジェクトから直接取得する必要があります{% for key, row in rows %}

さまざまなビューテンプレートについては、次の質問を参照してください。 ビューテンプレートのResultRowオブジェクトからデータを取得する方法 および ビューフィールドを前処理する方法

2
4k4