【问题标题】:Events System - Possible to publish another page when page is being published?事件系统 - 发布页面时可以发布另一个页面吗?
【发布时间】:2012-08-02 15:52:20
【问题描述】:

我对 Tridion 2011 中的事件系统有疑问.....当其他页面被发送到发布队列时,是否可以发布另一个页面?

我们目前有一个 XML 文件来定义我们的网站导航和站点地图,但不幸的是,目前每次向网站添加新页面时都需要手动发布。

我担心从事件系统自动发布以及必须多次发布同一页面,而实际上它只需要在发布队列中的最后一个项目结束其事务后发布。

【问题讨论】:

    标签: tridion


    【解决方案1】:

    每当您想更改 Tridion 为响应发布操作而发布的项目数量时,我的脑海中都会立即出现自定义解析器

    克里斯·萨默斯(Chris Summers)不久前写了一篇关于他与他们的经历的精彩文章:http://www.tridiondeveloper.com/the-story-of-sdl-tridion-2011-custom-resolver-and-the-allowwriteoperationsintemplates-attribute

    Nuno 把他的经历写得更简洁一点:http://nunolinhares.blogspot.com/2011/10/tridion-publisher-and-custom-resolvers.html

    在我看来,您应该简单地将导航添加到那里的 ResolvedItems 集合中。如果您始终如一地使用解析器,您也不会遇到您似乎担心的发布事务的爆炸式增长,而是会在单个事务中发布(和部署)所有相关项目。

    【讨论】:

    • 也许自定义解析器确实会更好,但是站点地图将成为交易的一部分 - 我喜欢 Bart 的建议,即以较低优先级发布站点地图。并非所有的站点地图构建器都这么快.. 此外,当您取消发布页面时,您也想重新发布您的站点地图,这与解析器当时正在处理的操作相反。
    • 与制度作斗争无疑是提高工作安全性的有效方法。我宁愿接受这个系统,并将其视为解决其他问题的好机会:比如站点地图需要很长时间才能生成。再说一次,我也是那个从他家慢慢剥下一层胶带然后不得不打电话给勤杂工的人,因为修复泄漏是一回事做不到。
    • 根据站点地图的生成方式和重量,我自己最初也在考虑使用自定义解析器,但 Richard 明确表示他担心此页面不应多次发布。自定义解析器将在每个 Publish Transaction 中发布它,如果您发布了许多可能确实会成为问题的单个页面。
    • 再次感谢您的帮助。老实说,在阅读弗兰克的回答之前,我并不知道自定义解析器,所以它提供了非常丰富的信息和学习体验——同样感谢 :)
    【解决方案2】:

    您可以通过订阅 PublishTransaction Save 事件来发布每个事务的站点地图(可以包含许多页面、结构组等)。

    您可以考虑验证发布队列并查看是否有等待事务,但理论上这可能会将站点地图的发布推迟非常非常长的时间。

    EventSystem.SubscribeAsync<PublishTransaction, SaveEventArgs>(
        (subject, args, phase) =>
        {
            if (!PublishStransactionStateIsSuccessfullyCompleted(subject))
                return;
    
            // Code to publish sitemap
        },
        EventPhases.TransactionCommitted
    );
    
    static bool PublishStransactionStateIsSuccessfullyCompleted(PublishTransaction transaction)
    {
        return transaction.State == PublishTransactionState.Success ||
                transaction.State == PublishTransactionState.Warning;
    }
    

    【讨论】:

    • 太好了,我使用这个例子效果很好,因为使用异步事件似乎不会阻塞发布队列!现在只是想弄清楚发布事务是否是队列中的最后一个事务,嘿,快!
    【解决方案3】:

    这是在实施过程中经常出现的问题,当然导航或站点地图取决于已发布的项目(我认为这不是理想的情况)。

    对此的一个可能解决方案是您使用事件系统将生成 XML 的页面以低优先级放置在发布队列中。这将(在某种程度上)确保它仅在执行常规发布操作后才发布。现在第二个事件应该检查​​这个页面是否已经在队列中,所以它不会再次添加它。

    请记住,这并不能阻止它每天发布多次,但至少应该确保它永远不会排在队列中两次。在具有专用多线程发布者的快速系统上,这很可能意味着它仍然会每隔一小时左右发布一次,具体取决于您的活动等。

    另一种选择是安排该页面每天发布一次,使用事件系统重复该过程,以便每天在同一时间只发布一次。这会降低您的 XML 的准确性,因为它每天只更新一次,但它会防止您的发布队列被填满,这可能是个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      相关资源
      最近更新 更多