如何从 2sxc 数据流中选择随机项目?



我想在网站的每个页面上显示一个随机报价。如果我使用内容尝试它,它可以工作,但每个模块都有自己的内容。当我切换到使用数据时,我似乎无法在列表中随机选择一个项目。我的内容类型为"报价",只有一个字段,称为"报价"。

下面是使用内容工作的测试:

<div>
<h2>@Dnn.Module.ModuleTitle</h2>
<div class="sc-element">Add more items to the list and see which one is selected at random.@Edit.Toolbar(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]部分时,它一切正常,底部的列表是完美的。所以我可以在列表中按顺序访问该项目,但不能随机访问它们。我尝试了很多组合。关于如何正确执行此操作的任何想法?谢谢。

有一个从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

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

最新更新