मेरे पास एक कस्टम साइटकोर बटन है जो वर्तमान आइटम के टेम्पलेट को काफी सरल बनाता है।renderingDefinition.ItemId का उपयोग कर प्रोग्रामेटिक रूप से नए टेम्पलेट में साइटकोर प्रतिपादन की प्रतिलिपि बनाना?
हालांकि इस हिस्से के रूप में मैं पुराने लेआउट के प्रस्तुतिकरण को नए लेआउट में माइग्रेट करने की कोशिश कर रहा हूं यदि यह ItemId
द्वारा एक निश्चित सब्बाउट प्रकार का है। हालांकि ItemId
जो लौटाया जाता है वह हमेशा शून्य होता है, केवल RenderingDefinition
से प्राप्त होने वाला एकमात्र मान UniqueId
है।
मैं क्या गलत कर रहा हूं?
मैंने एक गाइड के रूप में this blog post का उपयोग किया है।
कोड
public class ConvertToNewTemplateCommand : Command
{
protected void Run(ClientPipelineArgs args)
{
if (!SheerResponse.CheckModified())
return;
Item item = Context.ContentDatabase.Items[args.Parameters["id"]];
if (args.IsPostBack)
{
if (args.Result == "yes")
{
//Get current layout details
var originalLayoutXml = item[FieldIDs.LayoutField];
//Get new template
TemplateItem hubTemplate = Context.ContentDatabase.GetTemplate("some guid...");
//Change template
item.ChangeTemplate(hubTemplate);
//Reset laytout
ResetLayout(item);
//Get reset layout
var newLayoutXml = item[FieldIDs.LayoutField];
//Add all the module containers to the new layout in the central column
MoveModuleContainers(item, originalLayoutXml, newLayoutXml);
}
}
}
private void MoveModuleContainers(Item item, string oldXml, string newXml)
{
var oldLayout = LayoutDefinition.Parse(oldXml);
var newLayout = LayoutDefinition.Parse(newXml);
bool updated = false;
var oldRenderings = (oldLayout.Devices[0] as DeviceDefinition).Renderings;
var newRenderings = (newLayout.Devices[0] as DeviceDefinition).Renderings;
foreach (RenderingDefinition rendering in oldRenderings)
{
// Here is where the rendering.ItemID is always null
if (rendering != null && !String.IsNullOrEmpty(rendering.ItemID) && new Guid(rendering.ItemID) == new Guid("matching guid..."))
{
rendering.Placeholder = "middlecolumn";
newRenderings.Add(rendering);
updated = true;
}
}
if (updated)
{
// Save item...
}
}
}
अच्छा एक, दान। और ढेर ओवरफ्लो में आपका स्वागत है! –
+1 साइटकोर समर्थन चट्टानों! उनकी प्रतिक्रिया साझा करने के लिए धन्यवाद। –
जबकि इस जवाब ने मुझे अंत में वहां पहुंचाया (और मुझे परेशानियों के घंटों से बचाया कि डेटा स्रोतों को वापस क्यों नहीं किया जा रहा था), यह थोड़ा अपूर्ण है। GetFieldValue वास्तव में Sitecore.Data.Fields.LayoutField कक्षा पर एक स्थिर विधि है। मुझे यह समझने के लिए थोड़ा सा समय लगा, तो उम्मीद है कि यह अगले व्यक्ति को थोड़ा उलझन में बचाएगा :) – Chris