2012-06-23 10 views
6

W Tridion Mam stronę, do której dołączony jest komponent, który ma pole tekstowe, w którym znajduje się znacznik iframe, taki jak <iframe src="http://mysite.com/l/5042/2012-06-21/9pb4y" width="100%" height="500" frameborder="0" style="border: 0" > </iframe>. Zapewniam, że ten tag pozostaje niezmieniony podczas przetwarzania przez C# & DWT template building blocks. Ale na końcu, gdy strona zostanie opublikowana, w źródle strony tag zmienia się na <iframe src="http://mysite.com/l/5042/2012-06-21/9pb4y" width="100%" height="500" frameborder="0" style="border: 0" />. Z tego powodu źródło strony nie wyświetla żadnych treści po tagu iframe. Tak więc każdy komponent dołączony do strony po tagu zawierającym tag iframe nie pojawia się na stronie. Jakiś pomysł, dlaczego zamykający tag </iframe> został zamieniony na samozamykający tag: />?Znacznik iframe w komponencie podaje niepełną stronę przy publikacji

+2

Czy jesteś pewien, że "Konwersja XML do HTML" TBB występuje w domyślnej fińskich działań? Ten typ TBB zwykle powinien przekonwertować notację XML z powrotem na HTML, którą preferuje starsza przeglądarka. –

+1

Tak 'Konwertuj XML na HTML' TBB jest obecny w Domyślnych działaniach zakończeniowych. –

Odpowiedz

6

Frank wymienić można użyć XML Konwersja do HTML TBB

(OR) 

Można również rozważyć rozwiązanie z Chris zawarte w tym wątku. Creating anchor links in rich text fields with SDL Tridion 2011 SP1

Zastosowano xslt dla definicji pola schematu. O ile opcja TBB dotyczy pełnego CT/PT w zależności od tego, gdzie go używasz, ale z XSLT możesz go używać na poziomie pola, a także uzyskuje ten sam format, gdy używasz CoreService do innych zastosowań.

+0

Twój link był użyteczny. Obecnie używam pustego znacznika div, aby stłumić dziwne zachowanie - ' ' –

+1

Twoje obejście może pomóc w rozwiązaniu problemu, ale zgodnie ze standardem HTML nie powinieneś używać żadnych innych tagów w tagu iframe. –

0

Myślę, że to zasługa TBB "Oczyścić". Chciałbym spróbować umieszczenie „puste” przestrzeń między znacznikami, coś takiego:

<iframe src="YOUR_URL_HERE" width="100%" height="500" frameborder="0" style="border: 0" > &nbsp;</iframe> 

To powinno zachować znaczników nietknięty i wyświetli iframe z jego znacznika zamykającego.

1

Zapytałem o ten problem, a Jamie Santos pomógł mi w rozwiązaniu tego problemu.

Już używałem Konwersja XML na HTML TBB, ale to nie zadziałało, ponieważ znacznik zamykający został już umieszczony w zmiennej wyjściowej.

Więc dodaje TBB wykorzystuje parametr Schema [tagi] gdzie mijamy listę tagów (oddzielone przecinkiem) chcemy zmienić samodzielne znacznika zamykającego (np />) z tagiem zamykającym (np)


    [TcmTemplateTitle("Remove Selft Closing Tag")] 
    public class RemoveSelfClosingTag : ITemplate 
    { 
     public override void Transform(Engine engine, Package package) 
     { 
      var outputItem = package.GetByName(Package.OutputName);

 //if not Output in package, return 
     if (outputItem == null) return; 

     var output = outputItem.GetAsString(); 
     var tagsCsv = package.GetValue("Tags"); //TBB parameter [tags using CSV] : 'iframe' 
     if (string.IsNullOrEmpty(tagsCsv)) return; 

     var tags = tagsCsv.Split(','); 
     foreach (var tag in tags) 
     { 
      RemoveSelftTag(tag, ref output); 
     } 
     outputItem.SetAsString(output); 
    } 

    //ref because string is immutable. 
    private void RemoveSelftTag(string tagName, ref string output) 
    { 
     var pattern = string.Format("(?'fistPart'<(?'tag'{0})[^>]+?)/>", tagName); 
     output = Regex.Replace(output, pattern, @"${fistPart}></${tag}>"); 
    } 
} 

Powiązane problemy