Тег iframe в компоненте отображает неполную страницу публикации

В Tridion у меня есть страница, к которой прикреплен компонент, который имеет текстовое поле, в котором есть iframe пометить как <iframe src="http://mysite.com/l/5042/2012-06-21/9pb4y" width="100%" height="500" frameborder="0" style="border: 0" > </iframe>, Я гарантирую, что этот тег останется таким, какой он есть во время обработки C# & DWT template building blocks, Но в конце, когда страница публикуется, в источнике страницы тег меняется на <iframe src="http://mysite.com/l/5042/2012-06-21/9pb4y" width="100%" height="500" frameborder="0" style="border: 0" />, В связи с этим на странице источника не отображается никакого контента после iframe тег. Таким образом, любой компонент, который прикреплен к странице после компонента, содержащего iframe тег не отображается на странице. Любая идея, почему закрывающий тег </iframe> заменяется самозакрывающимся тегом />?

3 ответа

Решение

Как сказал Фрэнк, вы можете использовать Преобразование XML в HTML TBB

(OR)

Вы также можете рассмотреть решение Криса, представленное в этой теме. Создание ссылок привязки в полях с расширенным текстом с помощью SDL Tridion 2011 SP1

Вы применяете xslt для определения поля схемы. Хотя опция TBB применяется к полной версии CT/PT в зависимости от того, где вы ее используете, но с XSLT вы можете использовать ее на уровне поля, а также получить тот же формат, когда вы используете CoreService для любых других случаев использования.

Я спросил об этой проблеме, и Джейми Сантос помог мне с этим решением.

Я уже использовал Convert XML to HTML TBB, но это не сработало, потому что закрывающий тег уже был помещен в выходную переменную.

Итак, в следующем TBB используется параметр Schema [Tags], где мы передаем список тегов (с разделителями-запятыми), которые мы хотим изменить самозакрывающимся тегом (например, />) с помощью тега закрытия (например)


    [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}>");
    }
}

Я думаю, что это связано с "очисткой" TBB. Я бы попробовал поместить "пустое" пространство между тегами, примерно так:

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

Это должно оставить разметку без изменений и отобразить iframe с закрывающим тегом.

Другие вопросы по тегам