1

パラメータとして渡されたときにグローバル変数が解析されないという問題があります。

{exp:channel:entries    
    disable="categories|category_fields|member_data|pagination|trackbacks"
    dynamic="no"
    entry_id="{structure:child_ids_for:21}"
}

(0.012500 / 3.36MB) タグ: {exp:channel:entries disable="categories|category_fields|member_data|pagination|trackbacks" dynamic="no" entry_id="{structure:child_ids_for:21}" }

parse="inward" の有無にかかわらず、同じ結果が生成されます。

ただし、これは正常に機能し、必要なデータを取得します

{exp:channel:entries    
    disable="categories|category_fields|member_data|pagination|trackbacks"
    dynamic="no"
    entry_id="{exp:query sql='SELECT exp_structure.entry_id, 
            exp_structure.parent_id, 
            exp_structure.lft
            FROM exp_structure
            WHERE parent_id = 21
            ORDER BY exp_structure.lft ASC'}{entry_id}|{/exp:query}"
    parse="inward"
}

しかし、グローバル変数 author_id="{logged_in_member_id}" を追加すると機能しません。その値を 1 としてハードコーディングすると機能します。

ここで何が起こっているのかについて何か考えはありますか?

4

2 に答える 2

1

このような場合にStashを使用することで、埋め込みのオーバーヘッドを回避できます。コードのさまざまなチャンクに対して優先する解析順序を明示的に指定できる、非常に便利な機能があります。この場合、最初に を介して 2 つの変数を格納し{exp:stash:set}、次に を介してコードの 2 番目のチャンクでそれらを取得できます{exp:stash:get}。魔法のビットは解析優先度タグです。{exp:stash:parse}最初の項目の優先度は 10 であるため、最初に実行されます。これにより、vars が 2 番目のタグのチャネル エントリ パラメータとして使用できるようになります。

{exp:stash:parse priority="10" process="end"}
    {exp:stash:set}
        {stash:structure_ids}{structure:sibling_ids}{/stash:structure_ids}
        {stash:logged_in_member}{logged_in_member_id}{/stash:logged_in_member}
    {/exp:stash:set}
{/exp:stash:parse}

{exp:stash:parse priority="20" process="end"}
    {exp:channel:entries
        disable="categories|category_fields|member_data|pagination|trackbacks"
        dynamic="no"
        entry_id="{exp:stash:get name='structure_ids'}"
        author_id="{exp:stash:get name='logged_in_member'}"
        parse="inward"
    }
    ...
    {/exp:channel:entries}
{/exp:stash:parse}
于 2012-11-14T15:49:02.927 に答える
0

Structure のグローバル変数について話すことはできませんが、{logged_in_member_id}後で解析されるグローバル変数です。つまり、モジュール タグ パラメーターでは使用できません。構造変数についても同じことが言えるとしか思えません。

ただし、パラメーターで定数を使用できます( docs )。CURRENT_USERauthor_id

残念ながら、問題の解決策は、それを埋め込み変数{structure:child_ids_for:21}として渡し、Channel Entries ループを埋め込みに配置することです。(残念ながら、埋め込みにはオーバーヘッドが発生するためです。)

1 つの注意:parse="inward"モジュール タグのペアには影響しません - それらは常に内側に解析されます。プラグイン タグのペアにのみ影響します。

于 2012-11-14T01:50:23.923 に答える