Jam*_*ord 16 sitecore sitecore6
我正在构建一个数据存储库站点,然后我将完整克隆以提供多个克隆站点,从而实现全局内容的本地化.
我需要做的是确保存储库网站中的项目之间的所有引用(富文本字段中的链接,引入"相关项目"点的项目引用等)被覆盖以引用相关克隆而不是原始项目存储库.
这可能涉及例如自定义LinkManager和可能具有一些额外逻辑的GetItem(itemID)以找到正确的克隆.
我需要知道的是我需要担心哪些API需要担心?我可以做一个修改,它将继承链接渲染在.Net组件的富文本字段中,项目引用从下拉列表中提供给子布局,通过XSLT渲染等等?在克隆站点的上下文中,我需要一个项ID作为其克隆的别名.Context.Database.GetItem(ID)需要在克隆站点上下文中返回克隆.
我基本上正在寻找一种机制,无论何时我在克隆站点的上下文中使用它,都会将"数据/主页/产品/产品A"转换为"克隆/主页/产品/产品A".
我需要在哪里实现这个逻辑,有多少个地方?
Cross发布到SDN http://sdn.sitecore.net/SDN5/Forum/ShowPost.aspx?PostID=35598
这与早期的问题有关处理Sitecore 6.4克隆站点中的内部链接,但包含更多详细信息并且更具体.
编辑:虽然理想的解决方案将此功能深入Sitecore,但重要的是这仅适用于在实际网站上查看的内容,即它不得干扰Sitecore管道,例如创建,克隆和删除项目.
我建议您采取不同的方法。您可以向 HttpRequestPipeline 添加代码以将“Data/Home/Products/Product A”解析为“clone/Home/Products/ProductA”,而不是更改链接本身。重用和共享数据中描述了类似的方法:
CMS 用户可以使用富文本编辑器、呈现属性或其他功能来链接到基于项目选择数据模板的项目。在代码中考虑这些条件。您可以配置 httpRequestBegin 管道处理器来处理项目的 HTTP 请求 [...]
要将此方法应用于您的场景,请<processor type="Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel"/>在 web.config 中的 HttpRequestBegin 管道中添加 HttpRequestProcessor 的自定义实现。
这是要实现的逻辑:
HttpContext.Current.Request.UrlReferrer确定引用站点。Sitecore.Context.Item在源站点中。Database.GetItem()。这种方法的优点是,您不需要拦截创建链接的多种方法,并且可以将路径重写逻辑保留在一个位置。实际上,您将创建从“Data/Products/ProductA”到“clone/Home/ProductA”的别名,该别名仅在您的站点位于克隆列表中时才会生效。
更新:我在 Office Core 中对这种方法进行了测试。我创建了第二个站点 AlternalteSite,其中包含一个子节点 Our-Process。AlternateSite 主页有一个指向 /home/Our-Process 的链接。当以下代码添加到 HttpRequestBegin 管道时,链接将定向到 /AlternateSite/Our-Process 项。
public class SiteChanger : HttpRequestProcessor
{
// Some definitions removed...
public override void Process(HttpRequestArgs args)
{
if (ReferringSiteIsTarget())
{
Item targetItem = GetTargetItem();
if (targetItem != null)
{
Sitecore.Context.Item = targetItem;
}
}
}
private Item GetTargetItem()
{
string currentItemPath = Sitecore.Context.Item.Paths.FullPath;
string newPath;
if (currentItemPath.Contains(SourcePath))
{
newPath = currentItemPath.Replace(SourcePath, TargetPath);
return Sitecore.Context.Database.GetItem(newPath);
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
Update2:正如 James Walford 在评论中指出的那样,这种方法只有在克隆没有重命名的情况下才有效。据我所知,Sitecore 并未提供从源项目遍历到 Web 数据库中其克隆的方法。在 master 中,您可以使用链接数据库从一个项目获取其克隆(请参阅此论坛帖子),但在发布后,克隆将成为普通项目,因此可能不会包含在链接数据库中。
一种方法是将克隆链接的多重列表添加到标准模板,并添加逻辑以将其填充为管道的一部分uiCloneItems,并在 HttpRequestProcessor 代码中使用此数据。这将保留链接数据库关系,但会增加克隆过程和 Http 请求解析过程的开销,因为您的代码需要迭代所有克隆以确定哪个克隆位于请求网站中。
| 归档时间: |
|
| 查看次数: |
1940 次 |
| 最近记录: |