方案: 内容树的一部分是以两个主机名运行的站点的主项(www.site1.com和www.site2.com
两个主机名的目的是区分具有相同内容的两个目标国家,以及相同的组织(营销部门,网络编辑器等)。
当然,这两个主机名的内容是相同的。
除了....
在一些地方,我们需要一些小的差异。例如,联系电子邮件或法律声明(这些都只是Sitecore内容)。在其他地方,我们可能希望能够根据项目的主机上下文更改项目的表示组件。我们可能希望在特定模板的所有项目中执行此操作。
更复杂的是,该网站已经从另一个网站(www.siteA.com)克隆,该网站是不同国家的几个克隆(一些翻译)的来源。这是为了使我们能够将新项目/内容更改/功能推送到我们的子公司。因此,所有模板和表示组件已经在许多主机上下文和内容树的许多部分之间共享。
是否有任何Sitecore功能可以使这成为可能/简单 - 或者我们是否需要在我们的演示组件中编写上下文测试代码(可能与Sitecore中的一些配置项一起使用以避免硬编码值)?
答案 0 :(得分:2)
好问题。这是一个长镜头,但它可能有效:
为什么不为Site2创建新设备,在Site2演示数据需要更改的情况下,请配置Site2设备的演示设置。如果没有,请不要设置它们,默认设备将呈现内容。这里的难点将是配置设备如何解决。也许您可以在<httpRequestBegin>
管道中创建自定义设备解析器:
<processor type="Sitecore.Pipelines.HttpRequest.BeginDiagnostics, Sitecore.Kernel"/>
<!--<processor type="Sitecore.Pipelines.HttpRequest.DeviceResolver, Sitecore.Kernel"/>-->
<processor type="YourProject.Pipelines.HttpRequest.DeviceResolver, YourProject"/>
<processor type="Sitecore.Pipelines.HttpRequest.LanguageResolver, Sitecore.Kernel"/>
在处理器中,您可以查看主机以确定要使用的主机。
您也可以在新的<site ... />
节点上定义Site2设备,如下面的Paul所述。像这样:
<site name="site1" hostName="site1.com" rootPath="/sitecore/content" startItem="/home" ... />
<site name="site2" hostName="site1.com" device="Site2" rootPath="/sitecore/content" startItem="/home" ... />
Site1和Site2都指向树的相同部分,它们只使用不同的设备。