Tridion 2011: изменение имени файла страницы при его публикации

Добрый день!

Я разрешаю своим редакторам содержимого хранить CSS как очень простые компоненты (обычно содержащие одно-многострочное поле, называемое "кодом", которое они вставляют), и затем они добавляются в качестве презентаций компонентов в страницу с помощью .css расширение файла. При создании страницы пользователи могут устанавливать несколько значений конфигурации: minify output (bool), префикс имени файла и суффикс имени файла. Цель этих двух последних состоит в том, что если пользователь выбрал для минимизации CSS на выходе из двери, имя файла может отличаться на сервере презентации.

У меня все работает, кроме изменения имени файла. Я не хочу менять имя файла в CM; только когда он находится на сервере презентации. Я предполагаю, что это можно сделать в TBB, помещенном в шаблон страницы CSS. Я взломал его, но хочу быть уверенным, что там не чего-то не хватает. Следующий пример - это просто сокращение с некоторыми настраиваемыми значениями, жестко закодированными для краткости.

// Create a reference to the Page object in the package.
Page page = this.GetPage();

// Retrieve a reference to the page file name.
string currentFileName = Utilities.GetFilename(page.FileName);

// Set the published file name on its way out the door.
page.FileName = currentFileName + "_min";

// ???
// Profit.

Ответ 1

Прочитав ответы на ответ @Dylan, вы можете подумать о создании двоичного варианта в момент публикации, который содержит вывод вашего свернутого кода.

В этом простейшем виде вы создадите текстовый файл с выходом своей страницы, а затем вызовите .AddBinary() с указанием содержимого вашего файла, имени файла, имени варианта (я предлагаю URI страницы для этого), URI текущей StructureGroup и URI компонента, чтобы связать это тоже (возможно, Компонент на странице).

Вы можете увидеть несколько примеров бинарных вариантов на блоге Mihai здесь

Binary binary = m_Engine.PublishingContext.RenderedItem.AddBinary(
    resizedStream, newFilename, variantId, mmc,
    binaryContent.MultimediaType.MimeType);

Это приведет к публикации файла, содержащего вывод страницы, в дополнение к фактической странице. Когда вы отмените публикацию на странице, вы также опубликуете дополнительный файл.

Ответ 2

Я предполагаю, что вы делаете только статическую публикацию, т.е. не используете Tridion Content Broker.

Вы должны сделать это с помощью новой системы событий Tridion на основе TOM.NET и подписаться на публикацию на этапе Initiated. Это означает, что перед тем, как страница начнет публиковать, вы поймаете событие и измените имя файла страницы. Однако это приведет к тому, что страница будет иметь новое имя в CME. Итак, снова, используя другую фазу события после транзакции публикации, этап TransactionCommitted, вы можете изменить имя страницы назад.

Вы также можете написать собственное расширение для развертывания, чтобы переименовать страницу. Однако вам также понадобится код для управления "неопубликованием" переименованной страницы. См. Сообщение в блоге Jaime о том, как написать расширение Deployer: http://sdltridionworld.com/articles/sdltridion2011/tutorials/Deployer_Extensions_With_Eclipse_1.aspx

Ответ 3

Невозможно предоставить наиболее подходящий ответ, не понимая контекста/причины не изменять имя файла в CM, но меняя его за пределами... Обычно я рекомендую просто управлять двумя страницами?

Есть другие варианты, которые вы могли бы изучить...

Расширение развертывателя содержимого.

Система событий, как предлагает Ник.

Оба вышеизложенного вам нужно учитывать влияние на неопубликование тоже.

У вас может быть простой просмотр приложения на стороне сервера для публикации файла и его копирование (это опубликованный файл Tridion) поверх {renamed} версии файла (Крис обсуждает что-то подобное здесь Можем ли мы настроить Deployer с помощью .NET?)) - moreso, если вы хотите избежать Java-кодирования для развертывателей контента.