2
對於項目需求之一,我想在運行時向項目添加子圖層,並且應該將此子圖層添加到設備(默認打印機),因此我使用了以下代碼:以編程方式向項目特定設備添加子圖層
Item item = GetDatabase().GetItem(Sitecore.Data.ID.Parse(itemId));
if (item != null)
{
LayoutField layoutField = new LayoutField(item.Fields[Sitecore.FieldIDs.LayoutField]);
LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value);
string[] targetedDevices = new string[] { "{FE5D7FDF-89C0-4D99-9AA3-B5FBD009C9F3}", "{46D2F427-4CE5-4E1F-BA10-EF3636F43534}" };
foreach (var device in targetedDevices)
{
DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(device);
RenderingDefinition renderingDefinition = new RenderingDefinition();
renderingDefinition.ItemID = sublayoutId;
renderingDefinition.Placeholder = "column-content";
deviceDefinition.AddRendering(renderingDefinition);
}
// Save the layout changes
item.Editing.BeginEdit();
layoutField.Value = layoutDefinition.ToXml(); ;
item.Editing.EndEdit();
}
我的問題是,是否有另一種方式選擇像sitecore API的演示設備?由於我很難編碼目標設備的ID。
爲什麼不只是將組件添加到標準值的表示詳細信息中的所有設備中,然後只使用規則引擎/ Personlisation隱藏不應使用它顯示的設備的組件? – jammykam
是的,我可以做到這一點,但我在尋找的是,如果我可以得到我需要使用sitecore API的設備,如:Sitecore.Context.Device.ID.ToString(),但這檢索當前的內容設備如果我需要特定上下文以外的設備。 –
上面的代碼在哪裏運行?當編輯器進行更改/創建項目或向用戶呈現項目時?我不認爲有這些API,因爲您可以添加自己的設備定義,因此您可以輕鬆擴展,甚至刪除Sitecore提供的設備,因此無法提供「Devices.Default」 (或類似)。 – jammykam