如何在 EPiServer 8.0 中以编程方式创建子页面

Posted

技术标签:

【中文标题】如何在 EPiServer 8.0 中以编程方式创建子页面【英文标题】:How to programmatically create a child page in EPiServer 8.0 【发布时间】:2015-03-04 09:17:25 【问题描述】:

我是 EPiServer 的新手,所以您可能会发现我的问题非常简单。请帮忙!

问题:我可以在哪里插入以编程方式创建子页面的代码到新创建的 EPiServer 页面?

上下文:当编辑者进入 EPiServer 网站的编辑视图并创建一个新页面时,系统会按预期创建一个所选页面类型的实例。但是,我还希望系统根据自定义代码为这个新创建的页面创建一个子页面。

我看过大量关于如何以编程方式创建页面的示例,但我还没有看到在何处插入此代码的示例。

假设我有一个汽车分类页面类型。当编辑器通过 EPiServer 手动创建此实例时,我希望系统进入数据库,获取所有不同的分类,并在新创建的汽车分类页面类型(即轿车)下为每个分类创建一个子页面页面、掀背车页面、运动页面)。

【问题讨论】:

您使用的是哪个版本的 EPiServer? @JohanKronberg 抱歉忘记包含该细节。使用 8.0 版 - 刚刚更新了标题以包含该信息。谢谢 【参考方案1】:

简而言之,您可以创建一个 InitializableModule,在其中连接到 ContentRepository 的 PageCreated 事件以在新创建的页面下方创建一个页面。

类似于以下内容:http://tedgustaf.com/blog/2010/5/attach-episerver-event-handlers-on-startup-using-initializablemodule/

注意:在 EPiServer 7/8 中,在附加事件处理程序和以编程方式编辑内容时,您将使用 ServiceLocator.Current.GetInstance<IContentRepository>() 而不是 DataFactory。

编辑:没关系,刚刚发现你找到了 Anders 关于这个主题的帖子。 :) 祝你好运!

【讨论】:

【参考方案2】:

好的,我找到了解决问题的方法。它是创建可以附加到页面类型的自定义属性和继承 IInitializableModule (EPiServer.Framework) 的类的组合,该类拦截页面创建并检查创建的页面是否具有提到的新属性。如果是,则调用创建子页面的方法。

发现了一个非常有用的帖子here。但是,代码是 2011 年的,所以一些类不再存在(EPiServer Framework 6R2 与我的 8.0),所以我不得不更新它们。但要点就在那里。有兴趣看我的代码的朋友,请联系我!

编辑:这是我解决它的方法 - https://blog.nicolaayan.com/2015/03/episerver-auto-create-child-pages-on-add-new-page/

【讨论】:

创建了一个新的博客,将这个问题的解决方案作为我的第一篇文章! nicolaayan.blogspot.com

以上是关于如何在 EPiServer 8.0 中以编程方式创建子页面的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式“翻译”EPiServer 10中的页面

如何以编程方式检索 EPi Server 网站的所有启用语言的列表?

在 Swift 4 中以编程方式将 UIImageView、UILabel 添加到 UIStackView

我应该在 init 方法中还是在 didMove(toView:) 中以编程方式设置 SKScene?

在Swift 3中以编程方式创建一个没有XIB的NSViewController

如何在 GNU Make 中以编程方式定义目标?