est*_*why 3 dwt tridion tridion-2011
使用模块化模板将Tridion组件内容(基于给定模式,即:非任意)转储到XML中的最简单方法是什么?
具体来说,需要将组件的内容传递给/作为ASP.Net自定义控件,即:
<custom:MyControl runat="server"
TextField="value1"..>
<EmbeddedField>
..
</EmbeddedField>
</custom:MyControl>
Run Code Online (Sandbox Code Playgroud)
我看到一种可能的方法是调整Default Dreamweaver组件设计 DWT TBB,但这似乎太费力了.
编辑
另一个模糊的主题是上面问题的第二部分:将XML嵌入到ASP.Net控制标记中.问题是需要转义XML.下面的脑力激荡器在DWT中进行(压力,Nuno的TBB写入输出):
<custom:MyControl runat="server">
<xml>
@@(Output).replace(RegExp.call(null, /&/.toString()[1], "g"), '&').replace(RegExp.call(null, /</.toString()[1], "g"), '<').replace(RegExp.call(null, />/.toString()[1], "g"), '>').replace(RegExp.call(null, String.fromCharCode(34), "g"), '"')@@
</xml>
</custom:MyControl>
Run Code Online (Sandbox Code Playgroud)
(所有这些只是克服DWT神秘的JS转义规则所必需的.)
使用以下代码创建ac#Template Building Block:
TemplatingLogger log = TemplatingLogger.GetLogger(GetType());
if (package.GetByName(Package.ComponentName) == null)
{
log.Debug("Not running in a Component Template, exiting.");
return;
}
Component component = (Component)engine.GetObject(package.GetByName(Package.ComponentName));
package.PushItem(Package.OutputName, package.CreateStringItem(ContentType.Xml, component.Content.OuterXml));
Run Code Online (Sandbox Code Playgroud)
并且在您的模板中使用它而不需要任何其他构建块.
这将输出确切的内容Component.Content
,这很少是你真正想要的(例如,你如何处理二进制文件或链接的组件?),所以你会想要进化到其他东西,更多的细节,并可能删除来自XML节点的命名空间......
我通常使用一个大的switch(field.GetType().Name)
,然后根据需要处理每个字段类型,这些内容如下:
foreach (ItemField field in content)
{
string fieldType = field.GetType().Name;
switch (fieldType)
{
case "XhtmlField":
// do something, like write it to an XmlWriter
break;
Run Code Online (Sandbox Code Playgroud)
等等等等.
归档时间: |
|
查看次数: |
284 次 |
最近记录: |