我正在尝试在umbraco中创建一个新闻档案,它会显示按月组织的新闻页面列表。每个页面都会显示该月新闻的列表。
我已关注tutorial for creating news items,但我不确定如何创建档案。似乎没有任何参考在线进行此操作。当然,它是CMS的常见用例。
任何人都有任何想法(如果需要编码,最好是razorscript)?
答案 0 :(得分:6)
我最终使用了datefolders软件包,该软件包会根据预定义的日期字段自动将新闻项目分类到正确的年份和月份文件夹,就像@amelvin response一样。日期文件夹的好处是它简化了用户必须手动将文章排序到正确的文件夹并维护该组织。他们只需右键单击新闻容器项,创建文章,设置日期,它就会出现在右侧文件夹中。此外,它会在更改日期时更改文件夹。
就档案的显示而言,我有以下剃刀代码,其中NewsListing
是列出文档类型的新闻项目,NewsItem
是新闻项目文档类型:
边栏中的档案列表
<umbraco:Macro runat="server" language="cshtml">
@{
dynamic newsListingNode = Model.AncestorOrSelf(1).DescendantsOrSelf("NewsListing").First();
}
<div class="archive">
<ul>
@foreach (var newsYear in newsListingNode.Children)
{
foreach (var newsMonth in newsYear.Children)
{
@* Use format time to get the month string *@
dynamic dateLabel = umbraco.library.FormatDateTime(newsYear.Name + " " + newsMonth.Name + " 01", "MMMM yyyy");
<li><a href="@newsMonth.Url">@dateLabel»</a></li>
}
}
</ul>
</div>
</umbraco:Macro>
月份存档页面
<umbraco:Macro runat="server" language="cshtml">
@* Check the it is a month folder *@
@if ((@Model.NodeTypeAlias == "NewsDateFolder") &&
(@Model.Up().NodeTypeAlias == "NewsDateFolder") &&
(@Model.Up().Up().NodeTypeAlias == "NewsListing"))
{
dynamic newsMonth = Model;
dynamic newsYear = Model.Up();
dynamic dateLabel = umbraco.library.FormatDateTime(newsYear.Name + " " + newsMonth.Name + " 01", "MMMM yyyy");
<div class="news">
<h2>News archive: @dateLabel</h2>
@{
dynamic newsItems = Model.DescendantsOrSelf("NewsItem").OrderBy("sortDate desc");
}
@foreach(var newsItem in newsItems) {
<div class="block-content">
<h5><a href="@newsItem.Url">@newsItem.Name</a></h5>
<p>@newsItem.summaryText</p>
<a href="@newsItem.Url">more»</a>
</div>
}
</div>
}
</umbraco:Macro>
答案 1 :(得分:3)
Umbraco中最明显的解决方案是在“内容”部分安排您的文件夹结构,以匹配您希望网站排列项目的方式,然后使用简单的xsl转换来构建索引页面。
代码两个模板(“设置”部分),一个用于显示每个月的索引,另一个用于显示单个文章。
所以文件夹结构如:
> Content
> |--Home
> |--2011
> |--01 January
> |--News article 1
> |--News article 2
> |--News article 3
> |--News article 4
> |--02 February
> |--News article 5
> |--News article 6
> |--News article 7
然后使用一些简单的xsl作为宏添加到索引模板(类似于以下)来运行新闻文章(我从umbNewsListItems.xslt得到这个,我认为它来自新闻样本网站):
<xsl:template match="/">
<!-- The fun starts here -->
<div class="newsList">
<xsl:for-each select="$currentPage/* [@isDoc and string(umbracoNaviHide) != '1']">
<xsl:sort select="@updateDate" order="ascending" />
<h3 class="headline"> <a href="{umbraco.library:NiceUrl(@id)}">
<xsl:value-of select="@nodeName"/>
</a>
</h3>
<small class="meta">Posted: <xsl:value-of select="umbraco.library:LongDate(@updateDate, true(), ' - ')"/></small><br/>
<p class="introduction">
<xsl:value-of select="umbraco.library:ReplaceLineBreaks(introduction)" disable-output-escaping="yes"/>
</p>
</xsl:for-each>
</div>
</xsl:template>