2

我需要开发一个网站的整个部分(大约 10 个不同的页面)作为 DotNetNuke 模块。该站点将使用 DNN 作为 CMS,编辑器将在其中管理大部分网站的 HTML 内容(我将开发的部分除外)。

我已经对 DNN 模块开发进行了相当广泛的研究(甚至观看了 DNN Corp 录制的一些网络研讨会)。不幸的是,我在网上能找到的大部分内容都是关于开发简单的、类似小部件的模块。此外,其中大部分使用分步“如何使用 Visual Studio 完成 x”的方法,而我试图了解 DNN 的工作原理。所以看来我得自己想办法了……

在这一点上,我已经对 DNN 有点熟悉,并且我看到了几种不同的解决方案来解决我的问题:

  1. 为我的自定义部分的每个页面创建一个模块。我不太喜欢这个想法,特别是因为我有需要跨多个页面共享的代码。
  2. 开发包含多个用户控件的单个模块(每个页面一个),并使用自定义模块设置让每个页面知道要显示哪个控件。
  3. 开发一个“虚假”模块,作为库工作,并为每个页面添加附加模块。
  4. 开发库模块,然后将 Razor 主机模块和 Razor 脚本用于视图(我不需要/想要在我的应用程序上使用 WebForms)。

所以我决定向大家征求意见。哪个是首选的方式?也许以上都没有?我知道上面的所有四个选项都应该给我想要的结果,但我也不想过多地违背“DNN 方式”......

4

4 回答 4

4

我根本不推荐#1(多个模块)或#3(也是多个模块),尽管#2(确定视图的具有模块级别设置的单个模块)绝对是DNN模块开发人员广泛使用的可靠选项,听起来你更喜欢#4(Razor)而不是#2,因为你喜欢开发风格。

所以-我建议使用 Razor 方法,尽管您似乎很好地理解了该方法,但我想为后代详细说明:

  • 构建一个库(程序集/DLL)来封装所有可重用的业务逻辑
  • 为每个使用该逻辑的页面构建 Razor 视图并在页面上呈现您的数据
  • 将 Razor Host 模块拖放到您需要的每个页面上,并将其指向正确的视图

这应该会很好。

于 2011-07-05T23:33:36.763 回答
1

我假设您正在考虑以“网站项目”风格开发您的软件。我会推荐你​​看看“Web 应用程序项目”的做事风格。

如果您在库中共享功能,请随意构建一个程序集并将其放入 bin 文件夹中,从那里,DNN 将拾取它并在 http 上下文中运行,这很棒!

在一个项目中构建您的模块,并将不同的模块打包到您的 DNN 清单中。

希望我不是在谈论你所理解的。


添加了另一个答案,它本身就是一个帖子。

于 2011-07-06T10:58:08.107 回答
1

模块 - 这是一个我们所有人都非常松散地使用的术语。

更清晰的定义

  • 包 = Zip 文件(不是模块)
  • 清单 = .DNN 文件

清单允许您将模块(查看/编辑/设置组)用户控件定义为单个安装包。

在 DNN 3.0 清单中,如果您仍然是这种格式,您会注意到一个基本的单个安装包的结构是这样的(简要)

<dotnetnuke version="3.0" type="Module">
  <folders>
    <folder>
      <name>Side bar Navigation</name>
      <modules>
        <module>
          <friendlyname></friendlyname>
          <cachetime>0</cachetime>
          <controls>
            <control>
              <title>View</title>
              <src>DesktopModules/Module/View.ascx</src>
              <type>View</type>
            </control>
            <control>
              <key>Settings</key>
              <title>Settings</title>
              <src>DesktopModules/Module/Settings.ascx</src>
              <type>Edit</type>
            </control>
          </controls>
        </module>
      </modules>
      <files>
          ...
      </files>
    </folder>
</folders>
</dotnetnuke>

所以上面定义了安装包中的单个模块。

在博客的上下文中,您将有 2 个模块

  1. 博客显示模块(显示选定的博客或全部)
  2. 侧边栏导航模块(帮助您快速显示您撰写的任何时间的博客)

您可以做的是将清单中的博客显示模块打包到一个副本中 <folder></folder>,然后将侧边栏导航模块打包到另一个<folder></folder>结构副本中。

比如这个项目有7个模块;侧边栏导航,自定义搜索模块,等等等等

<dotnetnuke version="3.0" type="Module">
  <folders>
    <folder>...</folder>
    <folder>...</folder>
    <folder>...</folder>
    <folder>...</folder>
    <folder>...</folder>
    <folder>...</folder>
    <folder>...</folder>
  </folders>
</dotnetnuke>
  1. 1 个安装包(即 1 个 Web 应用项目)
  2. 7 个模块
  3. 一个组件放入垃圾箱/
  4. 所有代码都是共享的,然后您可以从其他库引用继承以进一步开发。

他们有不同的观点、名字、友好的名字,但都有一个共同点<foldername>

关键在包装中。

于 2011-07-07T00:49:14.967 回答
1
   <folder>
      <name>BlogDisplay</name>
      <friendlyname>Blog Display</friendlyname>
      <foldername>WebLog</foldername>
      <modulename></modulename>'

   '<folder>
      <name>BlogSidebar</name>
      <friendlyname>Sidebar Navigator</friendlyname>
      <foldername>WebLog</foldername>
      <modulename></modulename>

它看起来像这样!那就是文件夹名称所在的位置。它定义了您的模块在 DesktopModules 中的安装位置。

在 DNN 5 书籍中,仍然使用 Web Site Project 的开发方法,但是当您参与核心模块的开发时,您会发现项目是 Web App Project 开发风格,这更好,因为所有您的代码隐藏在程序集中,而不是在网络上作为源代码公开。

你绝对是在正确的道路上。

于 2011-07-07T02:53:34.397 回答