2017-08-11 121 views
0

我想在网站的每个页面上显示随机引号。如果我尝试使用Content,它可以工作,但每个模块都有自己的内容。当我切换到使用数据时,我似乎无法随机选择列表中的项目。我有一个内容类型为'Quotation'的只有一个字段,名为'Quotation'。如何从2sxc数据流中选择一个随机项目?

下面是一个使用作品内容测试:

<div> 
<h2>@Dnn.Module.ModuleTitle</h2> 
<div class="sc-element">Add more items to the list and see which one is selected at [email protected](ListContent)</div> 
@{ 
Random rnd = new Random(); 
int r = rnd.Next(List.Count); 
int rp1 = r + 1; 
} 
<div class="sc-element">Number @rp1, <i>@List[r].Content.Quotation</i>, was selected from this list of @List.Count items: </div> 
<ol> 
@foreach(var e in List) { 
    var Content = e.Content; 
    <li class="sc-element"> 
     @Edit.Toolbar(Content) 
     @Content.Quotation 
    </li> 
} 
</ol> 

如果我试图用数据流类似的事情,我不能随意访问列表项。下面的代码:

@using ToSic.Eav.DataSources 
<div class="BasicContentWithPreview sc-element"> 
    @Edit.Toolbar(ListContent) 
    <h2><span>Random: @Dnn.Module.ModuleTitle</span></h2> 
    @{ 
     var allQuotes = CreateSource<EntityTypeFilter>(); 
     allQuotes.TypeName = "Quotation"; 
    } 
    @{ 
     var ql = allQuotes.List; 
     Random rnd = new Random(); 
     int r = rnd.Next(ql.Count); 
     int rp1 = r + 1; 
    } 
    <div class="sc-element">Number @rp1, <i>@AsDynamic(ql[r].Quotation)</i>, was selected from this list of @ql.Count items: </div> 
    <ol> 
     @foreach (var q in ql) 
     { 
      var item = AsDynamic(q.Value); 
      <li class="sc-element">[@item.EntityId] @item.Quotation</li> 
     } 
    </ol> 
</div> 

错误说:

“ToSic.Eav.IEntity”不包含“报价”的定义,并没有扩展方法“报价”接受一个类型的第一个参数“ToSic.Eav.IEntity”可以发现

当我删除了ql[r]部分,所有的工作,而列表底部是完美的。所以我可以在列表中顺序访问该项目,但无法随机访问它们。我尝试了很多组合。任何想法如何正确地做到这一点?谢谢。

回答

0

有一个洗牌的数据源中2sxc 8.10开始 - http://2sxc.org/en/blog/post/releasing-2sxc-8-10-public-rest-api-visual-query-and-webapi-shuffle-datasource

可以在视觉查询使用,或使用CreateSource < ...>使用它。这应该为你做

你也可以使用LINQ语句,对于你可以看看洗牌,看看它是如何工作https://github.com/2sic/eav-server/blob/master/ToSic.Eav.DataSources/Shuffle.cs

希望这有助于,如果是,请标记为回答:)

相关问题