2015-01-15 42 views
3

嘿傢伙我有一個問題,讓我卡住了2個小時了。果園獲取動態對象(widget容器)的屬性

1)我創建邁上了一個新的內容類型,稱爲「滑滑梯」(可能會改變這種可怕的名字)

2)創建滑塊的列表滑動

3)增加了一個新的Container的Widget,並告訴它包含我的滑塊列表

4)爲滑塊小部件創建了我的.cshtml文件。

現在,所有這些工作都非常好,我在主頁佈局的特色部分顯示了信息。在這一點上,我想開始編輯原始數據到一個漂亮的滑塊,首先第一件事是迭代通過這個模型,並獲取每張幻燈片,所以我可以提取屬性並與他們做一些事情。

然而,作爲一個動態的對象(果園形狀),當然不會有任何智能感知。不過,我已盡全力想辦法弄到房產。

我用盡http://docs.orchardproject.net/Documentation/Creating-lists

香港專業教育學院還試圖http://www.ideliverable.com/blog/ways-to-render-lists-of-things

兩者都好讀,但我的方法是用小部件做,我不知道,如果它因爲這樣,我不能似乎很容易找到該物業的我需要。我已經嘗試了一下並檢查了動態模型,但元數據並沒有包含任何與屬性相似的東西。

代碼我現在有

@Display(Model.Content) 
@{ 
    var MySliderList = Model.List; 

} 

<div> 
    @foreach (var slide in MySliderList) 
    { 
     <div>@slide.Title</div> 
     <div>@slide.SliderText</div> 
     <div>@slide.UrlLink</div> 
    } 
</div> 

可以這樣說不是@display(model.content)其他這段代碼犯規顯示任何內容。

有人能告訴我從這個.cshtml模型中獲取每個「幻燈片」數據的正確方法嗎?

非常感謝。

更新:也請注意代碼中,我有最新的嘗試,香港專業教育學院還試圖Model.ContentItem,ContentItems,ContentItems.Content,內容等等等等

+0

cshtml文件的名稱是什麼? – 2015-01-15 17:32:21

+0

Widget-Name-mySlider.cshtml,我用形狀模塊來提取和自動生成文件。 – lemunk 2015-01-16 08:57:30

+0

即時通訊也試圖相同,但使用投影與查詢相反,同樣的問題是我不知道如何訪問內容類型的每個實例 – lemunk 2015-01-16 14:23:45

回答

4

TL;博士;使用投影,跳到底部,例如鏈接。

烏節的偉大的(也許是最壞的)事情是有一百萬種方法來實現你想要的哈哈。

您嘗試重寫的窗口小部件視圖(如Bertrand解釋的)基本上是一個小型佈局文件,它將渲染已被放入「內容」區域的部分。這些部分包括諸如WidgetPart(顯示小部件標題)和WidgetContainerPart之類的內容,WidgetContainerPart會顯示您的案例中的滑塊幻燈片列表。

但是,Widget視圖可以在您試圖執行時訪問其所有子部件,而不是讓各個部件呈現它們。這在您需要非常特定的佈局調用多個部分和字段的位的情況下非常有用。但是視圖可以訪問的基本上是該部分的屬性,因爲它們是從模型/處理程序提供給它的。ContainableWidgetPart構建它的內容列表以顯示在驅動程序中,所以你實際上無法從驅動程序呈現的視圖之外的任何位置訪問該列表(即Parts.ContainerWidget.cshtml)。但是不要害怕,如果你願意的話,我們可以自己創建這個列表。

@using Orchard.ContentManagement 
@using Orchard.Core.Common.Models 
@using Orchard.Core.Containers.Extensions; 
@{ 
    var item = Model.ContentItem; 
    var part = (Orchard.Core.Containers.Models.ContainerWidgetPart)Model.ContentItem.ContainerWidgetPart; 

    var _contentManager = WorkContext.Resolve<IContentManager>(); 
    var container = _contentManager.Get(part.Record.ContainerId); 

    IContentQuery<ContentItem> query = _contentManager 
     .Query(VersionOptions.Published) 
     .Join<CommonPartRecord>().Where(cr => cr.Container.Id == container.Id); 

    if (part.Record.ApplyFilter) { 
     query = query.Where(part.Record.FilterByProperty, part.Record.FilterByOperator, part.Record.FilterByValue); 
    } 

    var items = query.Slice(0, part.Record.PageSize).ToList(); 

} 

@foreach (var i in items) { 
    // do stuff with the item here 
} 

但在視圖中有這種廢話並不特別好。所以我們來看看ContainerWidgetPart。驅動程序中發生的事情是,它會創建一個列表形狀,這是Orchard提供的用於呈現內容項列表的核心形狀。非常簡潔。如果仔細觀察ContainerWidgetPart驅動程序,您將看到它正在構建一個顯示類型爲「摘要」的視圖以顯示在列表中。因此,我們可以看看只使用展示位置覆蓋Slider Slide顯示的顯示,以僅顯示圖像(我假設您有這些圖像)。但是,如果您使用幻燈片,則可能需要將某些類或自定義屬性添加到ul和li元素。這是很容易在我們的主題重寫Parts.ContainerWidget.cshtml形狀並添加以下行來實現:

// adds the class slider to the ul 
Model.ContentItems.Classes.Add("slider"); 
// adds a class slider-item to each li 
Model.ContentItems.ItemClasses.Add("slider-item"); 
// adds a custom attribute to each li 
Model.ContentItems.ItemAttributes.Add("style", "display:none"); 

不過,如果你希望在無UL標籤來顯示您的內容,這是不是特別有用。您可以使用.Items從列表形狀中訪問各個項目,但是當您已經構建了一組要顯示的形狀時,這似乎有點愚蠢,然後您只需繼續並繞過所有這些。

因此,畢竟,我建議你使用投影來建立你的滑塊。投影更靈活,方式更酷,您可以爲它們創建不錯的模板。看看如何使用預測建立一個滑塊這些例子:

或者更好的,甚至不使用滑塊,因爲沒有人真正喜歡他們無論如何^ _ ^希望我充分混淆你,我現在不知道發生了什麼事情!

+0

那裏有很棒的信息,那麼現在我已經習慣了整個「繼承我的視角模型,現在循環播放,並在我的視圖上做了些什麼」。我已經使用投影而不是列表,但是我的問題是我試圖再次做同樣的事情,我稍後再看一下然後接受。感謝Hazza的幫助 – lemunk 2015-01-19 15:31:20