Thứ Hai, 7 tháng 5, 2012

Hướng dẫn về DotNetNuke - Bài 4 Hướng dẫn viết module video cho DotNetNuke

http://www.dnnvn.net/tabid/59/g/posts/t/88/Huong-dan-ve-DotNetNuke-Bai-4-Huong-dan-viet-module-video-cho-DotNetNuke.aspx
    

Chào các bạn,

Module video là một module xuất hiện khá nhiều trên các website, nhất là website của Công ty. Module này có chức năng trình chiếu các video liên quan tới hoạt động của Công ty hoặc những video cần chuyển tải tới người sử dụng với một mục đích nào đó.

Bài viết này với mục đích đáp ứng nhu cầu học tập của những thành viên mới của diễn đàn, mình sẽ trình bày cách xây dựng một module nhằm cung cấp cho người đọc những khái niệm và những hiểu biết cơ bản khi muốn code một module bất kỳ.

Để hiểu rõ module này có các chức năng như thế nào, xin mời các bạn ghé qua trang chủ của Việt Nam Net và nhìn tới phần module, sau đó thử một vài thao tác để hình dung công việc chúng ta sắp làm.

Khi Click vào video bên dưới, bên trên sẽ chạy video được click.

Yêu cầu thêm: Có nhiều video được sắp xếp từng nhóm. Mỗi module video ở các trang khác nhau sẽ hiển thị video thuộc các nhóm khác nhau (Không giống nhau cho toàn bộ Portal)

Phân tích yêu cầu:

1. Xác định video Player cần sử dụng

Tất nhiên là ở đây chúng ta chỉ bàn tới DotNetNuke, mình sẽ không bàn sâu tới cách sử dụng video player như thế nào và tại sao phair làm thế. Mình chỉ đề cập tới xây dựng module này ra sao và cách cài đặt nó như thế nào.

Qua quan sát và hiểu biết (thực tế VietNamNet cũng sử dụng Video Player này) chúng ta sẽ chọn JWPLAYER để làm control dùng để chạy các video. JWPlayer hoàn toàn có thể đáp ứng được các yêu cầu của chúng ta.

Để hiểu rõ hơn cũng như nắm được thông tin về JWPlayer xin mời bạn vào trang:  http://www.longtailvideo...positioning-the-playlist

2. Xác định cấu trúc lưu trữ
Bài này ta chọn MSSQL Làm CSDL để lưu trữ dữ liệu
- Ta cần có 1 bảng để lưu danh sách các video, bảng này mang tên là dnnvn_video.

- Một bảng nhóm các video (bởi yêu cầu của bài toán là module video có thể xuất hiện ở nhiều chỗ trên website và chạy các video theo nhóm). Trong trường hợp website không có nhu cầu thì coi như website đó chỉ dùng 1 nhóm và các module video này sẽ chơi các video giống nhau.

Sau khi ngồi thiền một lúc thì mình tạm đề xuất danh sách các trường dữ liệu của 2 bảng trên như sau:

Giới thiệu qua về CSDL:

Bảng dnnvn_VideoCategory: Chứa danh sách các nhóm video, sau này mỗi module sẽ chơi theo từng nhóm của bảng này.
 

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE [dnnvn_VideoCategory](
    [CatId] [int] NOT NULL, /*Mã nhóm*/
    [CatName] [nvarchar](256) NOT NULL, /*Tên nhóm*/
    [PortalId] [int] NOT NULL, /*Mã Portal*/
    [DisplayOrder] [int] NULL, /*Sắp xếp thứ tự hiển thị*/
    [IsPublish] [bit] NOT NULL, /*Cho phép xuất bản*/
 CONSTRAINT [PK_dnnvn_VideoCategory] PRIMARY KEY CLUSTERED
(
    [CatId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

Bảng dnnvn_Video chứa danh sách các video

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
CREATE TABLE [dnnvn_Video](
    [MId] [int] NOT NULL, /*Mã video*/
    [CatId] [int] NOT NULL, /*Mã Nhóm*/
    [Title] [nvarchar](256) NOT NULL,/*Tên video video*/
    [Url] [nvarchar](256) NOT NULL,/*Địa chỉ của Video*/
    [ImageURL] [nvarchar](256) NULL,/*Hình minh họa*/
    [Width] [int] NULL,
    [Height] [int] NULL,
    [IsAuto] [bit] NULL,
    [IsRepeat] [bit] NULL,
    [ShowDownload] [bit] NULL,
    [AllowFullScreen] [bit] NULL,
    [ShowDigits] [bit] NULL,
    [ShowNavigation] [bit] NULL,
    [AllowScriptAccess] [nvarchar](50) NULL,
    [Wmode] [nvarchar](256) NULL,
    [MType] [nvarchar](256) NULL,
    [Logo] [bit] NULL,
    [StartAt] [nvarchar](50) NULL,
    [StartDate] [datetime] NULL,/*Ngày bắt đầu xuất bản*/
    [EndDate] [datetime] NULL,/*Ngày kết thúc*/
    [DisplayOrder] [int] NULL,/*Vị trí hiển thị trong playlist*/
    [IsPublish] [bit] NOT NULL,/*Cho phép xuất bản*/
 CONSTRAINT [PK_dnnvn_Video] PRIMARY KEY CLUSTERED
(
    [MId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

Trong bảng video, một số trường tôi thiết kế mà không giải thích (sẽ giải thích sau) dùng để dự phòng phục vụ cho việc mở rộng module. Trong khuôn khổ của bài hướng dẫn tôi xin phép bỏ qua phần này (Bởi lan man, dễ làm người đọc bị rối, và cũng muốn người đọc tự phát triển phần tiếp theo)

Bây giờ là lúc chúng ta bắt tay vào code module này.


Xây dựng module.

Có 2 cách xây dựng module là viết theo Web Application Project (WAP) và Website (Viết dưới dạng nhóm file tích hợp thẳng vào trong bộ DotNetNuke đang chạy). Nếu bạn chưa rõ kiến trúc của module xin xem lại bài viết số 3 tại địa chỉ: http://www.dnnvn.net/for...le-trong-DotNetNuke.aspx

Mỗi cách viết đều có ưu/nhược điểm của nó(tương tự như phát triển website vậy). Cách dùng WAP cách tổ chức gọn gàng hơn, dễ dàng đóng gói module (nhất là trong trường hợp bạn viết module nhưng không muốn chia sẻ source code) tuy nhiên cách này mất thời gian (mỗi lần build module, dotnetnuke lại phải biên dịch lại và chạy rất chậm)

Cách viết dưới dạng website: Cách này có ưu điểm là khi code chạy nhanh, lỗi file nào thì báo chỗ đó, để cập nhật chỉnh sửa chỉ cần F5 để refresh trình duyệt là OK. Không phải build lại cả Project. Tuy nhiên cách này khi đóng gói sẽ khó khăn hơn. Nếu bạn không muốn chia sẻ source thì cách này không được tốt cho lắm bởi khi đóng gói nó sẽ phải đi kèm cả source code.

Bây giờ xin mời bạn cùng bắt đầu bắt tay vào xây dựng module. (bạn chú ý kiểm tra lại xem máy bạn đã tuân thủ điều kiện như bài viết số 3 chưa? nếu thiếu một trong các phần như Chưa cài file .vsi, chưa có dotnetnuke, chưa có template cho dotnetnuke thì bạn cần phải làm ngay bởi trong phần tiếp theo tôi sẽ hướng dẫn sử dụng các công cụ này.)

(Do phần tiếp theo chủ yếu là các thao tác thực hành nên tôi xin phép trình bày bằng video để các bạn có thể dễ dàng hiểu được các thao tác)

Video 1: Tạo module dạng WAP

Trong video này có đoạn code mẫu để cho Sau khi build thành công, VisualStudio tự động copy các file sang thư mục ta chỉ định (Để ta không phải làm bằng tay) đó chính là

1
2
3
4
5
6
7
8
9
xcopy /s /y "$(ProjectDir)"*.as?x "$(SolutionDir)"Website\DesktopModules\DNNVN_MediaPlayer\
xcopy /s /y "$(ProjectDir)"*.resx "$(SolutionDir)"Website\DesktopModules\DNNVN_MediaPlayer\
xcopy /s /y "$(ProjectDir)"*.dnn "$(SolutionDir)"Website\DesktopModules\DNNVN_MediaPlayer\
xcopy /s /y "$(ProjectDir)"*.SqlDataProvider "$(SolutionDir)"Website\DesktopModules\DNNVN_MediaPlayer\
xcopy /s /y "$(ProjectDir)"*.gif "$(SolutionDir)"Website\DesktopModules\DNNVN_MediaPlayer\
xcopy /s /y "$(ProjectDir)"*.jpg "$(SolutionDir)"Website\DesktopModules\DNNVN_MediaPlayer\
xcopy /s /y "$(ProjectDir)"*.js "$(SolutionDir)"Website\DesktopModules\DNNVN_MediaPlayer\
xcopy /s /y "$(ProjectDir)"*.config "$(SolutionDir)"Website\DesktopModules\DNNVN_MediaPlayer\
xcopy /s /y "$(ProjectDir)"*.css "$(SolutionDir)"Website\DesktopModules\DNNVN_MediaPlayer\

(Bạn có thể tải mã nguồn của module tại file đính kèm bài viết)

Sử dụng CodeSmith để sinh code cho module

(Nếu bạn chưa rõ CodeSmith là gì thì tôi xin giới thiệu vắn tắt như sau: CodeSmith là một công cụ hỗ trợ ta sinh ra các đoạn mã thông qua các template của nó. Để download xin mời bạn truy cập vào địa chỉ: http://dnnvn.net/forum/d...p-trinh-DotNetNuke.aspx , Để hiểu chi tiết hơn, bạn có thể truy cập vào trang: http://www.codesmithtools.com/ )

Sau đây là phần hướng dẫn sử dụng codesmith khi code module. Có những thứ có sẵn sau khi cài codeSmith vào máy, những template bạn có thể down ở cùng link download bên trên)

Hiện tại module này còn phần đóng gói CSDL và Việt hóa nữa (lười quá chưa làm :">)

Để các bạn quan tâm không nóng ruột vì phải chờ đợi  thêm, mình quyết định chia sẻ module này (phần đóng gói mình sẽ hoàn thành sớm cùng với Video hướng dẫn, để bác nào chưa rõ phần đó sẽ rõ)

Demo module: http://demo.dnnvn.net/vi-vn/modules/video.aspx

Source code và bộ cài đặt xin mời download file đính kèm.

Sau khi download, xin mời giải nén và sử dụng MSSQL Management để thực hiện việc tạo bảng và storeprocedure cho module.

Sau đó tiến hành cài đặt module như cài một extension bình thường (bác nào chưa rõ cài module thì cứ post len đây nhé)

Cài đặt module xong thì xin mời xem video hướng dẫn bên dưới để xem cách sử dụng module luôn.

Tập tin đính kèm(s):
DNNVN_Video_01.00.00_Install.zip (207kb) đã được dowbload 187 lần.
Video.rar (698kb) đã được dowbload 182 lần.
  

3 nhận xét:

  1. sao không thấy link dowload đính kèm vậy anh trai!

    Trả lờiXóa
    Trả lời
    1. Các bài viết này mình sưu tầm trên mạng nên không tạo files đính kèm. Bên trên cùng các bài viết đều có link gốc, bạn chịu khó vào đó tìm nhé. Good luck.

      Xóa
  2. một số bài hướng dẫn dotnetnuke ở blog của mình, mọi người cùng nhau trao đổi, chia sẻ , đóng góp ý kiến để cùng nhau tiến bộ nhé
    Mình có một số bài về dotnetnuke muốn chia sẻ, vì cũng không thể chia sẻ hết được tại đây, nên các bạn nào có nhả ý thì ghé qua blog đóng góp ý kiến, cùng nhau chia sẻ nhé
    ở đây mình đã viết được một số bài, và đang viết thêm :

    Làm thế nào để Dotnetnuke chạy nhanh hơn
    http://raokhang.blogspot.com/2013/08/p1-lam-nao-e-dotnetnuke-chay-nhanh-hon.html

    Làm thế nào để xóa evenlog, sitelog, schedulehistory một cách tự động
    http://raokhang.blogspot.com/2013/08/p2-lam-nao-e-xoa-evenlog-sitelog.html

    Sử dụng cache để tăng scalability và tốc độ thực thi
    http://raokhang.blogspot.com/2014/02/p3-su-dung-cache-e-tang-scalability-va.html

    Trả lờiXóa

(Chơi cho vui) AIRDROP CHAINGE FINANCE - dự án xây dựng ứng dụng ngân hàng số cho mọi người

 Không hiểu lắm về cái này, tuy nhiên thấy quảng cáo khá nhiều, lại chỉ cung cấp vài thông tin cá nhân (mà mấy ông lớn như facebook với goog...