Czy możliwe jest dynamiczne ustawianie wartości pola metadanych z bloku TBB? Czy możliwe jest dynamiczne dodawanie pola metadanych niekoniecznie istniejącego na schemacie z bloku TBB?SDL Tridion 2011: Dynamiczne wypełnianie lub dodawanie pola metadanych przy użyciu C# TBB
Powodem, dla którego chcę to zrobić, jest to, że używam DD4T i chcę, aby ścieżka nawigacyjna była automatycznie dodawana do xml DD4T.
Próbowałem następujące:
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));
}
Jednak żadna z tych metod wydają się działać. Czy to niemożliwe?
Myślę, że to zależy od tego jak DD4T odczytuje dane. Jeśli czytają stronę/komponent z paczki, powinno to zadziałać. Jeśli faktycznie ładują go z silnika, zignoruje wszelkie zmiany dokonane w obiekcie pakietu. –
Dobry punkt Nuno. Spojrzę na źródło szablonu DD4T, aby zbadać. (Prawdopodobnie zauważyłeś, że ten kod jest oparty na twoim blogu: http://nunolinhares.blogspot.fr/2012/01/its-little-things-creating-page.html, dzięki za to) –