Связать элемент макета с узлами элемента программно в SiteCore - PullRequest
4 голосов
/ 07 июля 2011

Я программно создаю узлы элементов дерева контента, используя данные в формате xls. Я сталкиваюсь с проблемами при привязке макета к узлам элемента. Я не могу определить какой-либо метод установки для элемента, который я могу использовать. Я думал об использовании свойств Item.Visualization, но это не помогло. Кто-нибудь может посоветовать или помочь с примером кода, как программно связать элемент макета с узлами элемента.

1 Ответ

5 голосов
/ 07 июля 2011

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

   using(new SecurityDisabler())
  {
    Database masterDatabase = Database.GetDatabase("master");
    ID sampleLayoutId = new ID("{14030E9F-CE92-49C6-AD87-7D49B50E42EA}");
    ID defaultDeviceId = new ID("{FE5D7FDF-89C0-4D99-9AA3-B5FBD009C9F3}");
    ID sampleItemId = new ID("{2E4C98CF-DD72-4B55-9DF6-2F6691A6690B}");
    ID sampleRenderingId = new ID("{493B3A83-0FA7-4484-8FC9-4680991CF743}");

    Item sampleItem = masterDatabase.GetItem(sampleItemId);


    Item layoutItem = masterDatabase.GetItem(sampleLayoutId);


    LayoutDefinition layoutDefinition = new LayoutDefinition();
    layoutDefinition.LoadXml(sampleItem["__Renderings"]);
    DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(defaultDeviceId.ToString());
    deviceDefinition.ID = defaultDeviceId.ToString();
    deviceDefinition.Layout = sampleLayoutId.ToString();
    RenderingDefinition renderingDefinition = new RenderingDefinition();
    renderingDefinition.ItemID = sampleRenderingId.ToString();
    deviceDefinition.AddRendering(renderingDefinition);


    sampleItem.Editing.BeginEdit();
    sampleItem["__Renderings"] = layoutDefinition.ToXml();
    sampleItem.Editing.EndEdit();
  }

Я надеюсь, что вы можете понять это, иначе это будет более объяснительным, когда у меня будет время написать сообщение в блоге.

...