我想更改一個佔位符的演示詳細信息中的控件順序。我使用NewsletterHeader["__Renderings"]
效果,我有這樣的:Sitecore - 在C中設置控件順序#
<r xmlns:p="p" xmlns:s="s" p:p="1">
<d id="{FE5D7FDF-89C0-4D99-9AA3-B5FBD009C9F3}">
<r uid="{042E3CC4-8205-4A1D-85F4-7D667622711D}" s:ds="" s:par="" s:ph="masterplaceholder" />
<r uid="{B19D0460-69C9-4FEC-A882-41FFA77B582F}" p:before="r[@uid='{D43901A0-1B71-4C65-BEED-DDCF28FCE5A5}']" s:ds="/sitecore/content/emagazyn/emagazyn-cplus/Polecane" s:id="{C3AC52FB-8F51-4B44-A3EE-55F4C2EAF83F}" s:par="" s:ph="moviesplaceholder" />
<r uid="{D43901A0-1B71-4C65-BEED-DDCF28FCE5A5}" p:before="r[@uid='{4D8EE7B4-E1D2-4CBF-AED7-5E969EFAA57A}']" s:ds="/sitecore/content/emagazyn/emagazyn-cplus/HITY" s:id="{7A80D822-8D6A-40C4-92D4-2FA22C596339}" s:par="" s:ph="moviesplaceholder" />
<r uid="{4D8EE7B4-E1D2-4CBF-AED7-5E969EFAA57A}" p:before="r[@uid='{B6036949-B723-42CE-9271-64DF299450DC}']" s:ds="/sitecore/content/emagazyn/emagazyn-cplus/VOD" s:id="{557800E7-953B-4830-8691-3FFB964712A8}" s:par="" s:ph="moviesplaceholder" />
<r uid="{B6036949-B723-42CE-9271-64DF299450DC}" p:before="r[@uid='{CC44C44C-B10C-417A-8E19-43B57AAD4C93}']" s:ds="/sitecore/content/emagazyn/emagazyn-cplus/BANER" s:id="{AE048833-A8AF-4668-938A-FEBA48281620}" s:par="" s:ph="moviesplaceholder" />
<r uid="{CC44C44C-B10C-417A-8E19-43B57AAD4C93}" p:before="r[@uid='{F75C5CBE-60E2-4A0A-87F6-B6AB46AC2E52}']" s:ds="/sitecore/content/emagazyn/emagazyn-cplus/JESZCZE-WIECEJ-HITOW" s:id="{D5FCDC02-C2A8-47A9-BCF5-99A3DF7E8A25}" s:par="" s:ph="moviesplaceholder" />
<r uid="{F75C5CBE-60E2-4A0A-87F6-B6AB46AC2E52}" s:id="{71B654BA-5F47-4053-8936-7199C34E55E4}" s:ph="footerplaceholder" />
</d>
</r>
然後我嘗試使用此代碼來改變在C#中的順序:
private void SetSectionsOrder()
{
using (new SecurityDisabler())
{
//Get the value of the __renderings field
string renderingXml = this.NewsletterHeader["__Renderings"];
XNamespace nsS = "s";
XNamespace nsP = "p";
//Get order from model
var order = this.Newsletter.GetSectionsOrder();
//Generate XDcoument from xml
XDocument xd = XDocument.Parse(renderingXml);
for (int i = 0; i < order.Count; i++)
{
var section = order[i];
if (i == 0)
{
XElement sectionElement = xd.Descendants("r").FirstOrDefault(e => (e.Attribute(nsS + "ds") != null) && e.Attribute(nsS + "ds").Value.Contains(section.Item1));
XElement footerElement = xd.Descendants("r").FirstOrDefault(e => (e.Attribute(nsS + "ph") != null) && e.Attribute(nsS + "ph").Value == "footerplaceholder");
if (footerElement != null)
{
string footerUid = footerElement.Attribute("uid").Value;
if (sectionElement != null)
sectionElement.Attribute(nsP + "before").SetValue("r[@uid='" + footerUid + "']");
}
}
else
{
var prevSection = order[i - 1];
XElement sectionElement = xd.Descendants("r").FirstOrDefault(e => (e.Attribute(nsS + "ds") != null) && e.Attribute(nsS + "ds").Value.Contains(section.Item1));
XElement prevSectionElement = xd.Descendants("r").FirstOrDefault(e => (e.Attribute(nsS + "ds") != null) && e.Attribute(nsS + "ds").Value.Contains(prevSection.Item1));
if (prevSectionElement != null)
{
string prevSectionUid = prevSectionElement.Attribute("uid").Value;
if (sectionElement != null)
sectionElement.Attribute(nsP + "before").SetValue("r[@uid='" + prevSectionUid + "']");
}
}
}
//Save new order
this.NewsletterHeader.Editing.BeginEdit();
this.NewsletterHeader["__Renderings"] = xd.ToString();
this.NewsletterHeader.Editing.EndEdit();
}
}
結果我收到此XML:
<r xmlns:p="p" xmlns:s="s" p:p="1">
<d id="{FE5D7FDF-89C0-4D99-9AA3-B5FBD009C9F3}">
<r uid="{042E3CC4-8205-4A1D-85F4-7D667622711D}" s:ds="" s:par="" s:ph="masterplaceholder" />
<r uid="{B19D0460-69C9-4FEC-A882-41FFA77B582F}" p:before="r[@uid='{F75C5CBE-60E2-4A0A-87F6-B6AB46AC2E52}']" s:ds="/sitecore/content/emagazyn/emagazyn-cplus/Polecane" s:id="{C3AC52FB-8F51-4B44-A3EE-55F4C2EAF83F}" s:par="" s:ph="moviesplaceholder" />
<r uid="{D43901A0-1B71-4C65-BEED-DDCF28FCE5A5}" p:before="r[@uid='{4D8EE7B4-E1D2-4CBF-AED7-5E969EFAA57A}']" s:ds="/sitecore/content/emagazyn/emagazyn-cplus/HITY" s:id="{7A80D822-8D6A-40C4-92D4-2FA22C596339}" s:par="" s:ph="moviesplaceholder" />
<r uid="{4D8EE7B4-E1D2-4CBF-AED7-5E969EFAA57A}" p:before="r[@uid='{B19D0460-69C9-4FEC-A882-41FFA77B582F}']" s:ds="/sitecore/content/NCPlus/Strony/emagazyn/emagazyn-cplus/VOD" s:id="{557800E7-953B-4830-8691-3FFB964712A8}" s:par="" s:ph="moviesplaceholder" />
<r uid="{B6036949-B723-42CE-9271-64DF299450DC}" p:before="r[@uid='{CC44C44C-B10C-417A-8E19-43B57AAD4C93}']" s:ds="/sitecore/content/emagazyn/emagazyn-cplus/BANER" s:id="{AE048833-A8AF-4668-938A-FEBA48281620}" s:par="" s:ph="moviesplaceholder" />
<r uid="{CC44C44C-B10C-417A-8E19-43B57AAD4C93}" p:before="r[@uid='{D43901A0-1B71-4C65-BEED-DDCF28FCE5A5}']" s:ds="/sitecore/content/emagazyn/emagazyn-cplus/JESZCZE-WIECEJ-HITOW" s:id="{D5FCDC02-C2A8-47A9-BCF5-99A3DF7E8A25}" s:par="" s:ph="moviesplaceholder" />
<r uid="{F75C5CBE-60E2-4A0A-87F6-B6AB46AC2E52}" s:id="{71B654BA-5F47-4053-8936-7199C34E55E4}" s:ph="footerplaceholder" />
</d>
</r>
這就是我想要得到的。但是,當我在Sitecore的輸入表現的細節,還有就是爲了這樣的:
- 瓣兒
- JESZCZE-更多信息,HITOW
- HITY
- VOD
- Polecane
- footerplaceholder
我做錯了什麼?有沒有其他的方式來改變這個命令?
我想我不明白這一點。你說我做得對,但結果順序仍然是錯誤的。那麼我該怎麼做才能得到我想要得到的訂單? – petros
xml中的元素順序也很重要嗎? – petros
我不是說你的代碼是正確的,我希望從輸出的XML中得到輸出。如果結果不是你想要的,那麼你需要考慮操縱'uid'和'p:before'屬性或使用'LayoutDefinition'類。 –