Đăng nhập | Đăng ký

Danh sách thành viên | Cá nhân | Nhà đất, bất động sản

Diễn đàn    Các Projects Dotnetnuke (DNN)    Phát triển module trên dotnetnuke

Thành viênNội dung
aspnet

Lập trình không biên giới
598  bài
04-09-2008 11:31:48
Một vài khái niệm để thông suốt phát triển module dotnetnuke có nghĩa là làm cái gì như thế nào, kết quả ra sao ? Túm lại đơn giản là thế này :

- Dotnetnuke là 1 cổng thông tin portal.
- Các yếu tố cơ bản của portal (cổng thông tin)
+ website & website con
+ các trang (pages) trên wwebsite
+ Các vùng (trên 1 trang) gọi là Pane
+ Các porlet (chứa nội dung thông tin)
 
aspnet

Lập trình không biên giới
598  bài
04-09-2008 11:44:06
porlet : nôm na nó là một hình vuông trên website chứa nội dung thông tin, nhiều hình vuông (porlet) ghép lại chúng ta có 1 trang web (web page), không biết định nghĩa webpage là cái gì nữa chỉ hy vọng là anh em đều hiểu khái niệm cơ bản webpage.

Các website thông dụng tại việt nam có 3 khối thông tin, menu bên trái, nội dung chính ở giữa và bên phải là quảng cáo, đối tác ... 3 khối thông tin trên được khái quát thành 3 Pane (vùng). Như vậy chúng ta có khái niệm vùng (Pane = hoặc region thì cũng thế), trên 1 vùng có thể chứa n Porlet.

Các vùng có nội dùng ghép lại thì chúng ta có webpage : tương đương với khái niệm page trong dotnetnuke.Nhiều page ghép lại với nhau thì thành 1 website. Tuy nhiên cũng phải nói thêm, khái niệm page trên DNN rộng hơn nhiều.

Ví dụ

http://thienan.vn/tintuc/tabid/55/id/6/Default.aspx
http://thienan.vn/tintuc/tabid/55/id/8/Default.aspx
http://thienan.vn/tintuc/tabid/55/id/16/Default.aspx
http://thienan.vn/tintuc/tabid/55/id/19/Default.aspx
http://thienan.vn/tintuc/tabid/55/id/20/Default.aspx

là 1 page có PageID=55.
Trong Page này, porlet chính giữa hiển thị nội dung = cách đọc trong CSDL tin tức có mã 6, 8, 16, 19, 20 ...

Vì các porlet có cái load động theo URL, có cái load tĩnh nên nhu cầu cần có settings cho mỗi porlet. Settings là gì ? là phần cho phép người dùng chỉ định cách thức hiển thị thông tin cho mỗi porlet.

Quay lại với Page, chúng ta có thể thấy khái niệm Page trong DNN đơn giản là cái khung các Pane bố trí ra sao, trên mỗi Pane đó các porlet đặt và hiển thị nội dung thế nào -> Page là khung cho các vùng (Pane, Region)
---
Coding for food
 
aspnet

Lập trình không biên giới
598  bài
04-09-2008 11:50:49
YAHOO


MSN


Nhìn 2 hình bên trên của Yahoo và MSN, chúng ta có thể thấy các miếng vuông rất giống nhau, mỗi miếng vuông đó là 1 porlet, bao bên ngoài mỗi porlet là 1 container.

Như vậy có thể thấy container là cái chỉ dùng để làm đẹp, nó giúp các porlet của website được trình bày một cách thống nhất. Cái Container này không phải lập trình, DNN đã làm hộ. Chúng ta chỉ làm việc viết cách hiển thị cái nội dung bên trong các container, việc viết code hiển thị nội dung bên trong là việc viết module cho DNN.
---
Coding for food
 
aspnet

Lập trình không biên giới
598  bài
05-09-2008 12:02:28
Để viết code cho 1 module chúng ta nên biết cấu trúc module của DNN

- 1 Module có n Definitions
- 1 Definition có n Controls

Trong 1 module có 2 Control đặc biệt, là các control có key = "" và key = "Settings". Control key=(blank) thì chúng ta có thể thêm nó vào 1 Page. Control có key=Settings là phần thiết lập cho module.

1 Module như vậy có thể có nhiều Control cùng có key = blank, tuy nhiên khuyến cáo là chúng ta chỉ nên dùng 1.
---
Coding for food
 
aspnet

Lập trình không biên giới
598  bài
05-09-2008 12:17:40
Để gọi 1 usecontrol (tương đương với 1 file ascx) chúng ta viết chúng ta dùng

DotNetNuke.Common.Globals.NavigateURL(PortalSettings.ActiveTab.TabID, "edit", "mid/" + this.ModuleId.ToString());

Chúng ta nên để ý rằng DNN có 2 chế độ chính, là chế độ frontend (trình diễn presentation) và backend (phần quản lý administration)

Câu lệnh trên cho phép chúng ta chui vào phần backend (quản lý), cho phép chúng ta gọi 1 control duy nhất là control có nhiệm vụ edit 1 tin tức.

Url cho phép chúng ta truy cập vào tầng frontend (tầng trình diễn)
http://thienan.vn/tintuc/tabid/55/id/19/Default.aspx

URL cho phép chúng ta vào backend (tầng quản lý)
http://localhost/Home/tabid/36/ctl/admin/mid/378/Default.aspx

chúng ta xem xét kỹ URL này

ctl/admin/mid/378/Default.aspx
=> ctl = "admin" (key) , mid = "378" (ModuleID)
=> truy cập vào module có mã 378 đọc ra usercontrol (file ascx) có key = "admin"

Như vậy có thể thấy backend và frontend khác nhau ở chỗ backend có phần .../ctl/xxx/mid/yyy...
tức là có giá trị của ctlmid

các key thông dụng cho quản lý tin tức

key = "news_edit" sửa 1 tin tức
key = "news_add" thêm mới 1 tin
key = "news_publish" cho phép 1 tin được đăng hay không
key = "news_delete" xoá 1 tin tức mới
key = "news_view" xem nội dung 1 tin

Thông thường "news_view" -> "" vì key = (blank) có nghĩa là chúng ta có thể thêm control này (porlet) vào frontend (thêm porlet vào trang - webpage trình diễn nội dung)
---
Coding for food
 
aspnet

Lập trình không biên giới
598  bài
05-09-2008 12:24:48
Các module được viết và đặt trong thư mục \Website\DesktopModules

Để viết 1 control chúng ta khai báo

C#
public partial class news_admin : DotNetNuke.Entities.Modules.PortalModuleBase

VB
Public Partial Class EditHtml
Inherits DotNetNuke.Entities.Modules.PortalModuleBase

Để phần này không lỗi module của bạn phải Reference đến file dotnetnuke.dll (còn reference là làm thế nào thì các bác tự tìm hiểu)




Hình này mà các bác nhìn còn không hiểu thì anh em bó tay rồi.
---
Coding for food
 
aspnet

Lập trình không biên giới
598  bài
05-09-2008 12:30:53
Trong phần setting chúng ta làm như sau :

C#
public partial class news_list_settings : DotNetNuke.Entities.Modules.ModuleSettingsBase

VB
Partial Public Class Settings
Inherits DotNetNuke.Entities.Modules.ModuleSettingsBase

Trong ascx settings này chúng ta phải viết 2 hàm (bắt buộc)

VB
Public Overrides Sub LoadSettings()
C#
public override void LoadSettings()




C#
public override void UpdateSettings()
VB
Public Overrides Sub UpdateSettings()

Trong này để ghi vào CSDL chúng ta dùng


VB
Dim objModules As New DotNetNuke.Entities.Modules.ModuleController
Dim objModule As DotNetNuke.Entities.Modules.ModuleInfo = objModules.GetModule(ModuleId, TabId, False)

'Update Tab Module Settings
objModules.UpdateModuleSetting(ModuleId, "TEXTHTML_ReplaceTokens", rblstReplaceTokens.SelectedValue)


C#
DotNetNuke.Entities.Modules.ModuleController objModules = new DotNetNuke.Entities.Modules.ModuleController();
objModules.UpdateModuleSetting(ModuleId, "newsid", newsid.ToString());
objModules.UpdateModuleSetting(ModuleId, "limits", txtLimits.Text);

Đọc ra thì thế nào

C#
txtLimits.Text = ModuleSettings ["limits"] .ToString();
VB
rblstReplaceTokens.SelectedValue = CType(ModuleSettings("TEXTHTML_ReplaceTokens"), Byte)
---
Coding for food
 
aspnet

Lập trình không biên giới
598  bài
05-09-2008 12:38:56
Trong frontend (giao diện trình diễn) để lấy nội dung của setting chúng ta cũng dùng

string limits= Settings ["limits"] .ToString();
Rồi hiển thị mọi thứ bình thường như code ASP.NET.

Thông thường anh em chúng ta dùng repeater và các thứ Label, Datagridview ... để hiển thị nội dung cần làm.

Để module chạy ngon, dll cần phải copy vào thư mục /dotnetnuke/bin/ còn làm thế nào thì anh em tự nghiên cứu nhá.

Tức là chúng ta sẽ có /dotnetnuke/bin/module.dll

Như vậy là đủ kiến thức để viết những module đầu tiên rồi, ví dụ module Hello world.

Để viết cần thực hiện

1/ tạo file ascx : hello.ascx
2/ tạo module = hello -> def = "hello" -> control key = blank control = hello.ascx
3/ dịch module Hello ra file hello.dll
4/ copy file hello.dll vào /dotnetnuke/bin/hello.dll
5/ chọn 1 page bất kỳ rồi add module hello vào trang đó.
---
Coding for food
 
begindnn

Thằng dốt phải biết hỏi, thằng giỏi phải biết trả lời, Không trả lời => dốt, khà khà
5  bài
15-09-2008 04:46:41
Anh ơi, em có down mấy sách dotnetnuke về nhưng nó toàn tiếng anh, và cái phần viết module của người ta toàn thấy viết các thư viện phục vụ vào thư mục app_code... còn theo cách tiếp cận viết module của anh thì tạo ra một project sau đó biên dịch và cop vào, nhưng em vẫn mơ hồ quá, anh có thể hướng dẫn em một cách tiếp cận để viết module trên DNN, như cách viết cái CMS trên forum của mình ko a?

Em cảm ơn anh trước nhé!
 
quangvd


102  bài
26-02-2009 02:59:47
Anh ơi, em có down mấy sách dotnetnuke về nhưng nó toàn tiếng anh, và cái phần viết module của người ta toàn thấy viết các thư viện phục vụ vào thư mục app_code... còn theo cách tiếp cận viết module của anh thì tạo ra một project sau đó biên dịch và cop vào, nhưng em vẫn mơ hồ quá, anh có thể hướng dẫn em một cách tiếp cận để viết module trên DNN, như cách viết cái CMS trên forum của mình ko a?

Em cảm ơn anh trước nhé!

Viết trong app_code thì mình code nhanh hơn do ko phải build, mỗi lần chạy chỉ việc nhân Ctrl+S là xong. Nhưng cách này không tiện vì không phân ra được các dll riêng rẽ cho mỗi Project.
Còn viết theo kiểu project thì build và chờ chạy hơi lâu nhưng dễ kiểm soát hơn vì mỗi project được build thành 1 dll trong \Bin
---
 
nongdancute


19  bài
20-03-2009 05:19:31
Nhân tiện vấn đề viết module như bạn nói ở trên có 2 trường hợp,Cho mình hỏi cái này nhé, mình mới sử dụng DotNetNuke lần đầu tiên và mình sử dụng DotNetNuke 5.00.00.
Mình thấy viết module và add Module theo hai cách trên đều không ổn, nếu viết module trong thư mục App_code thì đằng mình không tạo được ra dll do đó trong phần codeb2 của modle không debeg được(lỗi The breakpoint currently will not be hit) và còn viết code trên project riêng rẽ thì cũng add module được vì các module nó bắt phải đặt trong thư mục website\DesktopModules do đó nếu viết project riêng thì cũng không viết được,
Xin mọi người giúp đỡ nhé, ai có ý kiến gì không nhỉ?mình xin cám ơn nhiều.
---
 
quangvd


102  bài
20-03-2009 07:28:42
Chỉ có 2 cách trên
Còn cách nào nữa đâu
Cả 2 cách đều debug được hết
Khi viết theo kiểu project thì bạn add existing website là local host trước và đặt làm start up project. Sau đó Add new project của mình vào
Với mỗi project của mình thì bạn cần chọn thư mục build của project nằm trong Bin của dnn là xong. Mỗi lần chạy ấn shift + f6 để dịch. Sau đó vào IE gõ địa chỉ localhost hoặc gì gì đó. Muốn debug thì f5
---
http://www.yhoctuxa.vn/
 
nongdancute


19  bài
21-03-2009 03:31:08
mình add module theo từng cách mà không được, bạn xem từng bước mình làm có gì sai không nhé mà sao mình không add được module.
Cài IIS (Internet information service)
- Cài visual studio 2005
- Cài 2 bản Patch (vá lỗi cho VS2005) theo đúng thứ tự
1/ VS80-KB915364-X86-ENU.exe
2/ WebApplicationProjectSetup.msi
- Cài đặt dotnetnuke 5.00.00 thành công
- Open website trên locallhost
đến bước này coi như là đã cài đặt thành công DNN 5.00.00 rồi và mình add thành công các module có sẵn trong DNN rồi.Cũng add thành công modulle vài lần nhưng sau đó laị không được
* Thằng DNN 5.00 này có cả module template nhưng trong diễn đàn không nói đến nên mình cũng không đề cập ở đây, còn Project mình add là Asp.Net Webplication

và sau đây là trình tự các bước mình add module sau khi đã Open website DNN
Bước 1:
vào File -> Add -> New project
Chọn kiểu Project: Asp.Net Aplication
Tên: Hello
Location: "D:\Hung Thinh\Working Web\DesktopModules"
---
 
nongdancute


19  bài
21-03-2009 03:45:42
B2: Xoá file Default.aspx và file config trong Project Hello

B3: Chọn đường dẫn Project Hello đặt vào thư mục bin trong Website DNN 5.00

B4: Add Reference DotNetNuke.dll(chắc chắn chỉ cần thằng này là đủ)

B5: Add control vào Project Hello tên controll là Hello.ascx

B6: Buile Project Hello

=> Build thành công

Bước 7:F5 chạy website đăng nhập user Host thành công

Bước 8:Chọn Host -> Host Difinitions ->chọn Create new Module

Bước 9: Next vài lần Create new Module thành công

bước 10: Edit module vừa Creat New, thực hiện Add Difinition ,trỏ tới đường dẫn control source)

Bước 11: Quay ra trang chủ tạo một trang bất kỳ Add Module.

Trong combobox có tên module Hello hiện lên rồi nhưng khi add thì không thấy nằm lên trong trang

còn đây là toàn bộ codeB2 của control Helle

Imports DotNetNuke
Imports DotNetNuke.Services.Localization
Imports DotNetNuke.Security
Imports DotNetNuke.Security.Roles
Imports System.Collections.Generic

Partial Public Class Hello
Inherits DotNetNuke.Entities.Modules.ModuleSettingsBase
Implements Entities.Modules.IActionable


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

#Region "Optional Interfaces"

Public ReadOnly Property ModuleActions() As DotNetNuke.Entities.Modules.Actions.ModuleActionCollection Implements DotNetNuke.Entities.Modules.IActionable.ModuleActions
Get
Dim Actions As New Entities.Modules.Actions.ModuleActionCollection
Actions.Add(GetNextActionID, Localization.GetString(Entities.Modules.Actions.ModuleActionType.AddContent, LocalResourceFile), Entities.Modules.Actions.ModuleActionType.AddContent, "", "", EditUrl(), False, SecurityAccessLevel.Edit, True, False)
Return Actions
End Get
End Property

#End Region


End Class
---

Mình đã mất khá nhiều thời gian mà không tìm được ra lỗi này, bạn xem mình làm có thiếu cái gì không nhé, mình cảm ơn bạn nhiều
 
quangvd


102  bài
23-03-2009 09:24:59
Bạn nhầm chỗ nay

Inherits DotNetNuke.Entities.Modules.ModuleSettingsBase

Phải là

Inherits DotNetNuke.Entities.Modules.PortalModuleBase

Moi add duoc vao trang web

Con cai ModuleSettingsBase chi danh cho settings thôi

Với lại bạn viết code đơn giản thôi để còn thử.
File ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="hello.ascx.cs" Inherits="helloworld.hello" %>
<asp:Label ID="lblhello" runat="server"></asp:Label>

File cs

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace helloworld
{
public partial class hello : DotNetNuke.Entities.Modules.PortalModuleBase
{
protected void Page_Load(object sender, EventArgs e)
{
lblhello.Text = "hello world";
}
}
}

Nhớ thêm nữa là khi cài module thì phải đặt key trắng mới hiển thị trên webpage được

Chúc bạn vui vẻ
 
nongdancute


19  bài
23-03-2009 11:58:39
cám ơn bạn quanvd rất rất nhiều, nguyên nhân của mình là mình ko đặt key trắng, phải cám ơn bạn nhiều lắm đấy vì cái lỗi này chắc chẳng bao giờ mình tìm được ra.
---
 
huongk29c


1  bài
02-04-2009 01:25:28
Cho hỏi dnn hỗ trợ những hệ quản trị CSDL nào?
 
coyaido


2  bài
17-04-2009 02:21:08
Chao moi nguoi .
Minh o tp HCM
Minh dang can 2 module DNN : quan ly tac vu & quan ly cong van (ngôn ngữ VB.NET và SQL Server)
Gia ca thuong luong.
Moi chi tiet xin lien he : 0938411399 gap Tam
---
 
coder

lap trinh khong bien gioi
142  bài
18-04-2009 01:17:38
Chao moi nguoi .
Minh o tp HCM
Minh dang can 2 module DNN : quan ly tac vu & quan ly cong van (ngôn ngữ VB.NET và SQL Server)
Gia ca thuong luong.
Moi chi tiet xin lien he : 0938411399 gap Tam
---



Bọn mình ở Hà Nội. Không biết có hợp tác được không ?
---
http://coder.awas.vn
http://mobile.awas.vn
http://vtv.awas.vn
http://baihatviet.awas.vn
 
kenken


3  bài
04-06-2009 02:40:41
Mình làm thế này:
Cách đặt tên 1 module như sau: [Tencongty] . [Tenmodule] , vd: Comeco.CMS

1. New 1 Project (Asp.Net Web Application), chọn đường dẫn lưu dự án tại ....\DesktopModules\CMS

2. Vào properties of dự án vừa tạo để:
- set ngay nơi lưu cái dll sẽ biên dịch vào ......\Website\Bin
- Sửa tên Assembly thành [Tenconty] .Modules. [Tenmodule] , vd: Comeco.Modules.CMS

3. References tới 2 cái dll là: DotNetNuke.dll và Microsoft.ApplicationBlocks.Data.dll

4. Xóa 2 cái file default.aspx và web.config

Tiếp theo là tạo module dựa theo cách làm of DNN...


Cảm ơn bác aspnet, bác rất nhiệt tình!
---
 

Chủ đề gần đây :

Cùng loại :

 
Tên file Người đăng Ngày Lượt
vspforum.zip
Ma nguon vspforum ngay xua
aspnet 4/18/2023 6:38:37 AM 8
pdfjs.rar
pdfjs 2017 : hiển thị tốt trên iphone 11, 12, 13 không lỗi, bản 2012 sẽ lỗi trên iphone
aspnet 6/21/2022 11:52:48 AM 2
pdfjs2.rar
Xem file pdf bằng viewer.hml cua pdfjs (thư viện chuẩn mozilla) 2012. https://mozilla.github.io/pdf.js/getting_started/#download có thể download bản prebuild tại đây
aspnet 6/21/2022 11:52:04 AM 2
runner.zip
using three.js, orbitcontrol to view an object move random on map. Di chuyển 1 đồ vật ngẫu nhiên trên bản đồ, sử dụng với demo nhân viên di chuyển trong văn phòng. Toàn js download về là chạy
aspnet 12/5/2019 5:55:14 PM 0
gmap.zip
google map + marker
aspnet 7/17/2019 2:25:05 PM 1
vinsmarthomeservice.zip
java post json to api, use AsyncTask, event listener
aspnet 7/9/2019 5:00:10 PM 1
fblogin.zip
Login facebook bang javascript SDK
aspnet 7/9/2019 9:16:37 AM 0
autocomplete-location.zip
autocomplete location geo from google place, html + js
aspnet 7/4/2019 4:37:55 PM 2
WebAPI.zip
api for android access db (v1.0.0)
aspnet 7/4/2019 9:14:17 AM 8
KydientuPdf.zip
Ky dien tu file PDF su dung itextsharp
aspnet 4/9/2019 3:30:37 PM 9
GooglePlusLogin.zip
Login Google Plus account, C#, web asp.net ver2.0. Simple connect google APIs. Send key, get token, get full account info
aspnet 6/1/2018 10:41:12 AM 11
WebApplication1.rar
Sample su dung thuat toan ma hoa tripDES, co khoa bi mat (privateKey)
aspnet 3/30/2018 10:06:35 PM 8
NETMdbToolsTestApp.rar
dotNet MdbTools for Access 2003/2007/2016 without Microsoft Jet Engine, source C#, https://www.codeproject.com/Articles/283626/MsAccess-MdbTools-with-MFC-and-NET
aspnet 3/26/2018 11:43:16 PM 1
Cryptography_MD5_TriDES_src.zip
Thuật toán mã hóa 2 chiều TriDES, gồm Encrypt và Decrypt, aspnet 2.0
aspnet 3/22/2018 11:20:44 AM 3
mvc.rar
sample project MVC on C#
aspnet 3/20/2018 9:25:36 AM 9
EduPortal.rar
Edu portal frame work for VB.NET
aspnet 3/14/2018 12:00:41 AM 13
AutoEntity.rar
Gencode vb.net visual studio 2015. dotnet v2.0
aspnet 3/13/2018 11:59:16 PM 2
GenCode.rar
Gencode XML, XSLT, Info, DAL .. engine enterprise for quick app database
aspnet 2/5/2018 9:37:28 AM 9
DataXml.rar
Read DB from SQL to XML file, Convert string TCVN to Unicode
aspnet 1/29/2018 2:15:45 PM 4
DesktopModules.rar
Module quản lý tin tức, CMS, quản lý nhóm tin trên dotnetnuke 6.x
aspnet 3/7/2013 4:47:49 PM 1715
CODERVN.NET
Công ty cổ phần công nghệ và dịch vụ AWAS
Công ty cổ phần công nghệ và dịch vụ AWAS, cổng thông tin, chính phủ điện tử, phần mềm quản lý điểm, quản lý sinh viên, http://awas.vn, http://awas.com.vn, phần mềm ứng dụng, dịch vụ công trực tuyến, thiết kế website, thiet ke web, thiết kế web, điện lực, phần mềm quản lý đào tạo, cao đẳng, đại học,cổng thông tin tích hợp, cổng thông tin điện tử, webportal, thư viện điện tử, electric library, library online, email, web, quản lý quan hệ khách hàng, CRM, dịch vụ công trực tuyến, phần mềm hành chính một cửa,