Kann der Wert eines Metadatenfelds dynamisch von einer TBB aus festgelegt werden? Oder ist es möglich, ein Metadatenfeld dynamisch hinzuzufügen, das nicht unbedingt in einem Schema von einer TBB existiert?SDL Tridion 2011: Dynamisches Füllen oder Hinzufügen eines Metadatenfelds mit einem C# TBB
Der Grund, warum ich das tun möchte, ist, dass ich DD4T benutze und ich möchte, dass der Breadcrumb automatisch in das DD4T XML eingefügt wird.
Ich habe versucht, die folgenden:
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));
}
scheinen jedoch keine dieser Methoden zu arbeiten. Ist das unmöglich?
Ich denke, es hängt davon ab, wie DD4T die Daten liest. Wenn sie die Seite/Komponente aus dem Paket lesen, sollte das funktionieren. Wenn sie es tatsächlich von der Engine laden, ignoriert es alle Änderungen, die Sie am Paketobjekt vorgenommen haben. –
Guter Punkt Nuno. Ich werde die zu untersuchende DD4T-Vorlagenquelle betrachten. (Sie haben wahrscheinlich bemerkt, dass dieser Code auf Ihrem Blog-Beitrag basiert: http://nunolinhares.blogspot.fr/2012/01/its-little-things-creating-page.html, vielen Dank dafür) –