Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Orchardcms 在Orchard中自定义呈现列表时如何访问项目部件_Orchardcms - Fatal编程技术网

Orchardcms 在Orchard中自定义呈现列表时如何访问项目部件

Orchardcms 在Orchard中自定义呈现列表时如何访问项目部件,orchardcms,Orchardcms,我已经接管了Orchard中列表的呈现,以便能够创建自定义标记(我需要在列表的实际内容之前创建一个交互式导航)。这是我当前使用的代码: @使用Orchard.DisplayManagement.Shapes @{ var list = Model.List; var items = list.Items; var count = items.Count; var listTag = Tag(list, "ul"); listTag.AddCssClass(

我已经接管了Orchard中列表的呈现,以便能够创建自定义标记(我需要在列表的实际内容之前创建一个交互式导航)。这是我当前使用的代码:

@使用Orchard.DisplayManagement.Shapes

@{
    var list = Model.List;
    var items = list.Items;
    var count = items.Count;
    var listTag = Tag(list, "ul");
    listTag.AddCssClass("historia");
    var index = 0;
}

<div class="produtos">
    @foreach (var item in items)
    {
        var itemTag = Tag(item, "div");
        itemTag.AddCssClass("item-" + index);
        @itemTag.StartElement;
        <h3>
        @item.Title
        </h3>
        <p>@item.MyCustomTextField</p>
        @itemTag.EndElement;
        ++index;
    }
</div>

@Display(Model.List)

@Display(Model.Pager)
@{
var list=Model.list;
变量项=列表项;
变量计数=项目数;
var listTag=标签(列表,“ul”);
listTag.AddCssClass(“historia”);
var指数=0;
}
@foreach(项目中的var项目)
{
var itemTag=标记(项目,“div”);
itemTag.AddCssClass(“项-”+索引);
@itemTag.StartElement;
@项目.标题
@item.MyCustomTextField

@itemTag.EndElement; ++指数; } @显示(模型列表) @显示器(型号寻呼机)
它几乎起作用了。。。我无法访问列表项字段。。。我想抓取标题,并把它放在一个h3,然后把一个自定义文本字段在一个段落后面。。。我将使用CSS正确呈现此导航部分。在这个导航部分之后,我将调用标准列表渲染例程

问题是@item.Title生成空字符串。我想访问项目内容(没有双关语),其中包括一个自定义文本字段,它是整个文章的摘录,将显示在“导航窗格”上

Bertrand向我们展示了如何通过博客帖子做到这一点:

@using Orchard.ContentManagement;
@{
    IEnumerable<object> blogPosts =
        Model.ContentItems.ContentItems;
}
@if (blogPosts == null || blogPosts.Count() < 1) {
<p>@T("No posts.")</p>
}
else {
    <ul class="content-items">
    @foreach (dynamic post in blogPosts) {
        string title = post.Title;
        ContentItem item = post.ContentItem;
        <li class="content-item-summary">
            @Html.ItemDisplayLink(title, item)
        </li>
    }
    </ul>
}
@使用Orchard.ContentManagement;
@{
IEnumerable博客帖子=
Model.ContentItems.ContentItems;
}
@if(blogPosts==null | | blogPosts.Count()<1){
@T(“无职位”)

} 否则{
    @foreach(blogPosts中的动态帖子){ 字符串标题=post.title; ContentItem=post.ContentItem;
  • @ItemDisplayLink(标题,项目)
  • }
}
但它与标准列表的工作方式不同


(另一个小问题:我是否可以/应该使用自定义包装,而不是覆盖此列表的整个布局?

博客示例非常不同。对于列表,项目中包含的是形状,而不是内容项目。现在,这些形状通常(但不总是)具有对相应内容项的引用,通常位于ContentItem属性下。例如,要获取标题,
item.ContentItem.TitlePart.title
将为您提供所需的内容

至于你的包装问题,我不知道你想做什么,所以我不能给出建议。如果您想保持列表呈现的完整性,但要用额外的标记将其包围,那么是的,这是一种方法