Umbraco - 显示特定用户的所有博客帖子

时间:2016-06-28 19:15:14

标签: asp.net-mvc umbraco

我是Umbraco的新手,我已经继承了一个主要是从CMS本身组成的网站。我需要在现有网站中实现一些更具动态性的功能。

其中一个问题是我在目标网页上有一系列博客文章。在这些下面,我有博客帖子类别及其作者的超链接。如果我点击类别名称,我可以在查询字符串中传递类别ID,它将列出与该类别相关的所有帖子。我需要为用户做同样的事情。我可以传递用户的类别ID,但它会显示一条消息:"没有找到帖子"。

我已经读过Umbraco的文档,但是没有任何关于我如何实现这一目标的线索。当我在查询字符串中传递id时,我可以得到作者的名字,但是就我而言。

if (String.IsNullOrEmpty(catID))
{ 
    <h1>@Umbraco.Field("onPageTitle", altFieldAlias: "pageName")</h1>
}
else
{
    var catPage = Umbraco.TypedContent(Convert.ToInt32(catID));
    if (catPage.HasValue("categoryPageTitle"))
    {
        <h1>@catPage.GetProperty("categoryPageTitle").Value</h1>
    }
    else
    { 
        <h1>@catPage.Name</h1>
    }
}

我很确定我的困难是由于对Umbraco如何运作缺乏了解。如果有人能指出我正确的方向,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

通常情况下,您的内容结构中包含Blog个包含BlogItem个孩子的节点。

然后,您可以在名为Macro partial view的umbraco的Developer section中创建RenderBlogItemsOfCreator

部分视图

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage

@*

    This snippet renders the blog items based on the creator

*@

@{

    // Take the root blog node
    var blogRoot = Umbraco.TypedContentAtRoot().DescendantsOrSelf("blogRootAlias").FirstOrDefault();

    // Get the user from the macro parameters
    var creatorUserId = int.Parse(Model.MacroParameters["userId"].ToString());

    // Get all blog children from this user that are visible and sort them from new to old
    var blogItems = blogRoot.Children.Where(x => x.CreatorId == creatorUserId && x.IsVisible()).OrderByDescending(y => y.CreateDate);

    foreach(var item in blogItems)
    {

        <div>@item.Name</div>

    }

}

<强>宏

userId参数添加到数字类型的宏。

目标网页

使用以下方法调用宏:

Umbraco.RenderMacro("RenderBlogItemsOfCreator", new { userId = 1 })

你唯一需要做的就是从网址中取出这个userId并传递给它。