整个网站部分作为DotNetNuke模块

时间:2011-07-05 20:18:32

标签: asp.net razor dotnetnuke dotnetnuke-5 dotnetnuke-module

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

我已经对DNN模块开发进行了相当广泛的研究(甚至观看了DNN公司的一些录制的网络研讨会)。不幸的是,我在网上找到的大部分内容都是关于开发简单的,类似于widget的模块。此外,大多数使用逐步“如何使用visual studio来实现x”方法,而我试图了解DNN如何工作。所以我似乎必须自己解决这个问题......

此时我已经对DNN有所了解了,我看到了几个不同的解决方案:

  1. 为我的自定义部分中的每个页面创建一个模块。我不太喜欢这个想法,特别是因为我的代码需要在多个页面之间共享。
  2. 开发一个内置多个用户控件的单个模块(每个页面一个),并使用自定义模块设置让每个页面知道要显示哪个控件。
  3. 开发一个“虚假”模块,它将作为一个库,以及每个页面的附加模块。
  4. 开发库模块,然后使用Razor主机模块和Razor脚本进行视图(我不需要/想要我的应用程序上的WebForms)。
  5. 所以我决定向你们寻求建议。哪种方式首选?也许以上都没有?我知道上面的所有四个选项都应该给我我想要的结果,但我也不想太过违反“DNN方式”......

4 个答案:

答案 0 :(得分:4)

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

所以 - 我建议采用Razor方法,虽然看起来你理解这种方法很好,但我想详细说明后代:

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

这应该很好。

答案 1 :(得分:1)

我假设您正在寻找以“网站项目”风格开发软件。我建议你看看“Web应用程序项目”的做事方式。

如果你在库中有共享功能,可以随意构建一个程序集并将其放在bin文件夹中,从那里它将被DNN选中,它将在http上下文中运行,这太棒了! / p>

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

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


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

答案 2 :(得分:1)

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

更清晰的定义

  • Package = 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. 侧边栏导航模块(帮助您 快速显示您的博客 写一段时间)
  3. 您可以做的是将清单中的博客显示模块打包在<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 App项目)
    2. 7个模块
    3. 将一个组件放入垃圾箱/
    4. 所有代码都是共享的,然后您可以继承其他库引用以进一步开发。
    5. 他们有不同的观点,名称,友好名称,但都共享一个共同的<foldername>

      KEY在包装中。

答案 3 :(得分: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>

它看起来像这样!这就是foldername所在的地方。它定义了将模块安装到DesktopModules的位置。

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

你肯定是在正确的道路上。