好的,在我的主页上,我想提取3个新闻列表;主要新闻,特色新闻和新闻头条。一次只能在主要新闻标题下显示一个项目,任何其他标记为此类的条目将过滤回特色新闻列表。
我的问题是捕获'one'主要新闻项的entry_id并将其从特色列表中排除。主要新闻项目可能并不总是最新的新闻项目,因此使用offset =“1”排除规则。
所以我把一些Stash集合在一起,根据自定义字段过滤掉新闻(cf_news_article_type)。 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>
现在最大的问题是:如何从特色新闻列表中排除该单个主要新闻项目,但是当我获得精选存储列表时,将其他项目标记为“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>
然后,对于我的头条新闻,我很想排除这两个列表中显示的所有精选和主要新闻项目,但我会在另一篇文章中解决这个问题。
这甚至是做这种事情的正确方法吗? 任何帮助将不胜感激。
答案 0 :(得分:1)
如何分别存储您的精选新闻文章?例如:
{!-- 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>