是否可以从TBB动态设置元数据字段的值?或者是否可以从TBB动态添加不一定存在于架构中的元数据字段?
我想这样做的原因是我使用的是DD4T,我希望将面包屑自动添加到DD4T xml中.
我尝试过以下方法:
public override void Transform(Engine engine, Package package)
{
Initialize(engine,package);
var page = GetPage();
string output = page.OrganizationalItem.Title;
var parent = page.OrganizationalItem as StructureGroup;
while (parent != null)
{
output = GetLinkToStructureGroupIndexPage(parent) + Separator + output;
parent = parent.OrganizationalItem as StructureGroup;
}
// I tried this to dynamically add the field
//var metadata = page.Metadata.OwnerDocument.CreateElement("breadcrumb");
//metadata.InnerText = output;
//page.Metadata.AppendChild(metadata);
//I tried this to dynamically set an existing field on the schema
foreach (XmlNode xml in page.Metadata)
{
Log.Debug("Metadata field:" +xml.Name);
if(xml.Name == "breadcrumb")
{
xml.InnerText = output;
}
}
package.PushItem(Package.PageName, package.CreateTridionItem(ContentType.Page, page));
}
Run Code Online (Sandbox Code Playgroud)
但是,这些方法似乎都不起作用.这不可能吗?
DD4T具有实用程序类FieldsBuilder,AddFields其中可以注入其他元数据.DD4T有一个TBB,可以从文件夹元数据更新组件元数据并调用它InheritMetadataComponent.
你可以在这看看这个,你可以实现相同的:
FieldsBuilder.AddFields(component.MetadataFields, tcmFields, 1, false, mergeAction, Manager);
最简单的方法是创建一个实现 DD4T.Templates.Base.BasePageTemplate 的模板类。在该类中,您实现 TransformPage 方法,该方法采用 DD4T 页面作为其参数。您可以使用 GetTcmPage() 方法访问“TCM 页面”。
例子:
using TCM = Tridion.ContentManager.CommunicationManagement;
using Dynamic = DD4T.ContentModel;
public class MyTemplate : BasePageTemplate
{
protected override void TransformPage(Dynamic.Page page)
{
TCM.Page tcmPage = GetTcmPage();
string breadCrumbs = GetBreadCrumbs (tcmPage); // TODO: implement GetBreadCrumbs
Field f = new Field();
f.Name = "breadCrumbs";
f.FieldType = FieldType.Text;
f.Values.Add(breadCrumbs);
page.MetadataFields.Add("breadCrumbs", f);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1164 次 |
| 最近记录: |