1. Trang chủ
  2. » Công Nghệ Thông Tin

Hướng dẫn viết module cho nukeviet 3

43 1,2K 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 43
Dung lượng 178 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài viết hướng dẫn rất chi tiết cho những lập trình viên đang muốn chinh phục Nukeviet. Giúp người dùng viết thêm các module cho nuke để mở rộng tính năng của website nukeviet từ đó có thể dễ dàng làm được website với nhiều tính năng trong thời gian sớm nhất.

Trang 1

Hướng dẫn viết module cho nukeviet 3.x

Để dễ thao tác các bạn hãy làm giống mình phần code (số dòng)

Trong khuôn khổ bài viết này mình sẽ trình bày với các bạn cấu trúc cơ bản, công dụng cũng như chức năng của từng file trong thư mục module và cách viết một module chi tiết từ đơn giản tới phức tạp Cấu trúc một module, chức năng các file, các file, floder bắt buộc phải có.

Cách viết một module đơn giản chỉ chứa file PHP.

Mở rộng kết hợp file PHP riêng ngoài các file bắt buộc phải có.

Làm việc với file ngôn ngữ lang.

Sử dụng xtemplate.

Mở rộng thêm các file thông tin module, RSS

Sử dụng javscript và ajax cho module (phần AJAX các bạn xem tại viewtopic.php?f=117&t=15403) Sử dụng lớp (class) đã được xây dựng sẵn.

Tên module tốt nhất các bạn chỉ đặt tên bằng chữ cái không chứa các kí tự đặc biệt.

Bây giờ ta vào phần chi tiết.

CẤU TRÚC CƠ BẢN CỦA MỘT MODULE

Bao gồm các file và thư mục sau:

Mình sẽ ví dụ đây là module quanlihs.

Trang 2

Chức năng của các file như sau:

file version.php: file này có chức năng khai báo tiêu đề module, các funcs có block, tác giả module, thông tin phiên bản, cấu trúc thư mục trong thư mục uploads.

File admin.functions.php: File này thường chứa các function, hằng dùng trong admin

File function.php: File này thường chứa các function, hằng dùng cho ngoài site

admin/main.php: File này sẽ thể hiện nội dung của module phần admin

funcs/main.php: FIle này sẽ thể hiện nội dung (trang chính) của module bên ngoài site.

Thứ tự khởi động một module như sau: Khi module được chạy thì tùy theo admin hay ngoài site mà file admin.functions.php hay file function.php được chạy trước sau đó là các file trong thư mục admin hay funcs được chạy tiếp theo mặc định sẽ là file main.php.

Ta thường thấy url trang web nukeviet (chưa bật rewrite) có dạng http://yourdomain/index.php?

lang=vi&nv= =listenone

Trong đó lang chính là ngôn ngữ của site, nv là module đang chạy, op chính là funcs đang chạy (ở đây

là listenone) Giá trị op này chính là tên của funsc trong thư mục funsc hay admin Nếu trên url mà khuyết phần op= có nghĩa funcs main.php đang được chạy.

Cấu trúc url như trên là cấu trúc cơ bản Giá trị op ta có thể thay đổi ví dụ như

http://nukeviet.vn/vi/news/viec-lam/ Ta sẽ tìm hiểu sau.

Bây giờ chúng ta bắt đầu viết một module đơn giản (không có CSDL) để xuất ra dòng chữ "XIN CHÀO CÁC BẠN" bên trong admin và ngoài site.

Đầu tiên tạo một thư mục (là tên module) trong thư mục modules rồi thêm vào đó các file và thư mục sau:

Trang 3

"author" => "PHAN TAN DUNG (email: phantandung1912@gmail.com)",

"modfuncs" => "main, funcs1, funcs2, funcs3" ,

-"is_sysmod" => 0, : Có phảo module hệ thông hay không 0: không 1: có.

-"virtual" => 1: CHo phép ảo hóa module không 0: không 1: có

-date,author, version: thông tin ngày , tác giả, phiên bản module.

-uploads_dir: Khai báo cấu trúc thư mục trong thư mục uploads Với khai báo như trên thì khi kích hoạt module hệ thông sẽ tạo một thư mục có tên là tên của module trong thư mục upload (biến

$module_name được hiểu là tên module)

file admin.functions.php có nội dung như sau:

if ( ! defined( 'NV_ADMIN' ) or ! defined( 'NV_MAINFILE' ) or !

defined( 'NV_IS_MODADMIN' ) ) die( 'Stop!!!' );

- define( 'NV_IS_QUANLY_ADMIN', true ); Dòng này sẽ khởi tạo một hằng dùng cho module Các funcs như main.php sẽ kiểm tra giá trị hằng này nếu đúng sẽ chạy ngược lại sẽ báo lỗi "Stop!!!".

file function.php các bạn thêm như sau:

Trang 4

Với module đơn giản như ví dụ này thì file này chỉ có chức năng tạo một hằng để dùng bên ngoài site thôi.

Tạo file main.php trong thư mục admin với nội dung như sau:

$contents = "Xin chào các bạn";

include (NV_ROOTDIR "/includes/header.php");

echo nv_admin_theme($contents);

include (NV_ROOTDIR "/includes/footer.php");

?>

- Biến $page_title là tiêu đề của funcs hiện tại.

- Tất cả nội dung sẽ được lưu vào một biến $contents sau đó sẽ được xuất ra sau khi gọi file

header.php Phần :

include (NV_ROOTDIR "/includes/header.php");

echo nv_admin_theme($contents);

include (NV_ROOTDIR "/includes/footer.php");

Các bạn giữ nguyên mọi module (trong admin)

Tương tự tạo file main.php lưu vào thư mục funcs với nội dung như sau:

$contents = "Xin chào các bạn";

include ( NV_ROOTDIR "/includes/header.php" );

echo nv_site_theme( $contents );

include ( NV_ROOTDIR "/includes/footer.php" );

?>

Trang 5

OK như vậy ta đã tạo xong một module đơn giản để xuất ra dong chữ "Xin chào các bạn" bên trong admin lẫn ngoài site Bây giờ các bạn vào phần thiết lập module mới kích hoạt modlue vừa tạo rồi vào phần quản lí của module và noài site bạn sẽ thấy kết quả.

include ( NV_ROOTDIR "/includes/header.php" );

echo nv_site_theme( $contents );

include ( NV_ROOTDIR "/includes/footer.php" );

?>

Ta có module inframe của trang 24h

Hay thay file main.php bằng :

Header( "Location: http://nhaccuateen.info" ) ;

include ( NV_ROOTDIR "/includes/header.php" );

echo nv_site_theme( $contents );

include ( NV_ROOTDIR "/includes/footer.php" );

?>

Ta có module khi vào thì sẽ chuyển sang trang http://nhaccuateen.info Hay các bạn có thể dùng vào nhiều việc khác.

Trang 6

Tiếp theo chúng ta sẽ thêm file action.php làm nhiệm vụ thao tác với CSDL khi cài đặt cũng như xóa module Bây giờ ta thêm một table trong CSDL để quản lí học sinh trong lớp (STT,

họ tên, ngày sinh, địa chỉ) Tạo file action.php đặt cùng thư mục với file functions.php với nội dung như sau:

`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,

`stt` INT( 255 ) unsigned NOT NULL,

`hoten` varchar(255) NOT NULL,

`ngaysinh` INT( 11 ) NOT NULL DEFAULT '0',

`diachi` varchar(255) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM";

?>

Các bạn vào phần quản lí module cài lại module sẽ thấy trong CSDL có thêm một table Mình giải thích nội dung file trên:

$sql_drop_module[], $sql_create_module[] để chỉ việc xóa, tạo mới module Biến $db_config['prefix']

là tiếp đầu tố của table, $lang là ngôn ngữ của site, $module_data thông thường được hiểu như tên của module Nội dung bên trong dấu ngoặc kép là lệnh thao tác với CSDL không nhất thiết phải là xóa, thêm mà có thể chỉnh sửa, xóa trường, chèn dữ liệu Biến $sql_create_module[] dạng ARRAY nên có thể thêm nhiều lệnh thao thác csdl (tạo nhiều bảng).

Trang 7

Ta đã tạo CSDL thành công bây giờ cần phải viết code để làm việc với nó Bây giờ phần quản lí module ta cần có thêm một submenu để thêm học sinh Mở file admin.functions.php lên sửa lại như sau:

if ( ! defined( 'NV_ADMIN' ) or ! defined( 'NV_MAINFILE' ) or !

defined( 'NV_IS_MODADMIN' ) ) die( 'Stop!!!' );

$submenu['add'] = "Thêm học sinh";

$allow_func = array('main', 'add');

define( 'NV_IS_QUANLY_ADMIN', true );

?>

Ta thấy bây giờ có thêm $submenu['add'] có nghĩa là ta đã khai báo một submenu trong admin, biến

$allow_func thêm mới 'add' có nghĩa ta đã chấp nhận thêm một funcs mới có tên add (add.php) Bây giờ các bạn vào phần quản lí module sẽ thấy có thêm submenu "Thêm học sinh" nhưng khi ấn vào sẽ hiện : "Lỗi truy cập 404

Lỗi 404: Trang web mà bạn đã cố gắng truy cập không tồn tại trên máy chủ của website." có nghĩa là

chưa có file add.php Ta thêm file add.php vào thư mục admin với nội dung như sau:

if ( ! defined( 'NV_IS_QUANLY_ADMIN' ) ) die( 'Stop!!!' );

$page_title = "Thêm học sinh";

$my_head = "<script type=\"text/javascript\" src=\"" NV_BASE_SITEURL

$data['hoten'] = filter_text_input( 'hoten', 'post', '' );

$data['ngaysinh'] = filter_text_input( 'ngaysinh', 'post', '', 1, 10 );

unset( $m );

if ( preg_match( "/^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4})$/",

Trang 8

Header( "Location: " NV_BASE_ADMINURL "index.php?"

NV_NAME_VARIABLE "=" $module_name); die();

Trang 9

<input id=\"ngaysinh\" name=\"ngaysinh\" style=\"width:

470px;\" value=\"" $data['ngaysinh'] "\" type=\"text\" />

<img src=\"" NV_BASE_SITEURL "images/calendar.jpg\"

style=\"cursor: pointer; vertical-align: middle;\"

onclick=\"popCalendar.show(this, 'ngaysinh', 'dd.mm.yyyy', true);\" alt=\"\" height=\"17\" />

Trang 10

<td colspan=\"2\" align=\"center\" style=\"background: #eee;\">\n <input name=\"confirm\" value=\"Lưu\" type=\"submit\">\n

<input type=\"hidden\" name=\"add\" value=\"1\">\n

Với đoạn code trên ta có một funcs với chức năng thêm học sinh Mình giải thích như sau:

Đoạn này là phần sử dụng biến $my_head để gọi java và CSS Tạm thời phần này cho qua đến phần sử dụng java chúng ta sẽ quay lại.

Ở đây ta đã gọi ra shadowbox.css, shadowbox.js, popcalendar.js để làm nhiệm vụ hiển thị lịch.

$my_head = "<script type=\"text/javascript\" src=\"" NV_BASE_SITEURL

$data['hoten'] = filter_text_input( 'hoten', 'post', '' );

$data['ngaysinh'] = filter_text_input( 'ngaysinh', 'post', '', 1, 10 );

$data['diachi'] = $nv_Request->get_string( 'diachi', 'post', '' );

Đoạn này dùng để lấy dữ liệu khi submit form và được lưu dưới dạng mảng (array) Các cách lấy dữ liệu các bạn có thể tham khảo tại bài hướng dẫn viết module đội code viết.

if ( ($nv_Request->get_int( 'add', 'post', 0 ) == 1) )

Trang 11

{

$error = "Bạn chưa nhập địa chỉ";

}

Đoạn này sẽ kiểm tra xem dữ liệu đã được nhập chưa nếu chưa thì gán thông báo lỗi cho biến $error.

$sql = "SELECT `stt` FROM `" NV_PREFIXLANG "_" $module_data "` ORDER BY stt DESC LIMIT 0,1";

Header( "Location: " NV_BASE_ADMINURL "index.php?"

NV_NAME_VARIABLE "=" $module_name); die();

Đoạn này là xuất ra lỗi (nếu có)

CÒn phần cuối cùng là phần nội dung hiển thị (form).

Ta vừa thực hiện xong việc thêm học sinh

Bây giờ ta cần hiển thị danh sách các học sinh Mở file main.php trong thư mục admin và chỉnh lại như sau:

Trang 13

include ( NV_ROOTDIR "/includes/header.php" );

echo nv_site_theme( $contents );

include ( NV_ROOTDIR "/includes/footer.php" );

?>

Trang 14

Đoạn code trên cũng tương tự như file main.php trong admin, cũng đọc dữ liệu và xuất ra.

Ta vừa hoàn thành xong một module đơn giản để thực hiện việc quản lí học sinh trong lớp.

Qua hai file main.php ta lại thấy trùng nhau ở doạn này:

$sql = "SELECT * FROM `" NV_PREFIXLANG "_" $module_data "` ORDER BY stt ASC";

$resuilt = $db->sql_query( $sql );

while ( $row = $db->sql_fetchrow( $resuilt ) )

Để tối ưu hóa hơn, bây giờ ta sẽ gộp hai đoạn đó thành một Như vậy tiết kiệm được một chút tài nguyên (với những module lớn thì tiết kiệm đáng kể) Giải pháp để thực hiện là viết class riêng hoặc dùng function riêng Mình sẽ giới thiệu cách dùng function đặt trong một file mở rộng ngoài những file bắt buộc Ta thêm vào một file global.functions.php đặt ngang hàng với file action.php với nội dung như sau:

Trang 15

Để sử dụng file trên thì ta mở file functions.php và admin.functions.php lên thêm vào dòng cuối cùng (phía trên ?>):

require_once NV_ROOTDIR "/modules/" $module_name

Trang 17

include ( NV_ROOTDIR "/includes/header.php" );

echo nv_site_theme( $contents );

include ( NV_ROOTDIR "/includes/footer.php" );

?>

Ta vừa hoàn thành xong phần "Sử dụng file php riêng"

Ngoài cấu trúc cở bản (các file, floder) bắt buộc các bạn có thể mở rộng tùy ý, có thể thêm bất kì floder, file nào tùy ý.

Tiếp theo ta sẽ làm việc với file lang (ngôn ngữ) để có thể mở rộng ra nhiều ngôn ngữ khác ngoài tiếng Việt Tạo thư mục language ngang hàng với thư mục admin Tạo file admin_vi.php và file vi.php nằm trong thư mục vừa tạo Đây là fie ngôn ngữ tiếng việt, dùng trong admin thì bắt đầu bằng admin_ còn ngoài site thì tên file là tên của kí tự ngôn ngữ Các kí tự ngôn ngữ các bạn tham khảo thêm ở module news.

Nội dung file admin_vi.php như sau:

if ( ! defined( 'NV_MAINFILE' ) ) { die( 'Stop!!!' ); }

$lang_translator['author'] = "Phan Tan Dung (phantandung92@gmail.com)";

$lang_module['add_student'] = "Thêm học sinh";

$lang_module['add_student_err_name'] = "Bạn chưa nhập tên học sinh";

$lang_module['add_student_err_bd'] = "Bạn chưa nhập ngày sinh của học sinh";

$lang_module['add_student_err_ar'] = "Bạn chưa nhập địa chỉ";

$lang_module['add_student_err_save'] = "Không thể lưu dữ liệu được";

$lang_module['add_student_info'] = "Thông tin học sinh mới";

Trang 19

$data['hoten'] = filter_text_input( 'hoten', 'post', '' );

$data['ngaysinh'] = filter_text_input( 'ngaysinh', 'post', '', 1, 10 );

Trang 20

ORDER BY stt DESC LIMIT 0,1";

Header( "Location: " NV_BASE_ADMINURL "index.php?"

NV_NAME_VARIABLE "=" $module_name); die();

Trang 21

<input id=\"ngaysinh\" name=\"ngaysinh\" style=\"width:

470px;\" value=\"" $data['ngaysinh'] "\" type=\"text\" />

<img src=\"" NV_BASE_SITEURL "images/calendar.jpg\"

style=\"cursor: pointer; vertical-align: middle;\"

onclick=\"popCalendar.show(this, 'ngaysinh', 'dd.mm.yyyy', true);\" alt=\"\" height=\"17\" />

<input type=\"hidden\" name=\"add\" value=\"1\">\n

if ( ! defined( 'NV_MAINFILE' ) ) { die( 'Stop!!!' ); }

$lang_translator['author'] = "PHAN TAN DUNG (phantandung92@gmail.com)";

$lang_translator['createdate'] = "01/01/2011, 15:22";

$lang_translator['copyright'] = "@Copyright (C) 2011";

$lang_translator['info'] = "";

$lang_translator['langtype'] = "lang_module";

Trang 23

include ( NV_ROOTDIR "/includes/header.php" );

echo nv_site_theme( $contents );

include ( NV_ROOTDIR "/includes/footer.php" );

Để gọi ra một file tpl ta dùng như sau:

$xtpl = new XTemplate( "managersong.tpl", NV_ROOTDIR "/themes/"

$module_info['template'] "/modules/" $module_file );

Ta thấy có hai phần phân cách nhau bởi dấu phảy phần trước chính là tên của file tpl là phần sau là đường dẫn đến file tpl đó Các giá trị hằng, biến NV_ROOTDIR, $module_info['template'],

$module_file các bạn tham khảo trong file mainfile.php Hệ thông sẽ gọi ra file tpl ở theme bạn đang dùng nếu không tồn tại file đó thì sẽ tiếp tục tìm đến file đó trong theme default, admin_default nếu không tồn tại thì sẽ báo lỗi.

-> lệnh $xtpl->assign có chức năng gán giá trị cho biến trong xtpl có thể là biến thông thường cũng có thể là mảng.

-> lệnh $xtpl->parse, $xtpl->text( 'main' ) ta sẽ hiểu thông qua ví dụ cụ thể.

Nhắc đến xtpl ta không thể không nhắc đến file theme.php (ngang hàng với file action.php) File này chứa tất cả cấu trúc xtpl Nhưng không bắt buộc phải có nó, xtpl ta có thể dùng bất kì nơi nào.

Để cho nhất quán, bài học này chúng ta sẽ dùng đến nó.

Cấu trúc xtpl thông thường sẽ gọi các file có đuôi là tpl nhưng không nhất thiết phảo như thế, trong khi viết, để cho dễ dàng thao tác với chúng ta có thể chuyển lại chúng thành html và dùng các trình soạn thảo HTML để làm việc, sau khi hoàn tất ta sẽ chuyển trở lại thành tpl.

Bây giờ ta sẽ đi vào ví dụ cụ thể Đầu tiên là phần admin.

Tạo thư mục và file như sau:

themes/admin_default/modules/quanlihs/main.tpl Nội dung file mail.tpl:

Ngày đăng: 20/07/2016, 21:29

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w