4

たとえば、次のように、カテゴリで Stash Context を使用する方法があることを願っています。

{exp:channel:entries channel="channel-name" dynamic="no" disable="member_data|pagination"}
    {exp:stash:append_list name='list' parse_tags="yes" save="yes" scope="site" context='{categories}{category_name}{/categories}'}
        {stash:this_title}{title}{/stash:this_title}
        {categories}
            {stash:this_category_name}
                {category_name}
            {/stash:this_category_name}
        {/categories}
    {/exp:stash:append_list}
{/exp:channel:entries}


{exp:stash:get_list name="list" parse_tags="yes" parse_conditionals="yes" context="{this_category_name}"}                   
    <div>
        all my stash variables and html etc.
    </div>
{/exp:stash:get_list}

ただし、次のことができることはわかっていますが、これは、カテゴリが追加されるたびに誰かがテンプレートを編集する必要があることを意味します.

{exp:stash:get_list name="list" parse_tags="yes" parse_conditionals="yes" context="category1"}                  
    <div>
        all my stash variables and html etc.
    </div>
{/exp:stash:get_list}


{exp:stash:get_list name="list" parse_tags="yes" parse_conditionals="yes" context="category2"}                  
    <div>
        all my stash variables and html etc.
    </div>
{/exp:stash:get_list}

そうは言っても、私の質問は、Stash コンテキストと ExpressionEngine カテゴリを動的に使用する方法はありますか?

4

3 に答える 3

7

あなたが抱えている問題は、複数の反復を実行するexp:channel:entriesループに帰着します。次に、Stashを使用して値の連想配列を設定します。channel:entriesが競合すると、{this_category_name}変数の配列が作成されるため、実際には通常の変数のように設定されることはありません。

したがって、実際にはいくつかのオプションがあります。

  1. URIセグメントは早期に解析されるため、URIセグメントを使用してください。
  2. exp:stash:setタグを使用して、ページの後半で解析できるスニペット型変数を設定します。
  3. 値をハードコーディングする

これが私のコードです。これは私がテストしたものであり、私の側で100%動作することを確認できます。1つの注意点、エントリに複数のカテゴリがある場合、これは機能しなくなります。これは、反復内で設定された最初のカテゴリを使用すると思います。

解析順序を操作するには、必ずprocess = "end"パラメーターを使用してください。そうしないと、画面が空白になります。

{exp:channel:entries channel="your-channel" dynamic="no" disable="member_data|pagination"}
    {exp:stash:append_list name='list' parse_tags="yes" save="yes" scope="site" context='{categories}{category_name}{/categories}'}
        {stash:this_title}{title}{/stash:this_title}
        {categories}
            {stash:this_category_name}
                {category_name}
            {/stash:this_category_name}

            {exp:stash:set name="test_var" type="snippet"}{category_name}{/exp:stash:set}
        {/categories}
    {/exp:stash:append_list}
{/exp:channel:entries}

{exp:stash:parse process="end"}

    {exp:stash:get_list name="list" parse_tags="yes" parse_conditionals="yes" context="{test_var}" process="end"}
        <div>
            all my stash variables and html etc.
        </div>
    {/exp:stash:get_list}

{/exp:stash:parse}

私は、あなたの問題に取り組むためのはるかに良い方法がある可能性が高いことを付け加えます。あなたがやろうとしていることの論理は、実際には足し合わない。私は単にStashについてのあなたの質問に答えようとしていただけで、それができるかどうかと最善の方法であるかどうかを比較しました。

于 2012-10-23T23:10:16.873 に答える
4

コンテキストを使用する必要がある理由は何ですか?get_listを使用してデータを出力しようとしている方法がわかりません。このような何かがあなたがする必要があることを達成しますか?

于 2012-10-23T22:55:58.037 に答える
1

stash タグのパラメーターとして実行するのではなく、append_list タグ全体を {categories}{/categories} でラップする必要があるのではないでしょうか?

そうは言っても、解析順序の問題である可能性もあるため、どこかに exp:stash:parse が必要になる場合もあります。

于 2012-10-23T22:46:34.960 に答える