繁体   English   中英

如何强制同一应用程序(DNN / 2sxc)的两个实例从同一流中读取?

[英]How to force two instance of the same app (DNN/2sxc) to read from the same stream?

抱歉,如果我的问题很愚蠢,但是我是DNN / 2sxc的新手,我整天都在努力解决这个问题,但没有成功。

我有同一个应用程序的两个实例,一个在主页上,另一个在自己的页面上,每个实例必须有自己的视图模板(我使用Razor)。

我的问题是我无法找到使两个应用程序读取相同数据的方法,因此其中一个应用程序中的每个添加/编辑/删除/重新排序都将反映给另一个应用程序,当前每个应用程序都有自己的数据,因此它们在我的情况下是无法使用的。

我尝试在“数据查询”中使用“ EntityTypeFilter”并在两个视图中使用它(如在News-Simple演示视频中一样),它可以正常工作,并且在两个视图中都提供了所有项目,但是还有两个问题附带此解决方案:

1-现在,我无法使用工具栏(添加/删除/重新排序等)任何项,如您在此图像中所看到的,这对我来说是个停滞点,

注意:这是我使用的工具栏:

@foreach(var item in AsDynamic(Data["Default"]))
{
...
@Edit.Toolbar(target: item, actions: "new,edit,replace,remove,moveup,movedown,instance-list")

2-“内容演示项目”在列表中也可见,但是并不是很重要,因为我可以删除它并使用其中一个真实数据项作为演示项目。

我感谢任何帮助。 谢谢。

因此,您应该知道的第一件事是将内容项用作数据(以进行查询等)与将其用作分配项(每个模块实例具有项的子集)时的区别。 这是应该帮助您理解差异的博客: http : //2sxc.org/en/blog/post/12-differences-when-templating-data-instead-of-content

因此,当您需要“手动轻松控制显示的确切项目,它们的订购等”时。 您想使用“ content-assigned-to-instance”,它还为您提供了简单的添加,删除按钮,因为这些按钮实际上并不会删除任何内容,而只是从模块实例中删除分配。

现在您的情况有点特殊,因为您想在另一个模块实例中重复使用完全相同的集合。 有几种方法可以执行此操作:

相同视图

如果它是完全相同的视图,等等。只需使用DNN功能复制模块(将模块添加到另一个页面)

不同的看法

如果是不同的视图(可能更紧凑等),您将再次有多个选择。 第一种是使用dnn功能镜像/复制,然后仅将if-im放在此页面上然后以不同方式显示或注入另一个CSS。 没有任何开发诀窍,这可能是最简单的。

较难但可能更好的方法是实际使用新模板,并告诉它以在其他模块中配置项目的方式来检索项目-假设模块1是原始模板,模块2具有想要的其他模板可以按照与1中给定的完全相同的顺序访问模块1的项目。这样做的方法很简单,但是在模块2中需要几行C#代码。

您需要创建一个新的ModuleDataSource( https://2sxc.org/en/Docs/Feature/feature/4542 )对象,并告诉它它来自模块1。如果您从未做过,基本上就是您的代码可以与视觉设计器一样创建一个查询,但是您拥有更多控制权-请参见Wiki https://github.com/2sic/2sxc/wiki/DotNet-DataSources-All visual-query-designer中的Module-Data-Source不允许您“切换”模块(我们可能会在将来添加一个高级设置),但是该对象具有ModuleId属性,可以在访问数据之前对其进行设置,使其“切换”到该模块。 这是Module#2剃须刀中的伪代码...

var otherModData = CreateSource<ModuleDataSource>();
otherModData.ModuleId = 1;

foreach(var itm in AsDynamic(otherModData["Default"])) {
    ...
}

那应该做的:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM