首页 文章

整个网站部分作为DotNetNuke模块

提问于
浏览
2

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

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

在这一点上,我已经对DNN有所了解了,我看到了几个不同的解决方案:

  • 为我的自定义部分的每个页面创建一个模块 . 我不太喜欢这个想法,特别是因为我需要在多个页面之间共享代码 .

  • 开发一个内部具有多个用户控件的单个模块(每个页面一个),并使用自定义模块设置让每个页面知道要显示的控件 .

  • 开发一个可用作库的"bogus"模块,以及每个页面的附加模块 .

  • 开发库模块,然后使用Razor主机模块和Razor脚本进行视图(我不需要/想要我的应用程序上的WebForms) .

所以我决定问你们的建议 . 哪种方式首选?也许以上都没有?我知道上面的所有四个选项应该给我我想要的结果,但我也不想太过违反“DNN方式”......

4 回答

  • 1

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

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

    • 构建一个库(程序集/ DLL)来封装所有可重用的业务逻辑

    • 为每个使用该逻辑并在页面上呈现数据的页面构建Razor视图

    • 在您需要的每个页面上删除Razor Host模块并将其指向正确的视图

    这应该很好 .

  • 1

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

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

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

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


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

  • 1

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

    更明确的定义

    • Package = Zip文件(非模块)

    • Manifest = .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>
    

    因此,上面定义了安装包中的单个模块 .

    In the context of a blog, you would have 2 modules

    • 博客显示模块(显示选定的博客或整个批次)

    • 边栏导航模块(帮助您快速显示您在任何时间段内编写的博客)

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

    For example, this project has 7 modules; Side bar navigation, custom search module, blah blah blah

    <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个Web App项目)

    • 7个模块

    • 一个放置在垃圾箱中的组件/

    • 所有代码都是共享的,然后您可以继承其他库引用以进一步开发 .

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

    The KEY is in the Packaging.

  • 4
    <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上的源代码公开 .

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

相关问题