0

この質問はそれ自体のトピックに値しないと確信していますが、フォーラムとStackOverflowで満足のいく答えを見つけることができませんでした。

3つのテンプレートがあります。私は自分がやろうとしていることについて明確かつ単純にしようとします。

ページ

{exp:channel:entries channel="page" dynamic="yes"}
    {!-- 'pages_module' is a matrix field --}
    {page_modules}
        {!-- The field 'module' is returning the entry_id from SP Table Select --}
        {embed="module/index" id="{module:value}"}
    {/page_modules}
{/exp:channel:entries}

モジュール-インデックス

{exp:channel:entries channel="module" dynamic="no" entry_id="{embed:id}" site="main_site"}
    {if module_type == "building"}
        {embed="module/building" id="{building_id}"}
    {/if}
    {!-- Other module type checking here... --}
    {!-- Note this following line --}
{entry_id} - {embed:id}
{/exp:channel:entries}

モジュール-構築

{exp:channel:entries channel="building" dynamic="no" entry_id="{embed:id}" site="main_site"}
    <h1>{title}</h1>
    <p>{building_description}</p>
{/exp:channel:entries}

したがって、基本的に、このセットアップでは、ページエントリに「モジュール」をアタッチできます。この特定のケースでは、ページに{module_id}が設定されているかどうかを調べようとしています。その場合は、{module_id}をメインモジュールテンプレートに渡します。これにより、モジュールエントリが取得され、{module_type}が比較され、{building_id}が3番目のテンプレートに送信されます。次に、建物情報が取得されて表示されます。

メモを書いたモジュールテンプレートでは、{entry_id}と{embed:id}が一致しません。{entry_id}は、動的にフェッチされた最初のページエントリのIDと同じです。これは、スニペットではなく埋め込みテンプレートであるため、3つのネストされた{exp:channel:entries}タグが生成されるために発生していると思います。しかし、繰り返しになりますが、IDをスニペットに渡すことはできません。

また、私はMSMを使用しており、8つのサイトを実行しているため、「モジュール」をモジュール式にし、メンテナンスに便利なようにすべて「メインサイト」の下に配置する必要がありました。

誰かがこれを明確にしたり、私が間違っている場合は私を訂正したりできることを願っています。

4

2 に答える 2

1

しかし、ID をスニペットに渡すことはできません。

スニペットはコードのインライン チャンクであるかのように動作するため、同様にその周囲を認識します。たとえば、Module - Index がスニペットの場合、次のようにすることができます。

ページ

{exp:channel:entries channel="page" dynamic="yes"}
    {if module_id}{snippet_module_index}{/if}
{/exp:channel:entries}

スニペット (snippet_module_index)

{exp:channel:entries channel="module" dynamic="no" entry_id="{module_id}" site="main_site"}
    ...
{/exp:channel:entries}

ただし、すべて順風満帆というわけではありません。チャネル エントリ タグがネストされているため、通常は避けるのが最善です。リレーションシップ フィールドを使用しない特定の理由はありますか? 明らか{module_id}にモジュール チャネルのエントリに対応しているので、ここで EE の組み込み機能を利用してみませんか? リレーションシップを突然使い始めると、次のようなことができます。

{exp:channel:entries channel="page" dynamic="yes"}
    {related_entries id="related_module"}
        {if module_type == 'building'}  
            Embed/snippet containing building 'module'
        {/if}
    {/related_entries}
{/exp:channel:entries}

どのアプローチがあなたのニーズに最も適しているかを正確に知ることは困難ですが、複数のチャンネル エントリの呼び出しやネストされた埋め込みを避けて、関係とスニペ​​ットを優先する方がはるかに優れていると思います。かなりのオーバーヘッドも回避できるはずです。

于 2012-11-12T18:38:48.347 に答える
0

ドキュメントで引用されているように:

別のサイトからテンプレートを埋め込む

別のサイトからテンプレートを埋め込むには、次のようにテンプレート グループと指定されたテンプレートの前に、テンプレートを取得するサイトの短い名前を付けます。

{embed="site_short_name:template_group/template"}

しかし!

複数の場所を指定する(ヘッドトリップの準備)

{embed=”“}注:タグでは、複数のサイトを指定しても機能しません。

次に、PHPでこの制限を回避できると思いましたが、基本的なものでさえあるようです...

$output = $this->EE->TMPL->parse_variables('{exp:channel:entries channel="module" dynamic="no" site="main_site"}{entry_id}{/exp:channel:entries}', array());

...期待値を返しません。それ自体が別のサイトからデータを取得するテンプレートを埋め込む方法はないようです。チャンネル/テンプレートを繰り返さないことは、マルチサイトマネージャーを使用する正確な理由であるため、他のものからデータを取得するため、これは残念です...

于 2012-11-13T14:31:52.107 に答える