10

再会!

我允许我的内容编辑器将 CSS 存储为非常基本的组件(通常包含他们粘贴到的称为“代码”的单个多行字段),然后将这些作为组件演示文稿添加到具有 .css 文件扩展名的页面中。创建页面时,用户可以设置一些配置值:缩小输出(布尔)、文件名前缀和文件名后缀。最后两个的目的是,如果用户在出门时选择了缩小 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.
4

3 回答 3

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

于 2012-11-08T19:05:26.150 回答
6

阅读您对@Dylan 回复的回答后,您可能会考虑在发布时创建一个包含最小化代码输出的二进制变体。

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

您可以在 Mihai 的博客上看到一些二进制变体示例

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

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

于 2012-11-08T23:44:42.297 回答
2

如果不理解不更改 CM 中的文件名而是在外部更改文件名的上下文/原因,很难提供最合适的答案……我通常建议只管理两个页面?

您还可以调查其他选项...

内容部署程序扩展。

尼克建议的事件系统。

以上两者都需要考虑对取消发布的影响。

您可以让服务器端简单的应用程序监视要发布的文件并将其复制(它是 Tridion 发布的文件)到文件的 {renamed} 版本上(Chris 讨论了类似的内容Can we customize Deployer using .NET?) ) - 如果您想避免对内容部署者进行 Java 编码,则更是如此。

于 2012-11-08T20:02:41.533 回答