Thành viên | Nội dung |
aspnet
Lập trình không biên giới 598 bài
| 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
| 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
| 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
| Để 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
| Để 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 ctl và mid
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
| 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
| 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()
và
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
| 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
| 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
| 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
| 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
| 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
| 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
| 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
| 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
| 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
| Cho hỏi dnn hỗ trợ những hệ quản trị CSDL nào?
|
coyaido
2 bài
| 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
| 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
| 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! ---
|
|