2012-06-13 16 views
9

Czy ktoś wie, czy w złożonym szablonie można użyć elementu ciągu w pakiecie i wykonać go tak, jakby był szablonem Dreamweaver? I czy stosuje się tę samą metodę do innych mediatorów (np. Brzytwy)?Wykonywanie elementu w pakiecie jako szablonu Dreamweaver

Dzięki Mark

+0

Klasa Package ma metodę "package.EvaluateExpression (wyrażenie łańcuchowe)", która może być warta zbadania. –

Odpowiedz

5

Obawiam się, że nie będzie możliwe tylko na każdej pozycji w Package, ponieważ Engine spodziewa Template s opierać się na pozycji Tridion.

Jeśli pozycja szablonu jest na podstawie elementu Tridion, prawdopodobnie można uzyskać dość daleko, zaczynając od metody Engine.GetMediator. Jeśli tak nie jest, musisz znaleźć jakiś sposób, aby przekształcić go w prawidłowy obiekt Template.

Template template = ... 
IMediator mediator = engine.GetMediator(template); 
mediator.Transform(engine, template, package); 

Kiedy trzeba utworzyć Component obiekt z pozycji opartego na Tridion w opakowaniu, zwykle zrobić coś takiego:

Component component = new Component(item.GetAsXmlDocument().DocumentElement, 
            engine.GetSession); 

nie próbowałem, ale oczekują, że możesz zrobić to samo dla Template - biorąc pod uwagę, że zaczynasz od prawidłowego elementu z pakietu reprezentującego szablon, aby rozpocząć. Możesz prawdopodobnie sklonować XML z istniejącego przedmiotu lub znaleźć inny sposób na sfałszowanie go.

Jeśli to polecenie działa, będzie działać we wszystkich zarejestrowanych typach szablonów. Model Engine nie zapewnia specjalnego traktowania typów dołączonych do Tridion.

+1

Dzięki Frank za wskazówkę. Przyjrzę się temu. Pozdrawiam –

+0

Dowiedziałem się dzisiaj, że 'engine.GetMediator' nie jest publiczne, więc nie możesz do niego dotrzeć. Skończyło się na tym, że po prostu utworzyłem 'DreamweaverMediator' w moim TBB i przekazałem swój wcześniej skonstruowany obiekt' TemplateBuildingBlock'. Zaktualizuję powyższy kod, jeśli więcej osób uzna to za przydatne. –

5

Podejrzewam, że nie jest to możliwe.

Package.EvaluateExpression mogą być przydatne, ale jak sama nazwa wskazuje, to będzie działać tylko na wyrażeniach, a nie duże fragmenty kodu z osadzonymi wyrażeń (tj TEL)

Engine.GetMediator oczekuje Template i zwraca odpowiedni Mediator dla niego. Twój problem jest wtedy, że interfejs IMediator określa jedynie sposób Transform, która wymaga Engine, z Template i Package.

Nie mogę wymyślić żadnych eleganckich sposobów obejścia tych problemów. Może napisz własnego Mediatora, ale to będzie wymagało pakietu, a nie ciągu, więc musisz najpierw przechowywać element oparty na łańcuchach z innego TBB.

Moja rada: Wygląda na to, że musisz wrócić do deski kreślarskiej i znaleźć alternatywne rozwiązanie problemu.

+1

Przyjąłem, że Mark chciał wywołać "ciąg znaków jako DWT" z istniejącego ITemplate lub Mediatora, ponieważ odnosi się do niego jako elementu w paczce. Jeśli tak jest, mógłby po prostu przekazać swoje istniejące obiekty Engine i Package do metody Mediator.Transform. Głównym problemem, jaki mogłem zaobserwować, było przekształcenie tego elementu String w instancję Template.Ale to dobra uwaga, więc zaktualizuję moją odpowiedź do opracowania. –

+1

Myślę, że możliwe jest utworzenie nowego obiektu ComponentTemplate lub PageTemplate i przekazanie poprawnej reprezentacji XML szablonu. To jednak nie powinno cię nigdzie znaleźć - myślę, że musisz utworzyć nowy TBB z elementu string i dodać do pliku XML nowego szablonu. Oczekuję, że TBB będzie musiał zostać uratowany. –

Powiązane problemy