Tridion 2011:更改页面的文件名,因为它正在发布

Rob*_*elf 10 c# tridion tridion-2011

美好的一天!

我允许我的内容编辑器将CSS存储为非常基本的组件(通常包含一个称为"代码"的单个多行字段,然后将它们粘贴到其中),然后将这些字段作为组件演示文件添加到具有.css文件扩展名的页面中.创建页面时,用户可以设置一些配置值:minify output(bool),文件名前缀和文件名后缀.最后两个的意图是,如果用户选择在出门的时候缩小CSS,则文件名可以在演示服务器上不同.

除了修改文件名外,我已经完成了所有工作.我不想更改CM中的文件名; 只有它驻留在演示服务器上.我假设这可以在放入CSS页面模板的TBB中完成.我对它采取了一个裂缝,但我想确保没有我遗漏的东西.以下示例只是简写,其中一些可配置值为了简洁而进行了硬编码.

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

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

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

// ???
// Profit.
Run Code Online (Sandbox Code Playgroud)

Nic*_*kov 6

我假设您只进行静态发布,即不使用Tridion Content Broker.

您应该能够使用新的基于TOM.NET的Tridion事件系统执行此操作,并在Initiated阶段订阅Publishing事件.这意味着在页面开始发布之前,您将捕获事件并修改页面文件名.但是,这将使页面在CME中具有新名称.因此,再次使用发布事务后的另一个事件阶段,即TransactionCommitted阶段,您可以更改页面的名称.

您还可以编写自定义部署程序扩展来执行此操作,这将重命名页面.但是,您还需要使用代码来管理重命名页面的"取消发布".请参阅Jaime关于如何编写Deployer扩展的博客文章:http://sdltridionworld.com/articles/sdltridion2011/tutorials/Deployer_Extensions_With_Eclipse_1.aspx


Chr*_*ers 6

阅读@Dylan响应的答案,您可以考虑在发布时创建二进制变体,其中包含最小化代码的输出.

在它最简单的形式中,您将使用页面的输出创建一个文本文件,然后调用.AddBinary()指定文件的内容,文件名,变体名称(我建议使用此页面的URI),当前StructureGroup的URI以及要绑定它的Component的URI(可能是页面上的Component).

你可以看到米哈伊的博客一些二进制变种的例子在这里

Binary binary = m_Engine.PublishingContext.RenderedItem.AddBinary(
    resizedStream, newFilename, variantId, mmc,
    binaryContent.MultimediaType.MimeType);
Run Code Online (Sandbox Code Playgroud)

除了实际页面之外,这将发布包含页面输出的文件.取消发布页面时,您也将取消发布额外的文件.

  • 只是为了清除可能在某些时候出现的任何问题,请注意Tridion确实会取消发布该变体,但它可能不会直接取消发布此页面.它与你的"mmc"组件的使用有关,当它不再用于任何已发布的页面时,它的所有变体也将被取消发布. (3认同)