2017-01-27 15 views
0

на основе просмотра одной страницы. Я ищу, чтобы моя структура содержимого динамически создавала страницу.Sitecore 7, добавляющий динамический подкласс на основе древовидной структуры

Так, например, с дочерним элементом шаблона ГАЛЕРЕИ это само по себе имеет подпункты с использованием шаблона ГАЛЕРЕЯ, который определяет каждое изображение, которое будет отображаться в карусели; поэтому редактор может просто добавить несколько элементов, и карусель будет масштабироваться соответственно, а не фиксированные поля (баннер, баннер 2 и т. д.).

В настоящее время у меня возникает проблема с пониманием того, как мой подзадача, определяющая галереи HTML, может автоматически включаться на этой главной странице, если этот шаблон присутствует.

Вместо того, чтобы Редактор должен вручную добавить Sublayout и определить datasouce для узла галереи, я бы хотел, чтобы главная страница выполняла итерацию по дереву и наблюдала, что есть шаблон для ГАЛЕРЕИ, поэтому, зная, что нужно использовать подкласс и добавьте его на главную страницу placeholder

В этом принципе страница будет построена самостоятельно в зависимости от того, какие элементы добавляет редактор на страницу.

Оценивается любой совет или образец кода (с использованием веб-форм); в настоящее время мне приходится вручную добавлять подслои, которые, похоже, не интуитивно понятны для Content Editors для сборки страниц.

Благодаря

ответ

0

Если вы правильно используете и настройки редактора Page/Опыт, добавив субкомпоновками и источники данных является очень интуитивный процесс, и позволяет в полной мере воспользоваться всеми функциями и возможностями Sitecore, в частности, персонализацию и тестирование A/B. Это рекомендуемая практика, которой вы должны следовать.

Сказанное, если у вас есть смягчающие обстоятельства, которые действительно мешают вам сделать это, существует более старая техника под названием «Presentation Inversion of Control», которая вытягивает визуализации из элементов, связанных через дерево данных. Это было полезно до «унифицированного редактора страниц» и мастеров источников данных, которые появились в Sitecore 6.4. There are various approaches to this, но самый простой - это подкласс/веб-элемент управления, который вы размещаете на странице.

Следующий код не был протестирован быть на Sitecore 7:

public partial class Gallery: System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     PageItem page = Sitecore.Context.Item; 
     //custom item contains logic for finding items to include 
     foreach (Item galleryItem in page.GalleryItems) 
     { 
      string strDataSource = galleryItem.ID.ToString(); 
      RenderingReference[] renderings = 
       galleryItem.Visualization.GetRenderings(Sitecore.Context.Device, false); 
      foreach (RenderingReference rendering in renderings) 
      { 
       rendering.Settings.DataSource = strDataSource; 
       this.Controls.Add(
        rendering.RenderingItem.GetControl(rendering.Settings)); 
      } 
     } 
    } 
} 

Но на самом деле, вы просто должны правильно реализовать редактор страницы.

+0

Спасибо за ваш совет; Редактор страниц в прошлом был ненадежным для нас - он сохраняет обработанный javascript из DOM в поля, редакторы могут легко сломать страницы, случайно перетаскивая элементы и не всегда действуют стабильно. Редакторы предпочитают использовать редактор содержимого, поскольку они просто хотят редактировать контент и не связаны с решениями макета и проблемами интерфейса - следовательно, подход к автоматической сборке страницы на основе шаблона и типа контента. Мы находимся на SC7, поэтому, возможно, интерфейс улучшился, но иногда редакторы просто хотят редактировать контент, а не создавать макеты веб-сайта. Еще раз спасибо – user3779703

+0

Просто будьте очень осведомлены о том, что, применяя такой подход, вы исключаете использование персонализации и тестирования A/B. Неизбежно ваши пользователи вернутся, желая использовать их, и спросить, почему они не могут (видели это много раз). – techphoria414