2013-02-11 15 views
5

W moim szablonie C# lub Dreamweaver muszę wiedzieć, co renderuję. Problem polega na tym, że nie wiem na pewno, czy szukam strony lub komponentu. Prawdopodobnie mógłbym użyć package.GetByType(ContentType.Page), a jeśli jest pusty - pobrać zawartość komponentu, ale uważam, że powinien istnieć krótszy sposób.Jaki jest najprostszy sposób, aby znaleźć bieżący identyfikator produktu w szablonie

Przykład Dawida jest krótszy:

engine.PublishingContext.ResolvedItem.Item.Id 

Odpowiedz

5
engine.PublishingContext.ResolvedItem.Item.Id 

Można również sprawdzić kontekście Publishing rozwiązane produkt i sprawdzić, czy jest to strona, czy nie (jeśli tak nie jest, to jest to Component).

Na przykład:

Item currentItem; 
if (engine.PublishingContext.ResolvedItem.Item is Page) 
{ 
    currentItem = package.GetByName(Package.PageName); 
} 
else 
{ 
    currentItem = package.GetByName(Package.ComponentName); 
} 
TcmUri currentId = engine.GetObject(currentItem).Id; 

Jeśli chcesz skrótów engine.GetObject() połączenia, a następnie może być w stanie uzyskać identyfikator z pozycji w formacie XML bezpośrednio:

String currentId = currentItem.GetAsSource().GetValue("ID"); 
+0

To znacznie ładniejsze niż moje podejście. –

3

Tak widziałem to zrobić przed:

// Contains the call you describe in your question 
Page page = GetPage(); 
if (page == null) 
{ 
    // Contains a call using package.GetByName("Component") 
    // to avoid the situation with multiple Components on the package 
    Component comp = GetComponent(); 
    // Do component stuff 
} 
else 
{ 
    // Do page stuff 
} 

Nie jestem pewien, można go znacznie ładniejszy niż hermetyzacji naprawdę, ale może być udowodnione źle.

+0

Jesteś right with package.GetByName ("Component") –

Powiązane problemy