Как создать архив новостей в umbraco? - PullRequest
4 голосов
/ 18 августа 2011

Я пытаюсь создать архив новостей в umbraco, где бы отображался список страниц новостей, упорядоченных по месяцам. На каждой странице будет отображаться список новостей за этот месяц.

Я следовал учебнику для создания новостей , но я не уверен, как создать архив. Там, кажется, нет никаких ссылок, чтобы сделать это онлайн. Конечно, это общий случай использования CMS.

У кого-нибудь есть идеи (желательно в razorscript, если требуется кодирование)?

Ответы [ 2 ]

6 голосов
/ 05 сентября 2011

В итоге я использовал пакет 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>
3 голосов
/ 18 августа 2011

Наиболее очевидным решением в 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, который, как мне кажется, пришел с образца сайта новостей):

...