有一个多语言网站,例如
Content
+UK Home
-About Us
+US HOme
-About Us
如何通过剃须刀根据英国“关于我们”的当前节点获取美国“关于我们”页面?美国网站使用关系从英国网站复制。
当访问者访问美国“关于我们”时,访问者根据业务规则被重定向到英国“关于我们”。问题是我需要以编程方式获取英国“关于我们”页面的有效URL,并将访问者重定向到它。似乎Umbraco没有太多的支持。例如,Umbraco关系仅适用于主页级别。每个站点都有一个具有多个级别的树节点。
任何想法都会受到赞赏。
Umbraco 4.10
答案 0 :(得分:2)
我只需要使用7.2.6 ...
来解决这个问题因为BeaverProj的答案不完整和被删除,我想我会分享。
如果有人使用较短的代码来做同样的事情会很好。
@{ var rs = ApplicationContext.Current.Services.RelationService; var currentPageId = CurrentPage.AncestorOrSelf().Id; var relations = rs.GetByParentOrChildId(currentPageId); <h2>Relations</h2> foreach (Relation relation in relations) { if (relation.RelationType.Alias == "relateDocumentOnCopy") { // the relation has two ids... // 1. parent // 2. child // we want the opposite one as the id above is for the current node umbraco.NodeFactory.Node node; if (relation.ParentId == currentPageId) { //get child node = new umbraco.NodeFactory.Node(relation.ChildId); } else { node = new umbraco.NodeFactory.Node(relation.ParentId); } <text>@node.NiceUrl</text> <br /> } } }
我还尝试使用razor和lambda [ where ]语句来查询别名的结果,但它在视图中不起作用。我可以将它移动到控制器,但它在视图中工作。
答案 1 :(得分:0)
当您创建多语言网站时,您确实将复制的项目与原始网站相关联。在复制盒?或者页面之间是否有关系?
在Razor中,您应该能够访问Umbraco原生的Relation API。
这样的事情:
@using umbraco.cms.businesslogic.relation;
@using umbraco.cms.businesslogic.member;
@{
RelationType relationType = RelationType.GetByAlias("relateDocumentOnCopy");
Relation[] relations = Relation.GetRelations(Model.Id, relationType);
<h2>Relations</h2>
foreach (Relation relation in relations)
{
...
}
}
我基本上从这个论坛帖子得到了这段代码:http://our.umbraco.org/forum/developers/razor/28103-Using-relations-with-razor
这是一篇博客文章,其中包含有关关系API的更多信息:http://blog.hendyracher.co.uk/umbraco-relation-api/
此外,如果您有权访问付费的Umbraco.tv帐户,这会有所帮助:http://umbraco.com/help-and-support/video-tutorials/developing-with-umbraco/relations/simple-document-to-document-relation/TVPlayer