是否可以从 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)); 
    } 

但是,这些方法似乎都不起作用。这是不可能的吗?

请您参考如下方法:

DD4T 具有实用程序类 FieldsBuilderAddFields您可以在其中注入(inject)其他元数据的方法。 DD4T 有一个 TBB,它确实从文件夹元数据更新组件元数据,它被称为 InheritMetadataComponent .

你可以在这里看看这个,你可以实现相同的:

http://code.google.com/p/dynamic-delivery-4-tridion/source/browse/trunk/dotnet/DD4T.Templates/InheritMetadataComponent.cs
FieldsBuilder.AddFields(component.MetadataFields, tcmFields, 1, false, mergeAction, Manager);


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!