从自定义数据源填充ContentHandler中的ContentPart

时间:2012-07-18 20:42:58

标签: asp.net-mvc-3 content-management-system orchardcms

我们有一个使用RavenDB的现有应用程序,并且希望创建一个自定义的Orchard Admin模块,该模块可以读取和写入Raven中的数据,以便我们可以管理数据。理想情况下,实现将允许我们使用ContentParts,以便我们可以创建可重用的“模块”。

有几个引用通过在ContentHandler中加载数据来访问Web服务中的数据,但我无法提出实现。我已经能够使用Controller / View读取/写入数据,但这似乎更具限制性。

Use RavenDB as the database for an Orchard CMS module

How to change Orchard record repository

此外,我们需要管理的其中一个属性是图像。我们想利用媒体选择器字段在我们的管理界面中选择图像。只要我们可以通过浏览器访问图像,Orchard就可以存储物理图像。

有人能指出我正确的方向吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您正在使用Orchard内容项,Id已经存在 - 无需存储新内容。您需要使用一些标识符来绑定Orchard和后端存储,否则您必须重新实现整个Orchard数据层(这是一种过度杀伤)。

你只需要:

  • 创建一个派生自ContentPart(不是ContentPart<T>的部分,因为您不希望它存储在Orchard数据库中)。然后,
  • 为您的部件添加处理程序,连接到适当的生命周期事件(如OnLoading)并从后端加载您的数据以获取给定的内容项ID和部件类型组合。
  • 为您的部件添加驱动程序(照常)并将您的数据存储逻辑放在Editor方法中。

通过这种方式,您将拥有一个没有任何数据存储在Orchard数据库中的部分,完全从外部源加载。

答案 1 :(得分:0)

如果你希望能够用Orchard部分(评论,评级等)来丰富外部数据,你应该建立一个部分,就像Piotr解释的那样。这意味着以某种方式为所有远程对象创建内容项,这将带来其自身的挑战(这意味着同步不同的数据源,这是永远不会有趣的事情)。

如果您不需要这样做,那么您应该构建控制器操作(以及可能的小部件)来表示该数据。即使你这样做,你仍然可以从许多Orchard的东西中受益,比如主题。