在ExpressionEngine中,我有一个显示新闻项目的新闻模板。我正在尝试实现一个select元素,允许用户选择特定年份,然后只查看该年内输入的新闻项目。
到目前为止,这是我的代码:
<select name="select_year">
<option value="">Select year</option>
<option value="2011">2011</option>
<option value="2010">2010</option>
<option value="2009">2009</option>
</select>
{exp:channel:entries
channel="news-items"
disable="categories|category_fields|trackbacks"
dynamic="off"
require_entry="yes"
sort="desc"
search:news-item-featured="featured"
limit="1"}
<div align="left">
<h2 align="center" style="margin-top: 0pt; margin-bottom: 0pt;">{title}</h2>
</div>
{if news-item-main-image}
{exp:imgsizer:size src="{news-item-main-image}" width="352"}
<p style="margin-top: 0pt;"><img align="middle" width="352" src="{sized}"></p>
{/exp:imgsizer:size}
{/if}
{news-item-intro-text}
<p><a href="{title_permalink='news-item'}">Click here to read the full story. </a></p>
{/exp:channel:entries}
<br><br>
<h3 style="margin-top: 0pt;">News History</h3>
<ul>
{exp:channel:entries
channel="news-items"
disable="categories|category_fields|trackbacks"
dynamic="off"
require_entry="yes"
limit="19"
paginate="bottom"
paginate_base="/news"}
<li><p></p><h3><a href="{title_permalink='news-item'}">{title}</a></h3>
<input type="hidden" value="" name="news_id">{entry_date format="%n/%j/%Y"} - </li>
{paginate}
</ul>
<p><br />
{pagination_links}
{current_page} of {total_pages}
</p>
{/paginate}
{/exp:channel:entries}
代码显示当前的所有新闻项目。这包括最顶部的特色新闻项目和其下所有先前新闻项目的超链接列表。
有没有办法可以指定一个变量来存储最顶部的select元素中的选定值,以便我可以将它与下面的新闻项一起使用?或者有更好的方法吗?
答案 0 :(得分:2)
有几种方法可以解决这个问题(就像EE中的大多数任务一样)。您可以考虑使用EE的dynamic parameters功能。 EE的动态参数允许您的用户从各种选项(包括年份)中进行选择,但它们也会禁用模板的缓存,并且不会更新URL。
您还可以使用网址段来控制正在显示的年份。这比使用动态参数更常见。假设您的新闻索引页面位于http://site.com/news。您可以通过添加第二个网址段来触发“存档”功能,如下所示:http://site.com/news/archive。
然后,在模板中,您可以使用简单的条件来触发存档布局的某些代码。以下是使用此方法的页面外观(粗体的重要更改):
{exp:channel:entries
channel="news-items"
disable="categories|category_fields|trackbacks"
dynamic="off"
require_entry="yes"
sort="desc"
search:news-item-featured="featured"
limit="1"
{if segment_2 == 'archive'}year="{segment_3}"{/if}
}
<div align="left">
<h2 align="center" style="margin-top: 0pt; margin-bottom: 0pt;">{title}</h2>
</div>
{if news-item-main-image}
{exp:imgsizer:size src="{news-item-main-image}" width="352"}
<p style="margin-top: 0pt;"><img align="middle" width="352" src="{sized}"></p>
{/exp:imgsizer:size}
{/if}
{news-item-intro-text}
<p><a href="{title_permalink='news-item'}">Click here to read the full story.</a></p>
{/exp:channel:entries}
{exp:channel:entries
channel="news-items"
disable="categories|category_fields|trackbacks"
dynamic="off"
require_entry="yes"
limit="19"
paginate="bottom"
paginate_base="/news"
**{if segment_2 == 'archive'}year="{segment_3}"{/if}**
}
{if count == '1'}
<h3>News History **{if segment_2 == 'archive'} for {segment_3}{/if}**</h3>
<ul>
{/if}
<li>
<h3><a href="{title_permalink='news-item'}">{title}</a></h3>
<input type="hidden" value="" name="news_id">{entry_date format="%n/%j/%Y"} -
</li>
{if count == total_results}
</ul>
{/if}
{paginate}
<p>
{pagination_links}
{current_page} of {total_pages}
</p>
{/paginate}
{/exp:channel:entries}
请注意,我只是在您的代码中添加了一些{if segment_2 == 'archive'}{/if}
条件标记。
此外,您可以放弃选择下拉菜单,并使用Low的免费 Yearly Archives plugin进行EE。此插件为您提供了大量灵活性,可用于呈现年度/月度归档链接。如果您真的想保留选择菜单,可以在混合中添加一些JavaScript,让每个选项将用户重定向到正确的存档URL。