如何获取正在使用视图的页面列表?
How can I get a list of pages where a View is in use?
我有一个使用内容应用程序的大型网站,我们有各种各样的视图。在测试和开发中,我们越来越需要知道视图正在使用哪些页面。正如我所说,该网站很大,超过 500 页,要知道视图在哪个页面上使用是不可能的。
在 2sxc 中有什么方法可以解决这个问题吗?我不知道的功能?调试?见解?我愿意在视图中用代码来完成。我以为可以通过部分解决...
if(IsSuperUser(Dnn.User)) {
@RenderPage("_Debug_ListPagesUsingThisView.cshtml")
}
我不知道如何或从哪里开始。有没有办法从视图中获取视图的实体(记录)?一旦我有了它,是否有路径可以进入应用程序的模块设置?告诉应用程序使用什么视图的信息实际存储在哪里?我可以去吗?
- DNN 9.03.02
- 2sxc 10.9.1
- 内容应用 3.03.x
添加
从下面的评论链继续...
我无法进一步了解,我从 foreach(... .Parents()) 返回的实体具有以下字段:Template、Content、Presentation、ListContent 和 ListPresentation ...但是我无法弄清楚如何从中获取任何数据或字段。尽管 myEntity.Content.Count(和 .Template.)显示 1,但任何试图访问它的尝试都超出了 GetType()(它是一个动态实体列表)returns a无效的。这看起来很奇怪。
你知道实体类型到底是什么以及如何使用它吗?有趣的是,.Parents() returns 中的项目数与为此视图分配的 Content-Type 中的项目数相同,但是当我查看 (SQL) 数据时,它们是与实际内容不同的 EntityId(例如,如果我跟踪父 EntityId 3344,我发现附近的 EntityId 3343 是此视图在某处显示的 Content-Type 记录之一)。所以这是一个有趣的线索。想法?
这是我们永远的愿望清单:)。到目前为止,我们还没有找到执行此操作的资源。最好的起点是阅读数据是如何从
映射的
- https://docs.2sxc.org/specs/cms/dnn-module.html
- http://2sxc.org/en/blog/post/understanding-content-binding-to-modules-and-pages-(300)
利用这些知识,您可以assemble 获得所需的数据。恐怕这将花费您至少 1/2 天的工作时间。
好的,我终于创建了自己的代码 - 是的,这很难!!!我至少花了 5 个小时才让一切正常工作 - 你欠我很多啤酒 ;)
我在杂项部分将其作为 DNN 教程的一部分:
https://2sxc.org/dnn-tutorials/en/razor/2sa110/page
玩得开心!
这里是我需要编写的代码的摘录 - 很多 LINQ
// create a map of all blocks to DNN modules
var block2ModuleMap = contentBlocks.GroupJoin(allMods,
cb => cb.EntityGuid,
m => TryParseGuid(m.ModuleSettings[SettingsCG]),
(cb, m) => new {
Block = cb,
Modules = m
}
);
// now map all the template-IDs to the block-module map
var template2BlockModuleMap = block2ModuleMap.GroupBy(b2m => {
var templates = AsList(b2m.Block.Template as object);
return templates.Any() ? templates.First().EntityGuid : null;
});
var viewsWithBlocks = views.GroupJoin(template2BlockModuleMap,
v => v.EntityGuid,
bwm => bwm.Key,
(v, bwm) => {
var blockWithMod = bwm.SingleOrDefault();
return new {
View = v,
Blocks = blockWithMod,
ModsCount = blockWithMod != null ? blockWithMod.SelectMany(bmlist => bmlist.Modules).Count() : 0,
};
}
);
我有一个使用内容应用程序的大型网站,我们有各种各样的视图。在测试和开发中,我们越来越需要知道视图正在使用哪些页面。正如我所说,该网站很大,超过 500 页,要知道视图在哪个页面上使用是不可能的。
在 2sxc 中有什么方法可以解决这个问题吗?我不知道的功能?调试?见解?我愿意在视图中用代码来完成。我以为可以通过部分解决...
if(IsSuperUser(Dnn.User)) {
@RenderPage("_Debug_ListPagesUsingThisView.cshtml")
}
我不知道如何或从哪里开始。有没有办法从视图中获取视图的实体(记录)?一旦我有了它,是否有路径可以进入应用程序的模块设置?告诉应用程序使用什么视图的信息实际存储在哪里?我可以去吗?
- DNN 9.03.02
- 2sxc 10.9.1
- 内容应用 3.03.x
添加 从下面的评论链继续...
我无法进一步了解,我从 foreach(... .Parents()) 返回的实体具有以下字段:Template、Content、Presentation、ListContent 和 ListPresentation ...但是我无法弄清楚如何从中获取任何数据或字段。尽管 myEntity.Content.Count(和 .Template.)显示 1,但任何试图访问它的尝试都超出了 GetType()(它是一个动态实体列表)returns a无效的。这看起来很奇怪。
你知道实体类型到底是什么以及如何使用它吗?有趣的是,.Parents() returns 中的项目数与为此视图分配的 Content-Type 中的项目数相同,但是当我查看 (SQL) 数据时,它们是与实际内容不同的 EntityId(例如,如果我跟踪父 EntityId 3344,我发现附近的 EntityId 3343 是此视图在某处显示的 Content-Type 记录之一)。所以这是一个有趣的线索。想法?
这是我们永远的愿望清单:)。到目前为止,我们还没有找到执行此操作的资源。最好的起点是阅读数据是如何从
映射的- https://docs.2sxc.org/specs/cms/dnn-module.html
- http://2sxc.org/en/blog/post/understanding-content-binding-to-modules-and-pages-(300)
利用这些知识,您可以assemble 获得所需的数据。恐怕这将花费您至少 1/2 天的工作时间。
好的,我终于创建了自己的代码 - 是的,这很难!!!我至少花了 5 个小时才让一切正常工作 - 你欠我很多啤酒 ;)
我在杂项部分将其作为 DNN 教程的一部分:
https://2sxc.org/dnn-tutorials/en/razor/2sa110/page
玩得开心!
这里是我需要编写的代码的摘录 - 很多 LINQ
// create a map of all blocks to DNN modules
var block2ModuleMap = contentBlocks.GroupJoin(allMods,
cb => cb.EntityGuid,
m => TryParseGuid(m.ModuleSettings[SettingsCG]),
(cb, m) => new {
Block = cb,
Modules = m
}
);
// now map all the template-IDs to the block-module map
var template2BlockModuleMap = block2ModuleMap.GroupBy(b2m => {
var templates = AsList(b2m.Block.Template as object);
return templates.Any() ? templates.First().EntityGuid : null;
});
var viewsWithBlocks = views.GroupJoin(template2BlockModuleMap,
v => v.EntityGuid,
bwm => bwm.Key,
(v, bwm) => {
var blockWithMod = bwm.SingleOrDefault();
return new {
View = v,
Blocks = blockWithMod,
ModsCount = blockWithMod != null ? blockWithMod.SelectMany(bmlist => bmlist.Modules).Count() : 0,
};
}
);