Sitecore 8: автоматическое заполнение заполнителя при отображении по умолчанию
Я играл с динамическими заполнителями и был поражен концепцией предварительного заполнения. Есть ли способ выбрать рендеринг по умолчанию для одного из моих заполнителей, который позволит избежать диалога "выбрать рендеринг" в редакторе опыта?
Сценарий: у меня есть рендеринг под названием "PageHead", который имеет три рендеринга. Одним из них является заполнитель "PageTeaserPh", который в настоящее время допускает два рендеринга: один "PageTeaser" и второй "PageTeaserWithImage". Я хочу, чтобы заполнитель "PageTeaserPh" всегда выбирал рендеринг как "PageTeaser" и поэтому избегал диалогового окна "Выбор рендеринга".
Я сделал некоторую домашнюю работу, и мне было интересно, связано ли это со стандартными значениями (у нас это может быть на уровне шаблона; хотя мы не уверены в визуализации), а также я слышал о концепции шаблона команды (не всесторонне).
Любая помощь приветствуется.
1 ответ
Вы можете назначить визуализации для стандартных значений шаблонов, каждый новый элемент будет иметь свой рендеринг PageTeaser.
Если вы хотите автоматизировать этот процесс, посмотрите на <mvc.getXmlBasedLayoutDefinition>
конвейер, мы вводим общие рендеры, расширяя этот конвейер.
обновленный
Я нашел несколько примеров кода и постов в блоге, которые должны помочь вам в правильном направлении для манипулирования деталями макета.
public void AddSublayoutToItem(string itemId, string sublayoutId)
{
using (new Sitecore.SecurityModel.SecurityDisabler())
{
if (Sitecore.Data.ID.IsID(itemId) && Sitecore.Data.ID.IsID(sublayoutId))
{
//Get the master database and get the item on which you want to add sublayout
Database masterDatabase = Database.GetDatabase("master");
Item item = masterDatabase.GetItem(Sitecore.Data.ID.Parse(itemId));
// Or you can also get Sitecore Item from Context Database as per your requirement
// Item item = Sitecore.Context.Database.GetItem(Sitecore.Data.ID.Parse(itemId));
if (item != null)
{
// Get the layout definitions and the device definition
LayoutField layoutField = new LayoutField(item.Fields[Sitecore.FieldIDs.LayoutField]);
LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value);
DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(Sitecore.Context.Device.ID.ToString());
//Create a RenderingDefinition and add the reference of sublayout or rendering
RenderingDefinition renderingDefinition = new RenderingDefinition();
renderingDefinition.ItemID = sublayoutId;
//Set placeholder where the rendering should be displayed
renderingDefinition.Placeholder = "content";
// Set the datasource of sublayout, if any
renderingDefinition.Datasource = "{24240FF2-B4AA-4EB2-B0A4-63E027934C38}";
// you can also set datasource of sublayout using Sitecore Path
// renderingDefinition.Datasource = "/sitecore/content/Home/Books";
//Add the RenderingReference to the DeviceDefinition
deviceDefinition.AddRendering(renderingDefinition);
// Save the layout changes
item.Editing.BeginEdit();
layoutField.Value = layoutDefinition.ToXml(); ;
item.Editing.EndEdit();
}
}
}
}
Взято отсюда - http://www.bugdebugzone.com/2014/06/how-to-add-sublayout-to-sitecore-item.html
Также пара других блогов на тему