Tridion 2009 SP1: Миниатюры изображений - Как опубликовать исходное изображение?

У меня есть шаблон динамического компонента, который публикует XML в базу данных брокера, которая затем динамически загружается с использованием фабрики представления компонентов.

Этот XML-файл содержит URL-адреса изображений. Мне нужно, чтобы миниатюра и полное изображение были доступны. Мне удалось использовать Image Resizer TBB для создания миниатюр, однако я надеялся, что это добавит отдельные элементы пакета и двоичные файлы, на которые можно было бы ссылаться, но, похоже, это перезаписывает полноразмерные изображения.

Есть ли способ, которым я могу получить как свой Xml, так и пакет, не написав свой собственный TBB?


person Rob Stevenson-Leggett    schedule 20.07.2012    source источник
comment
›› без написания собственного TBB? Нет.   -  person Nuno Linhares    schedule 20.07.2012


Ответы (2)


Tridion Content Delivery может хранить несколько вариантов одного и того же мультимедийного компонента. Каждый такой вариант имеет идентификатор, который его идентифицирует, а вариант без идентификатора (или в более новых версиях #def# в качестве идентификатора) известен как вариант по умолчанию.

Когда вы ссылаетесь на изображение из DWT, оно автоматически добавляется как элемент в пакет, когда механизм рендеринга выполняет ваш DWT. Затем этот элемент обрабатывается TBB по умолчанию «Опубликовать двоичные файлы в пакете», который является частью действий по завершению по умолчанию. Опубликовать двоичные файлы в пакете TBB публикует двоичные файлы, вызывая для них AddBinary — вы можете убедиться в этом, просмотрев исходный код большинства стандартных TBB, который был опубликован на форуме Tridion здесь (требуется авторизация).

appliedTemplateUri = new TcmUri(item.Properties[Item.ItemPropertyTemplateUri]);
...
engine.AddBinary(itemUri, appliedTemplateUri, targetStructureGroup, 
                 data, fileName);

Вызываемый метод AddBinary определен в TOM.NET CHM как:

public abstract string AddBinary(
    TcmUri componentUri,
    TcmUri templateUri,
    TcmUri targetLocation,
    byte[] data,
    string fileName
)
  • componentUri Мультимедийный компонент, к которому относится этот элемент.
  • templateUri Шаблон, в контексте которого выполняется этот вызов AddBinary (используется как идентификатор варианта)
  • targetLocation Местоположение для публикации двоичного файла (если значение равно null, публикуйте по стандартному пути).
  • data Двоичные данные для публикации
  • fileName Имя файла для публикации в

Итак, как вы можете видеть в последнем вызове AddBinary, Публикация двоичных файлов в TBB пакета использует свойство (см. здесь если вы никогда не слышали о Item.Properties), чтобы определить, какой вариант опубликовать (и опубликовать двоичный файл как вариант по умолчанию, если свойство отсутствует).

Со всеми этими знаниями задача становится довольно простой: вы должны убедиться, что в пакете для вашей MMC есть два бинарных элемента, каждый из которых имеет другое значение свойства Item.ItemPropertyTemplateUri.

Image Resizer TBB по умолчанию заменяет двоичное содержимое элемента, размер которого изменяется, и не задает это свойство. Таким образом, наименьшее количество кода, которое вам придется написать, — это либо TBB препроцессора, который дублирует элемент, либо TBB постпроцессора, который повторно добавляет элемент. В обоих случаях TBB также должен будет установить свойство «магия».

Полезные ссылки:

person Frank van Puffelen    schedule 20.07.2012
comment
Спасибо за исчерпывающий ответ Фрэнк. Я попробую. - person Rob Stevenson-Leggett; 20.07.2012

По сути, все, что делает Image Resizer TBB, — это изменяет размер изображения, уже находящегося в пакете, поэтому TBB Default Finish Actions может опубликовать его (используя вызов AddBinary()).

Итак, что вам требуется, так это небольшое изменение в логике Resizer TBB (здесь вам нужно сделать что-то самостоятельно), чтобы он не менял размер исходного элемента в пакете, а публиковал его вариант. Затем у вас есть два изображения, доступных на стороне доставки (вы можете отличить их, например, отправив изображение с измененным размером в другую структурную группу).

person Bart Koopman    schedule 20.07.2012