Dotnetnuke 如何访问另一个模块';2sxc v10.20+之后的内容和演示项目;

Dotnetnuke 如何访问另一个模块';2sxc v10.20+之后的内容和演示项目;,dotnetnuke,2sxc,dnn9,Dotnetnuke,2sxc,Dnn9,下面是通过2sxc 10.9.1编写的代码。虽然我能够为TabID、ModuleID获取CmsBlock并将其发送到.Render(),但我还需要更多。这是旧代码。不确定它是否有任何区别,但此视图使用的是普通链接内容类型,并且在较旧版本的内容应用程序(appx 3.03=ish)中运行。2sxc已经升级,现在是11.22.0 LTS 我已经删除了不必要的东西,所以我怀疑这是运行的 @using ToSic.Razor.Blade @using ToSic.SexyContent.Environm

下面是通过2sxc 10.9.1编写的代码。虽然我能够为TabID、ModuleID获取CmsBlock并将其发送到.Render(),但我还需要更多。这是旧代码。不确定它是否有任何区别,但此视图使用的是普通链接内容类型,并且在较旧版本的内容应用程序(appx 3.03=ish)中运行。2sxc已经升级,现在是11.22.0 LTS

我已经删除了不必要的东西,所以我怀疑这是运行的

@using ToSic.Razor.Blade
@using ToSic.SexyContent.Environment.Dnn7

@{
  var Helpers = CreateInstance("_Helpers.cshtml");

  // Display the items from the Manage Links module, we go in 'sideways'
  // this gives us just the Content items with their Presentations settings, etc.
  var sxci = Factory.SxcInstanceForModule(3360, 606); // ModuleID of Manage Links
  var dyn = Factory.CodingHelpers(sxci);
  var allLinks = dyn.AsDynamic(dyn.Data["Default"]); 
}

@* other stuff *@

<div class="row co-documents justify-content-center align-items-center">
  @foreach (var linkItem in allLinks) {
    var linkInfo = Helpers.LinkInfos(linkItem.Link, linkItem.Window, linkItem.Icon);
    string iconStyle = linkItem.IconStyle ?? "fas";
    int linkColumns = (int)linkItem.Presentation.Columns;
    string linkIconAlign = linkItem.Presentation.IconAlign;
    string linkIconBGColor = linkItem.Presentation.IconBGColor;

@* other stuff *@

  }
</div>
我错过了什么?我怎样才能像以前那样访问其他模块的数据?在本例中,我在网站上的3个不同位置执行此操作。为了用英语概括这一点,我有一个模块,客户端管理一些特殊的链接,这些链接显示在MegaMenus、其他特殊导航中,并直接显示在几个页面上。在每个地方,它们的渲染方式都不同。在他们的“主页”模块中,他们在那里被编辑,他们看起来就像这样无聊:

var allLinks = something1.AsList(something2.Data["Default"]);
<ul>
var items = dc.AsList(dc.App.Data["Bibliography"]);
foreach (var item in items) 
{
  <li>@item.EntityTitle</li>
}
</ul>

我意识到它是这样的:

var allLinks = something1.AsList(something2.Data["Default"]);
<ul>
var items = dc.AsList(dc.App.Data["Bibliography"]);
foreach (var item in items) 
{
  <li>@item.EntityTitle</li>
}
</ul>
我知道
something2
是一个应用程序实例,但如何在其他模块的上下文中创建它

现在什么是什么?如何实例化它?看起来它是一个
新的ToSic.Sxc.code.DynamicCode()
,但我不知道如何以一种可以使用的方式构造它,而不仅仅是抛出错误


提前感谢您提供的任何见解

好吧,这需要一点测试,反复试验。而且我还忽略了DynamicCode()是工厂类的一个方法。现在回想起来,这似乎很容易

所以首先你得到区块建设者

  var block = Factory.CmsBlock(606, 3360);
然后从中获得DynamicCode实例(Code.dnndDynamicCodeRoot)

var dc = Factory.DynamicCode(block);
然后事情就正常了

var allLinks = AsList(dc.Data["Default"]);

代码的其余部分与以前一样工作;我可以通过标题(从ListContent重命名)和演示文稿(现在是Content.Presentation)的链接进行查看。如果您在2sxc视图的C#Razor模板中,上述答案可以正常工作。但是如果你在外面,比如在DDR菜单的Razor模板中,该怎么办

与上面相同的两个步骤(获取块和dc),但是您无权访问AsList()或应用程序。谢天谢地,您已经有了DynamicCode,因此您可以像下面这样获取书目内容类型中的所有记录:

var allLinks = something1.AsList(something2.Data["Default"]);
<ul>
var items = dc.AsList(dc.App.Data["Bibliography"]);
foreach (var item in items) 
{
  <li>@item.EntityTitle</li>
}
</ul>
    var items=dc.AsList(dc.App.Data[“参考书目]); foreach(项目中的var项目) {
  • @item.EntityTitle
  • }

因此,一旦你有了
dc
,你就可以使用所有常见的2sxc玩具了。

你发现了这一点,真是太棒了-很抱歉,它没有完整的文档记录。我们真的需要一些文档帮助-志愿者?