在多语言网站中通过剃刀获取基于当前节点的相关页面

时间:2012-11-13 16:44:26

标签: umbraco

有一个多语言网站,例如

Content
 +UK Home
  -About Us
 +US HOme
  -About Us

如何通过剃须刀根据英国“关于我们”的当前节点获取美国“关于我们”页面?美国网站使用关系从英国网站复制。

当访问者访问美国“关于我们”时,访问者根据业务规则被重定向到英国“关于我们”。问题是我需要以编程方式获取英国“关于我们”页面的有效URL,并将访问者重定向到它。似乎Umbraco没有太多的支持。例如,Umbraco关系仅适用于主页级别。每个站点都有一个具有多个级别的树节点。

任何想法都会受到赞赏。

Umbraco 4.10

2 个答案:

答案 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