Kentico 9 - 以编程方式将内容添加到可编辑图像区域(CMS 可编辑图像)
Kentico 9 - Add content to an Editable Image Region (CMSEditableImage) programatically
我们正在寻找有关如何将内容添加到 Editable Image programatically (with the Kentico C# API). Essentially, the equivalent of this Editable Region article 可编辑图像的信息。
有什么建议吗?
谢谢,
维克多
参考文献:
您可以克隆 editableimage web 部件,然后在预渲染中工作,或者更改 GetContent() 方法的覆盖并添加您自己的字符串部分,或者进行字符串替换并添加您的代码。
您想添加到可编辑图像中的是什么? - 图片路径?!不确定你为什么要这样做,但我会采取另一个方向:我会向页面类型添加一个字段,这使得通过 API 更容易使用。将此字段设置为 API 应该很容易将其显示在页面上......例如放置可编辑图像并使用宏获取字段值。
使用
node.DocumentContent.EditableWebParts
和
node.DocumentContent.EditableRegions
以编程方式更新可编辑内容的集合。
可在 \CMS\CMSModules\Content\CMSDesk\Properties\Advanced\EditableContent\Main.aspx.cs
处找到最佳代码示例
是Pages->General->Advanced->Edit regions & web parts下的对话框
你一定可以
每个单独的可编辑 cms 页面控件都存储在文档的 DocumentContent
字段中,可以使用索引器字段进行访问。例如:
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;
然而
如果您查看数据库 CMS_Document
中的 DocumentContent
字段,您会发现所有内容都是 XML。那是因为每个控件都被序列化为 XML 然后嵌套在这个字段中。因此,在这种情况下,editableImageContent
变量的值是一个 XML 字符串:
<image>
<property name="imagepath">
~/Folder/ImageName.png
</property>
</image>
我不建议尝试直接修改它,因为不知道 Kentico 是否会更改此代码,或者单个控件是否会更改其序列化输出。
但如果你真的必须
您有几个选择:
1. Per @josh,您可以创建一个新控件来包装现有控件并执行一些方法覆盖魔术,以便该控件继续代表您进行序列化你只需在事后修改它。但是,这需要控件当前正在加载。
2. 您可以对野兽进行硬编码,并在它发生变化(很可能会发生变化)时对其进行处理。尝试:
// 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);
我们正在寻找有关如何将内容添加到 Editable Image programatically (with the Kentico C# API). Essentially, the equivalent of this Editable Region article 可编辑图像的信息。
有什么建议吗?
谢谢,
维克多
参考文献:
您可以克隆 editableimage web 部件,然后在预渲染中工作,或者更改 GetContent() 方法的覆盖并添加您自己的字符串部分,或者进行字符串替换并添加您的代码。
您想添加到可编辑图像中的是什么? - 图片路径?!不确定你为什么要这样做,但我会采取另一个方向:我会向页面类型添加一个字段,这使得通过 API 更容易使用。将此字段设置为 API 应该很容易将其显示在页面上......例如放置可编辑图像并使用宏获取字段值。
使用
node.DocumentContent.EditableWebParts
和
node.DocumentContent.EditableRegions
以编程方式更新可编辑内容的集合。
可在 \CMS\CMSModules\Content\CMSDesk\Properties\Advanced\EditableContent\Main.aspx.cs
是Pages->General->Advanced->Edit regions & web parts下的对话框
你一定可以
每个单独的可编辑 cms 页面控件都存储在文档的 DocumentContent
字段中,可以使用索引器字段进行访问。例如:
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;
然而
如果您查看数据库 CMS_Document
中的 DocumentContent
字段,您会发现所有内容都是 XML。那是因为每个控件都被序列化为 XML 然后嵌套在这个字段中。因此,在这种情况下,editableImageContent
变量的值是一个 XML 字符串:
<image>
<property name="imagepath">
~/Folder/ImageName.png
</property>
</image>
我不建议尝试直接修改它,因为不知道 Kentico 是否会更改此代码,或者单个控件是否会更改其序列化输出。
但如果你真的必须
您有几个选择:
1. Per @josh,您可以创建一个新控件来包装现有控件并执行一些方法覆盖魔术,以便该控件继续代表您进行序列化你只需在事后修改它。但是,这需要控件当前正在加载。
2. 您可以对野兽进行硬编码,并在它发生变化(很可能会发生变化)时对其进行处理。尝试:
// 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);