我是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如何运作缺乏了解。如果有人能指出我正确的方向,我将不胜感激。
答案 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并传递给它。