再利用には、オブジェクトタイプが変更されたとき(エントリ対ブロック)が含まれます – 最良の方法は何ですか?

だから、スタンドアローンのフィールド(ビデオ、ダウンロードなど)として使用されているマトリックスビルダーのために構築されたインクルードファイルを再利用しようとしています。私がこれをコード化したのは、オブジェクト/ハンドルが
block.handlename から entry.handlename
に変更され、これをコード化する最も効率的な方法は何でしょうか?

現在のところ、これは私がやったことですが、それが「正しい」と感じているのではないでしょうか?

ビデオを例に挙げてみましょう。インクルードファイル
_includes/matrix/video.html があります 私はMatrix
Blockからこのように呼び出しています。

{% for block in entry.mainContent.level(1) %}
{% switch block.type %}
{% case block.type %}
{% include '_includes/matrix/' ~ block.type %}
{% endswitch %}
{% endfor %}

また、そのようなエントリテンプレートもあります。

{% if entry.video|length %}
<div id="video" class="tab">
    <div class="tab__content">
        {% include '_includes/matrix/video' with { object : entry } %}
    </div>
</div>
{% endif %}

私のビデオのインクルードファイル _includes/matrix/video.html
にはこれがあります。

{% set object = object ?? block %}
{% set url = object.video %}

<div class="videoWrapper">
    {{ url|videoEmbed({ byline: 0, autoplay: 0, rel:0 }) }}
</div>

しかし、これは私がエントリーを呼び出すたびに毎回これが必要であることを意味しますか?
{object:entry}%} {%include
'_includes/matrix/video
これが最善のアプローチですか?

どんな提案/推奨?

ベストアンサー

ここからわかるように、インクルードファイルで気にする唯一の重要なオブジェクトは、ビデオオブジェクトです。だからあなたができることは、ビデオフィールドをパラメータに直接渡して、エントリのために使うことです:

{% include '_includes/matrix/video' with { video : entry.video } only %}

…と行列ブロックの場合:

{% include '_includes/matrix/video' with { video : block.video } only %}

But then you would need to explicitly call each
matrix block type with associated parameters.

いずれの場合でも、 "only"
キーワードをパラメータの後ろに追加すると、テンプレートがメインテンプレートで既に定義されている他の変数から隔離されることが保証されます。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です