我是Orchard的新手,并观看过Pluralsight“Orchard Fundamentals”和“Advanced Orchard”教程。它是一个很好的平台,但是我很难绕过一些事情。
我想在主页上创建一个博客展示横幅广告,用于轮换网站上的博文。我将HTML切片并在HTML模板上运行。横幅看起来像这样:
http://arerra.com/news-slideshow.jpg
到目前为止,我已完成以下工作:
我创建了一个名为“文章”的博客,并在那里放置了一个帖子进行测试。
添加了一个名为“ArticleList”的图层,我为“最近的博客帖子”添加了一个小工具
我在主题中为主页创建了一个名为“Layout-Url-HomePage.cshtml”的自定义布局。
在我的主题“视图”文件夹中,我创建了一个名为“Widget.Wrapper.cshtml”的文件,其中只有@Display(Model.Child)
,以便从窗口小部件中全局删除<article><header/><footer /><article>
标记。
在“视图&gt;部件&gt; Blogs.RecentBlogPosts.cshtml”中添加了一个文件来控制我的形状布局。代码如下:
@using Orchard.ContentManagement;
@{
IEnumerable<object> blogPosts = Model.ContentItems.ContentItems;
}
@if (blogPosts != null) {
<div class="container news-slider">
<ul class="slide-images">
@foreach (dynamic post in blogPosts) {
string title = post.Title;
ContentItem item = post.ContentItem;
<img src="/Themes/MountainWestHoops/Content/img/placeholder-700x380.jpg" alt="@title" class="active" />
}
</ul>
@foreach (dynamic post in blogPosts) {
string title = post.Title;
string body = post.Body;
ContentItem item = post.ContentItem;
<div class="featured-story threeD active">
<h1>@title</h1>
<p>@body @Html.ItemDisplayLink("READ MORE", item)</p>
</div>
}
<aside>
<ul class="tabs">
@foreach (dynamic post in blogPosts) {
string title = post.Title;
string url = post.Url;
ContentItem item = post.ContentItem;
<li><a href="@url"><h3>@title</h3></a></li>
}
</ul>
<div class="ad-three-day-trial">
<a href=""><img src="/Themes/Content/img/placeholder-260x190.gif" /></a>
</div>
</aside>
</div>
}
我的HTML正常呈现,但我指定的值都没有出现。
我正在使用“Shape Tracer”模块来查看正在使用的模板。有趣的是,@ Html.ItemDisplayLink(“READ MORE”,item)正在呈现文章的URL,如果我用字符串标题替换“READ MORE”,则标题会正确呈现。
我在这里做错了导致字符串无法显示?我错过了更大的观点并误解了基本面吗?教程似乎说你可以简单地移动部件,但在这种情况下,我需要有非常特定的标记才能使用这个滑块。
答案 0 :(得分:1)
好像您的来源是http://weblogs.asp.net/bleroy/archive/2011/03/27/taking-over-list-rendering-in-orchard.aspx
这是一个相当古老的帖子,从那时起,标题的处理方式发生了变化。
DisplayLink可以正常工作,因为这里唯一正确的属性是post.ContentItem
,这就是API所需要的。另一方面,post.Title
和post.Body
很可能为空,这就是为什么你什么也看不见的原因。要访问标题,您可以使用post.ContentItem.TitlePart.Title
并获取正文post.ContentItem.BodyPart.Text
。