gpt4 book ai didi

expressionengine - 从存储列表中排除某些条目

转载 作者:行者123 更新时间:2023-12-04 07:23:32 25 4
gpt4 key购买 nike

好的,在我的主页上,我想拉出 3 个新闻项目列表;重大新闻、专题新闻和新闻标题。一次只应在“主要新闻”标题下显示一项,任何其他被标记为此类的条目将过滤回精选新闻列表。

我的问题是捕获“一个”主要新闻项目的 entry_id 并将其从精选列表中排除。主要新闻项目可能并不总是最新的新闻项目,因此排除使用 offset="1"的可能性。

所以我整理了一些基于自定义字段(cf_news_article_type)过滤新闻的 Stash 集。 cf_news_article_type 是用户在添加新闻项目时设置的 3 个单选按钮的列表。字段的值设置如下:

mj : Major Feature
gf : Featured Article
gn : General article

我收藏了一组来自所有类型的 13 条新闻:
{!-- Bring out all the recent news --}
{exp:channel:entries channel="news" orderby="date" sort="desc" dynamic="no" limit="13" parse="inward" disable="categories|category_fields|member_data|pagination|trackbacks"}
{exp:stash:append_list name='recent_articles'}
{stash:item_count}{count}{/stash:item_count}
{stash:item_type}{cf_news_article_type}{/stash:item_type}
{stash:item_title}{title}{/stash:item_title}
{/exp:stash:append_list}
{/exp:channel:entries}

然后在我的模板中,我提取了主要新闻项目:
<article class="major-feature">
{exp:stash:get_list name="recent_articles" match="#mj#" against="item_type" limit="1" parse_tags="yes"}
{sn_news_story}
{/exp:stash:get_list}
</article>

现在最大的问题是:如何从精选新闻列表中排除该单个主要新闻项目,但在获得精选 Stash 列表时将其他项目标记为“mj”?
<section class="featured-stories">
<h1>Featured stories</h1>
{exp:stash:get_list name="recent_articles" match="#(mj|gf)#" against="item_type" limit="3" parse_tags="yes"}
{sn_news_story}
{/exp:stash:get_list}
</section>

然后,对于我的头条新闻,我想排除这两个列表中显示的所有精选新闻和主要新闻,但我会在我认为的另一篇文章中解决这个问题。

这甚至是做这种事情的正确方法吗?
任何帮助将不胜感激。

最佳答案

单独存放您的精选新闻怎么样?例如:

{!-- find just the featured article --}
{exp:channel:entries channel="news" orderby="date" sort="desc" dynamic="no" search:cf_news_article_type="mj" limit="1" parse="inward"}
{exp:stash:append_list name='featured_article'}
{stash:item_count}{count}{/stash:item_count}
{stash:item_type}{cf_news_article_type}{/stash:item_type}
{stash:item_title}{title}{/stash:item_title}
{/exp:stash:append_list}
{exp:stash:set_value name="featured_article_id" value="{entry_id}" type="snippet"}
{/exp:channel:entries}

然后,当您找到其余新闻时,只需忽略您已经收藏的精选文章:
{!-- find the rest of the news --}
{exp:channel:entries channel="news" orderby="date" sort="desc" dynamic="no" limit="12" entry_id="not {featured_article_id}" parse="inward"}
{exp:stash:append_list name='recent_articles'}
{stash:item_count}{count}{/stash:item_count}
{stash:item_type}{cf_news_article_type}{/stash:item_type}
{stash:item_title}{title}{/stash:item_title}
{/exp:stash:append_list}
{/exp:channel:entries}

(我不确定您是否会遇到 {featured_article_id} 的解析顺序问题,但如果是这样,应该有办法解决它)

或者,如果您不介意所有精选新闻文章都位于列表顶部,则可以使用 orderby="cf_news_article_type|date" ,然后只需使用 limit=""offset=""将第一篇新闻文章从列表中删除。

更新:您也可以反过来执行此操作,并在检索列表时检查 entry_id:
<article class="major-feature">
{exp:stash:get_list name="recent_articles" match="#mj#" against="item_type" limit="1" parse_tags="yes"}
{exp:stash:set_value name="featured_article_id" value="{entry_id}" type="snippet"}
{sn_news_story}
{/exp:stash:get_list}
</article>

<section class="featured-stories">
<h1>Featured stories</h1>
{exp:stash:get_list name="recent_articles" match="#(mj|gf)#" against="item_type" limit="3" parse_tags="yes"}
{if "{entry_id}" != "{featured_article_id}"}
{sn_news_story}
{/if}
{/exp:stash:get_list}
</section>

关于expressionengine - 从存储列表中排除某些条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13168098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com