2016-08-03 10 views

Antwort

1

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); 
1

Sie die editableimage webpart und dann klonen könnte wor k in der Prerender oder ändern Sie die Überschreibung für die GetContent() -Methode und fügen Sie Ihren eigenen Teil der Zeichenfolge oder eine Zeichenfolge ersetzen und fügen Sie Ihren Code hinzu.

1

Was möchten Sie einem bearbeitbaren Bild hinzufügen? - Bildpfad?! Ich bin mir nicht sicher, warum Sie das tun sollten, aber ich würde eine andere Richtung wählen: Ich würde einem Seitentyp ein Feld hinzufügen, was die Zusammenarbeit mit der API erheblich erleichtert. Wenn dieses Feld mit API eingerichtet wird, sollte es ziemlich einfach sein, es auf der Seite zu erhalten ... z. Platzieren Sie ein bearbeitbares Bild und verwenden Sie ein Makro, um den Feldwert zu erhalten.

0

Verwenden

node.DocumentContent.EditableWebParts 

und

node.DocumentContent.EditableRegions 

Sammlungen editierbare Inhalt programmatisch zu aktualisieren.

Das beste Codebeispiel kann

Es ist der Dialog unter Pages-> Allgemein-> Advanced-> Bearbeiten Regionen & Webparts bei \CMS\CMSModules\Content\CMSDesk\Properties\Advanced\EditableContent\Main.aspx.cs gesichtet werden.

Edit regions and web parts

Verwandte Themen