You Sure Can
Jede einzelne editierbare cms Seite Steuerung wird in dem DocumentContent
Feld des Dokuments gespeichert und kann mit einem Indexer Feld zugegriffen werden. Zum Beispiel:
TreeNode document = DocumentContext.CurrentDocument;
string editableImageControlId = "EditableImage1";
// get the field value
string editableImageContent = document.DocumentContent.EditableRegions[editableImageControlId];
// set it to something new
document.DocumentContent.EditableRegions[editableImageControlId] = newValue;
JEDOCH
Wenn man sich die DocumentContent
Feld suchen in CMS_Document
in der Datenbank werden Sie feststellen, dass der gesamte Inhalt XML. Das liegt daran, dass jedes Steuerelement in XML serialisiert und dann in diesem Feld verschachtelt wird. Somit wird in diesem Fall der Wert des editableImageContent
Variable ist ein XML-String:
<image>
<property name="imagepath">
~/Folder/ImageName.png
</property>
</image>
ich das nicht versuchen würde empfehlen, direkt zu ändern, da nicht abzusehen, es gibt, wenn Kentico würde jemals diesen Code ändern, oder die individuelle Steuerung würde jemals seine Serialisierungsausgabe ändern.
Aber wenn Sie wirklich müssen
Sie ein paar Optionen haben:
1. Per @ Josh, könnten Sie ein neues Steuerelement erstellen, das die bestehenden wickelt und tun einige Überschreiben Sie Magic, damit das Steuerelement die Serialisierung in Ihrem Namen fortsetzt und Sie es nur nachträglich ändern. Dies erfordert jedoch, dass das Steuerelement gerade geladen wird.
2. Sie könnten einfach das Biest programmieren und damit umgehen, wenn es sich jemals ändert (was wahrscheinlich ist). Versuchen Sie:
// get the node from wherever you need to get the node
TreeNode document = DocumentHelper.GetDocuments().TopN(1).FirstObject;
var relativeMediaFilePath = "~/NewImage.png";
var xmlImage = string.Format("<image><property name=\"imagepath\">{0}</property></image>", relativeMediaFilePath);
var cmsControlId = "editableImage1";
if (document.DocumentContent.EditableRegions.ContainsKey(cmsControlId)) {
document.DocumentContent.EditableRegions[cmsControlId] = xmlImage;
}
else {
document.DocumentContent.EditableRegions.Add(cmsControlId, xmlImage);
}
// a little hack to get this field to be indicated as updated
document.SetValue("DocumentContent", document.DocumentContent.GetContentXml());
document.Update(true);