tridion - 如何最好地将 Tridion Broker 用作多个网站的单一内容来源?

标签 tridion

我正在研究这个 Tridion 实现,它有很多不同的网站,但有些内容(如新闻)是通过基本的 Tridion 蓝图原则共享的。网站都使用相同的语言,所以我们只处理品牌差异。

现状:有一个名为 Global content 的出版物,其中创建了此全局内容。在模式中有一些复选框,可以选择该内容应该出现的子出版物。当组件被保存时,事件系统启动并创建带有组件的页面,发布它等等......不会发生组件的删除,只有未选中所有复选框的重新保存将最终通过批处理删除页面.

经纪人情况:我想开始使用经纪人。更重要的是,因为在 future 的情况下,网站也将开始向外部网站共享更多内容,我将通过 RSS 提要或基本 API 来做到这一点,这与 Broker 的内容配合得最好。

场景:

  • 允许此全局内容发布发布动态内容,并在其他站点上直接从代理中提取该内容(使用全局内容发布 ID?)
  • 在全局内容中创建一个虚假的空目标,以便他们可以说“发布/取消发布到所有子出版物?” (您仍然可以使用复选框来允许它在某些出版物中发布)
  • 使用 Global Content 网站发布动态内容并创建供内部和外部网站使用的 API/RSS 提要?
  • 还有什么?

  • 我最初的想法是第一个场景,但我可以看到主要缺点,即混合本地(化)新闻项目和全局新闻项目会变得更加困难。

    第二种情况似乎是第二好的机会。任何人都有这样的实现经验?

    最佳答案

    在我目前正在研究的实现中,我们正在使用类似于第二个解决方案的东西。我将网站主出版物(我们在其中创建所有页面)添加到我们用于所有网站的发布目标中,以便我们可以从那里发布到所有子出版物。如果它适合您的模型,我更喜欢这个选项,因为它继续让您通过子出版物中的本地化来控制项目。

    由于我们不想在网站主发布上呈现内容(因为这不会在任何地方进行,只会浪费我的发布者处理器时间,然后在部署时也会浪费代理存储),我们创建了 ChildOnlyPublicationResolver (SDL Tridion 2011)。在这个解析器中,我们遍历所有已解析的项目,如果该项目来自网站主出版物,我们将其从列表中删除。

    结果是您将看到网站主发布出现在发布队列中,但它几乎会立即设置为成功,因为其中没有任何内容可呈现。因此,它既不会占用出版商的任何性能,也不会部署,但您可以保留子出版物的利益,并且可以轻松地一次性发布它们。

    如果有兴趣,这里是解析器代码的示例:

    using System.Collections.Generic;
    using Tridion.ContentManager;
    using Tridion.ContentManager.Publishing;
    using Tridion.ContentManager.Publishing.Resolving;
    
    namespace SDL.Example.Resolvers
    {
        public class ChildOnlyPublicationResolver : IResolver
        {
            /// <summary>
            /// Master Publication TCMURI
            /// </summary>
            private const string MasterPublicationTcmUri = "tcm:0-2-1";
    
            /// <summary>
            /// For publish and unpublish, remove all items from the master publication from the list.
            /// </summary>
            /// <param name="item">Item to be resolved (e.g. a page, structure group, template)</param>
            /// <param name="instruction">Resolve instruction</param>
            /// <param name="context">Publish context</param>
            /// <param name="resolvedItems">List of items that are currently to be rendered and published (added by previous resolvers in the chain)</param>
            public void Resolve(IdentifiableObject item, ResolveInstruction instruction, PublishContext context, Tridion.Collections.ISet<ResolvedItem> resolvedItems)
            {
                List<ResolvedItem> itemsToRemove = new List<ResolvedItem>();
                TcmUri masterPublicationUri = new TcmUri(MasterPublicationTcmUri);
    
                // check for items from master publication (these do not need to be published or unpublished)
                foreach (ResolvedItem resolvedItem in resolvedItems)
                {
                    // mark all items from website structure publication for removal
                    if (resolvedItem.Item.Id.PublicationId == masterPublicationUri.ItemId)
                    {
                        itemsToRemove.Add(resolvedItem);
                    }
                }
    
                // remove all items that we need to discard
                foreach (ResolvedItem itemToRemove in itemsToRemove)
                {
                    resolvedItems.Remove(itemToRemove);
                }
            }
        }
    }
    

    关于tridion - 如何最好地将 Tridion Broker 用作多个网站的单一内容来源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9819967/

    相关文章:

    tridion - 在 Tridion 2009 上配置自定义解析器

    在 VS 2010 中的服务引用为 'Update' 后,Tridion 核心服务引用变得未知

    tridion - 即使对于已成功发布的项目,发布队列中的状态仍保持在 "Ready for transport"

    tridion - 我应该如何使用关键字元数据?

    tridion - 是否有必要用 2011 年的默认模板构建 block 替换 2009 年的默认模板构建 block ?

    tridion - 获取 SDL Tridion 中已发布元素的 URL

    Tridion GUI 性能优化

    tridion - 通过出站电子邮件发送的邮件出现问题

    components - 格式化程序在尝试反序列化消息 : There was an error while trying to deserialize parameter 时抛出异常

    asp.net - 如何在 SDL Tridion 中使用 XSLT 将站点地图 XML 文件转换为面包屑?