Umbraco - повторяющийся контент - PullRequest
0 голосов
/ 24 февраля 2011

Я впервые использую Umbraco для разработки дизайна сайта для клиента.Каждая страница состоит из повторяющихся панелей содержимого - каждая панель содержит изображение, заголовок и основной текст.

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

Кроме того, я бы хотел, чтобы клиент мог также добавлять и удалять панели с каждой страницы.

Может кто-нибудь дать мне пример макрокода для этого?Любая помощь высоко ценится!

1 Ответ

3 голосов
/ 24 февраля 2011

Если вы посмотрите на пакет Blog4Umbraco, вы увидите очень подробный пример того, что вы пытаетесь сделать. (не хочу пропускать весь макрос здесь, , но вы можете найти его здесь ). Думайте о каждой "панели" как о сообщении в блоге и смотрите на макрос XSLT /, который показывает последние 10 блогов. сообщения на одном экране - вы можете легко адаптировать это к тому, что вы делаете. Вы должны создать тип документа и шаблон для «панелей», пользователь будет создавать контент для любого количества панелей, а измененная версия XSLT будет проходить по каждой из них и отображать информацию на вашей странице.

Если вы предпочитаете (как я), вы можете использовать пользовательский элемент управления asp.net, чтобы сделать то же самое так же легко (особенно если вы более знакомы с .net, чем XSLT).

Создайте шаблон с таким кодом: (этот пример для простого элемента управления блогом):

  <ItemTemplate>
    <div class="blogTitle"><a href="<%# DataBinder.Eval(Container.DataItem, "Url") %>"> <%# DataBinder.Eval(Container.DataItem, "NodeName") %> </a></div>
    <div class="blogDate">Post Date: <%# String.Format("{0:D}", Convert.ToDateTime(DataBinder.Eval(Container.DataItem, "Post Date")))%></div>
    <div class="blogContent"><%# DataBinder.Eval(Container.DataItem, "Content") %></div>
  </ItemTemplate>

и затем в коде загрузки страницы вы можете привязать дочерние элементы к этому повторителю следующим образом:

        //To get the nodes as a datatable so you can use it for DataBinding use this method
    var children = currentNode.ChildrenAsTable();

    rptPosts.DataSource = children;
    rptPosts.DataBind();
...