【问题标题】:Populate ContentPart in ContentHandler from custom data source从自定义数据源填充 ContentHandler 中的 ContentPart
【发布时间】:2012-07-18 20:42:58
【问题描述】:

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

有几个关于通过在 ContentHandler 中加载数据来从 Web 服务访问数据的参考,但我还没有想出一个实现。我已经能够使用控制器/视图读取/写入数据,但这似乎更具限制性。

Use RavenDB as the database for an Orchard CMS module

How to change Orchard record repository

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

谁能指出我正确的方向?

谢谢!

【问题讨论】:

  • 如果我错了,请纠正我,但为了在 ContentHandler 中填充 ContentPart(参见 @piotr-szmyd here 的帖子),您需要在 Orchard 中存储某种 ID。否则,您将使用什么来从 Web 服务中查找数据?这是我试图避免的,因为我们不想通过 Orchard 存储查找 ID,因此导致我四处走动。我以为我可以以某种方式解决问题,但我将尝试为 Raven 实现 IRepository。

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


【解决方案1】:

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

你只需要:

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

这样您将拥有一个没有任何数据存储在 Orchard 数据库中的零件,完全从外部源加载。

【讨论】:

    【解决方案2】:

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

    如果您不需要这样做,那么您应该构建控制器操作(可能还有小部件)来显示该数据。即使您这样做了,您仍然可以从 Orchard 的许多事情中受益,例如主题化。

    【讨论】:

      猜你喜欢
      • 2015-06-03
      • 2011-05-10
      • 2019-02-16
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多