Я столкнулся со следующей проблемой: я хочу динамически добавить мобильный сайт для определенных шаблонов, я указал мобильную раскладку в стандартных значениях конкретного элемента. Это все работает нормально, но когда я изменил поле элемента, макет и визуализация сайта по умолчанию исчезли! У кого-нибудь есть решение / предложение по этой проблеме?
Я работаю с Sitecore 6.4.
Спасибо заранее!
Код, который я сейчас использую (это добавить жестко закодированный макет к элементу, следующий шаг (когда я исправил эту проблему), чтобы получить макет из элемента standard_values)
public class CheckMobileLayout
{
public void Process([NotNull] SaveArgs args)
{
try
{
foreach (Sitecore.Pipelines.Save.SaveArgs.SaveItem saveItem in args.Items)
{
Item orgItem = Context.ContentDatabase.Items[saveItem.ID, saveItem.Language, saveItem.Version];
if(orgItem.Name != "Content Editor")
{
TemplateItem testTemplate = orgItem.Template;
foreach (Field orgField in orgItem.Fields)
{
if (orgField != null)
{
if (orgField.GetTemplateField().Type == "Mobile Checkbox")
{
foreach (Sitecore.Pipelines.Save.SaveArgs.SaveField saveField in saveItem.Fields)
{
if (saveField.ID == orgField.ID)
{
if (saveField.Value != orgField.Value)
{
if (saveField.Value == "1") AddMobileLayout(orgItem);
else RemoveMobileLayout(orgItem);
}
}
}
}
}
}
}
}
}
catch (NullReferenceException)
{
}
}
private void RemoveMobileLayout(Item orgItem)
{
using (new SecurityDisabler())
{
Database masterDatabase = Database.GetDatabase("master");
orgItem = masterDatabase.GetItem(orgItem.Paths.Path);
string renderingXml = orgItem[Strings.Renderings];
LayoutDefinition layoutDefinition = new LayoutDefinition();
layoutDefinition.LoadXml(renderingXml);
string mobileDeviceId = Strings.mobileDeviceID;
DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(mobileDeviceId);
deviceDefinition.Layout = String.Empty;
string outputXml = layoutDefinition.ToXml();
Log.Info(outputXml, this);
orgItem.Editing.BeginEdit();
orgItem[Strings.Renderings] = outputXml;
orgItem.Editing.EndEdit();
}
}
private void AddMobileLayout(Item orgItem)
{
using (new SecurityDisabler())
{
Database masterDatabase = Database.GetDatabase("master");
Item testItem = masterDatabase.GetItem(orgItem.Paths.Path);
string renderingXml = testItem[Strings.Renderings];
LayoutDefinition layoutDefinition = new LayoutDefinition();
layoutDefinition.LoadXml(renderingXml);
string mobileDeviceId = Strings.mobileDeviceID;
DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(mobileDeviceId);
deviceDefinition.Layout = Strings.mobileLayoutID;
string outputXml = layoutDefinition.ToXml();
testItem.Editing.BeginEdit();
testItem[Strings.Renderings] = layoutDefinition.ToXml();
testItem.Editing.EndEdit();
}
}
}