前面的博客介绍了:

如何在本地安装DNN6

如何创建DNN模块

博客园原文地址 :  学习之模块架构 DotNetNuke 6

这篇博客主要是讲模块的架构和加载,以及模块与DotNetNuke门户网站(Portals)系统的关系。充分了解模块可以帮助DNN开发者根据需要更清晰的构建模块。

在DNN中,模块是一个可插入的用户接口组件,用来处理请求并生成动态的内容。它只能出现在ASP.NET页面上,而页面可以包括任意数量的模块"实例"。

整个模块架构包括四个部分 : 门户网站(Portal),页面(Tab),模块(Module)和模块容器(Container)。

  • 门户网站(Portal)

Portal可以定义为一个基于Web的应用程序,从不同的源聚集内容,并寄宿信息系统的表示层(模块)。下图描述了Portal的基本架构,DNN处理页面请求时需要执行许多步骤。下述步骤在页面初始化的过程中执行,用来在运行时动态地加载模块。动态创建的模块然后就能够处理它们自己的生存周期,包括诸如初始化、加载、呈现等各种事件。

图一 : Portal的基本架构

第一步: 页面配置检索(Page Configuration Retrieval)

第1步就是为被请求的页面检索模块。检索步骤由许多重要的信息块构成,例如页面上出现的各个模块、模块在页面上显示的区域(即内容窗格Pane),以及与每个模块相关联的安全角色。

//Default.aspx.cs//OnInit//load skin control and register UI jsUI.Skins.Skin ctlSkin = UI.Skins.Skin.GetSkin(this);//add skin to pageSkinPlaceHolder.Controls.Add(ctlSkin);

//DotNetNuke.UI.Skins.Skin.cs : OnInit()bool success;//Load the Module Control(s)success = Globals.IsAdminControl() ? ProcessSlaveModule() : ProcessMasterModules();

//DotNetNuke.UI.Skins.Skin.cs : ProcessMasterModules()bool success = true;if (TabPermissionController.CanViewPage()){  //check portal expiry date  if (!CheckExpired())  {    if ((PortalSettings.ActiveTab.StartDate < DateAndTime.Now && PortalSettings.ActiveTab.EndDate > DateAndTime.Now) || TabPermissionController.CanAdminPage() || Globals.IsLayoutMode())    {      //dynamically populate the panes with modules      if (PortalSettings.ActiveTab.Modules.Count > 0)      {        foreach (ModuleInfo objModule in PortalSettings.ActiveTab.Modules)        {          success = ProcessModule(objModule);        }      }

第二步: 安全审计(Security Audit)

第2步就是判断在上一步中检索出来的安全信息。通过检查当前用户的角色(是注册用户还是匿名用户)以及与每个模块相关联的查看角色,就可以为当前页面形成一列经过“授权”的模块。

private Boolean ProcessModule(ModuleInfo module){  bool success = true;  if (ModulePermissionController.CanViewModule(module) && module.IsDeleted == false &&((module.StartDate < DateTime.Now && module.EndDate > DateTime.Now) || Globals.IsLayoutMode() || Globals.IsEditMode()))  {  //...  }  //...}

第三步:内容注入(Content Injection)

第3步(也是最后一步)就是将“授权”模块动态地插入到页面上相应的内容窗格中。在所有的模块加载之后,每个模块就能够执行各自的事件并呈现内容。

Pane pane = GetPane(module);if (pane != null){  success = InjectModule(pane, module);}

  • 页面(Tab)

图二描述了基本的Portal的Tab组件。页面本身表示一个完整的标记文档,由大量的内容窗格(Pane)组成,并且在每个内容窗格中还包含大量的模块。

图二:页面组件

每个模块都包含一个标题、若干装饰(Container)以及由模块生成的内容。装饰可以包括若干按钮、链接以及一个改变模块状态或者执行与模块相关功能的悬浮菜单。

  • 模块(Module)

正如前面所述,Portal是基于Web的应用程序,处理各种请求并生成动态内容。每个模块都生成自己的标记块(称为段),再和皮肤的标记一起展示完整的文档。

因为每个模块都生成自己的标记,所以可以将模块视为较大应用程序中的微型应用程序。通常,用户通过单击链接或者提交表单(所提交的表单由门户网站系统及传递给相应模块的命令处理)与每个模块生成的内容交互。

  • 模块容器(Container)

模块周围的装饰称为模块容器。通过容器,用户能够与模块交互,执行诸如最小化、最大化以及其他高级特性(如果用户拥有该页面的编辑特权)的动作。

图三示范了一个HTML模块在用户以编辑特权登录时的模块容器。这个模块容器包含许多项,例如拥有一列管理选项的悬浮菜单、模块的标题。

图三:模块容器

DotNetNuke est le plus gros projet open-source en technologie .Net.

转载于:https://www.cnblogs.com/yhuang/archive/2012/03/28/modular_architecture_dnn6.html

学习之模块架构 DotNetNuke 6相关推荐

  1. 【从零学习OpenCV 4】了解OpenCV的模块架构

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...

  2. 打造企业级云深度学习平台——小米云深度学习平台的架构设计与实现

    作者:陈迪豪,小米深度学习工程师,负责小米云深度学习平台的架构和实现,目前专注于TensorFlow和Kubernetes社区. 责编:何永灿,欢迎人工智能领域技术投稿.约稿.给文章纠错,请发送邮件至 ...

  3. RT-1052学习笔记 - GPIO架构分析

    RT-1052学习笔记 - GPIO架构分析 一.RT1052之GPIO与IOMUX 二.GPIO架构分析 分析GPIO的外设框架 库函数操作 1.初始化MUX 2.初始化PAD 3.初始化GPIO外 ...

  4. 【小猫爪】AUTOSAR学习笔记01-AUTOSAR架构简介

    [小猫爪]AUTOSAR学习笔记01-AUTOSAR架构简介 前言 1 背景介绍 2 基本概念 3 方法论 4 分层软件架构 4.1 Application Layer(APP) 4.2 Basic ...

  5. 【转】学习3D引擎架构技术概述

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接: https://blog.csdn.net/jxw167/article/deta ...

  6. 基于问题学习安卓系统架构

    基于问题学习安卓系统架构 文章目录 基于问题学习安卓系统架构 1 原理 1.1 什么是安卓系统架构 APP层 Framework层 Native/Art Native: C/C++ Art HAL层 ...

  7. 学习3D引擎架构技术概述

    近期对3D引擎的架构设计做了一个梳理总结,现在开发游戏都离不开引擎,这些引擎包括Unity引擎,虚幻引擎,Cocos2dx引擎,自研引擎等等.很多开发者只会利用他们写逻辑,遇到优化问题就束手无策了,遇 ...

  8. 模块架构不是软件成功的“决定因素”

    [本文是09年的一篇旧文,出于某些原因,对原文内容有删减,在这里整理后重新发表] 前言 感谢XXX对我们技术,对我们公司产品提出这些意见,我们公司卖的是软件产品,开发软件是一件技术活,说实话,要把技术 ...

  9. Python学习:模块

    本文来自:入门指南 开胃菜参考:开胃菜 使用Python解释器:使用Python解释器 本文对Python的简介:Python简介 Python流程介绍:深入Python流程 Python数据结构:P ...

最新文章

  1. [LeetCode] Excel Sheet Column Number
  2. 牛客网Java刷题知识点之字节缓冲区练习之从A处复制文本文件到B处(BufferedReader、BufferedWriter)、复制文本文件的原理图解...
  3. 【双百解法】剑指 Offer 15. 二进制中1的个数
  4. php5.4 session配置,Session
  5. [SpringBoot2]错误处理_默认规则
  6. 网络位置可以看到另一个人的电脑_计算机组成原理(一)- 冯·诺依曼体系结构...
  7. 自定义filter中配置不被过滤的资源
  8. 大型翻车现场?人人车官博辟谣破产传闻 却被群嘲官博怕是还蒙在鼓里
  9. mysql主从-读写分离
  10. 防统方系统服务器的拼音,横渡医院防统方系统软件技术参数(最新)
  11. Leetcode 647.回文子串
  12. 财务人的编程自学之路
  13. P1548 棋盘问题
  14. hadoop快速自我学习--hadoop平台管理与维护
  15. 75 ----平面二次曲线方程的化简: 移轴变换、转轴变换、伸缩变换
  16. 手把手阿里云企业邮箱设置教程三步搞定
  17. C程序综合训练随堂考试(2021年5月27日)
  18. Mysql 多表连接查询
  19. 科技赋能农业变革:“大数据+农业”重新定义产业体系
  20. Facial alignment with imutils

热门文章

  1. jQuery的preventDefault()
  2. C# 将List中的数据导入csv文件中
  3. modelsim仿真
  4. 深入理解Javascript之执行上下文(Execution Context)
  5. web窗体的基本控件
  6. STM 32 窗口看门狗
  7. cocos2d-x项目101次相遇-安装和环境搭建 -xcode
  8. Oracle分析函数详述
  9. 最新Butterknife集成 全部方法(完整版)
  10. android Arrays.fill()的使用