【问题标题】:How do you create a news archive in umbraco?您如何在 umbraco 中创建新闻档案?
【发布时间】:2011-08-18 10:37:57
【问题描述】:

我正在尝试在 umbraco 中创建一个新闻档案,其中将显示按月组织的新闻页面列表。每个页面都会显示当月的新闻列表。

我关注了tutorial for creating news items,但我不确定如何创建存档。似乎也没有任何参考可以在线执行此操作。当然,这是 CMS 的常见用例。

任何人有任何想法(如果需要编码,最好在 razorscript 中)?

【问题讨论】:

标签: umbraco


【解决方案1】:

我最终使用了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>

【讨论】:

    【解决方案2】:

    在 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>
    

    【讨论】:

      猜你喜欢
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      • 2014-05-16
      • 1970-01-01
      相关资源
      最近更新 更多