SlideShare une entreprise Scribd logo
1  sur  12
Télécharger pour lire hors ligne
Cách tạo một module đơn giản trên phpfox
Ở bài viết này, tôi sẽ trình bày một cách chi tiết các bước xây dựng một module đơn giản trên công cụ
phpfox. Chúng ta sẽ tiếp cận bằng cách thực hiện một ví dụ cụ thể, các bạn có thể áp dụng những chi tiết
trong ví dụ này để áp dụng cho những project của các bạn.
Đề bài: Viết một module trên phpfox tạo một user và insert thông tin user đó vào cơ sở dữ liệu, đồng thời
hiển thị thông tin user vừa tạo trên một menu ở AdminCP.

Cách thực hiện:
Phiên bản sử dụng: phpfox 3.5.1
Bạn có thể download phpfox tại đây.
Hướng dẫn cài đặt phpfox bạn có thể tham khảo ở đây.

Create a new product
Đầu tiên bạn sẽ tạo một product mới (nơi chứa module của bạn). Tuy nhiên, đây chỉ là bước tùy chọn vì
bạn có thể đặt module của mình vào một product bất kì có sẵn trên phpfox. Mặc dù vậy, việc sử dụng một
product riêng của bản thân sẽ giúp bạn có thể tùy biến dễ dàng những chức năng trong nó. Các bước để
tạo một product mới như sau:
Đăng nhập với tài khoản AdminCP và truy nhập đường dẫn sau:
Extensions >> Product >> Create New Product
Điền đầy đủ các thông tin vào form và click nút submit:

Dưới đây tôi sẽ giải thích chi tiết thông tin của từng trường:








Product ID: giá trị ID duy nhất của product. Nó có thể là kí tự số, chữ cái và dấu gạch dưới (_), và
luôn ở dạng chữ cái thường. Ở đây tôi sẽ chọn là create_user.
Title: tiêu đề của product, thứ mà sẽ hiển thị trong danh sách các product. Ở đây tôi sẽ chọn là
Create new user.
Description: mô tả ngắn về product. Ở đây tôi sẽ chọn là Create a new user manually.
Version: phiên bản hiện tại của product. Do tôi mới tạo product này nên tôi sẽ chọn là 1.0.
Product URL: URL của website của bạn, ở đây tôi sử dụng localhost nên sẽ điền là: localhost.
Version Check URL: URL để phpfox kiểm tra phiên bản release của product. Ở đây tôi điền là
localhost/version.php.
Active: thiết lập trạng thái của product là active hoặc inactive. Chọn Yes.

Create new module in AdminCP
Đăng nhập vào AdminCP và vào theo đường dẫn:
Extension >> Module >> Create New Module
Tiếp theo chúng ta sẽ điền đầy đủ vào form dưới đây và click nút submit:

Chi tiết thông tin của từng trường:





Product: tên của product chứa module của bạn. Ở đây tôi sẽ chon là Create new user.
Module ID: id của module. Ở đây tôi chọn là createuser.
Add to Menu: chọn Yes để module của bạn xuất hiện trong Module menu.
Sub Menu: Khi bạn chọn Yes ở phần Add to Menu, bạn sẽ bắt buộc phải điền thông tin ở mục Sub
Menu này. Ở đây chúng ta sẽ định nghĩa tên của các sub menu và URL tương ứng. Tôi sẽ tạo 2 sub
menu: Show info để hiển thị thông tin người dùng, với link createuser được hiểu là đường dẫn
http://localhost/phpFox-3.5.1/upload/index.php?do=/admincp/createuser/; Add new tạo form
để điền thông tin người dùng và insert thông tin đó vào cơ sở dữ liệu, với link createuser.add đại


diện
cho
đường
dẫn
http://localhost/phpFox3.5.1/upload/index.php?do=/admincp/createuser/add/.
Info: Mô tả ngắn về module. Ở đây tôi chọn là Admin can create a new user manually!.

Build file structure
Dẫn đến folder /module/ trên server của bạn nơi chứa file cài đặt của phpfox. Tạo một folder mới với tên
của module mà bạn vừa tạo, của tôi là createuser. Bên trong folder mới bạn sẽ tạo theo cấu trúc sau:
/include/
/include/component/
/include/component/ajax/
/include/component/block/
/include/component/controller/
/include/component/controller/admincp
/include/plugin/
/include/service/
/static/
/static/css/default/default/
/static/image/
/static/jscript/
/template/
/template/default/
/template/default/block/
/template/default/controller/
/template/default/controller/admincp
Chú ý rằng đây là cấu trúc file dạng đầy đủ của một module, vì vậy tùy vào mục đích của bạn mà bạn có
thể chỉ cần tạo một số thư mục cần thiết.

Create a controller
Controller là những file php điều khiển tất cả các page của phpfox. Đầu tiên hãy tạo một php class file cho
controller của chúng ta:
/module/createuser/include/component/controller/admincp/index.class.ph
p
Nội dung của file index.class.php như sau:
index.class.php
<?php
class Createuser_Component_Controller_Admincp_Index extends Phpfox_Component
{
public function process() {
}
}
?>

Tiếp theo chúng ta sẽ tạo một file HTML cho controller vừa tạo của chúng ta:
modulecreateusertemplatedefaultcontrolleradmincpindex.html.php
Trong file index.html.php, bạn có thể thêm dòng sau để kiểm tra tính kết nối giữa file controller và html
mà bạn vừa tạo.
index.html.php
Helloworld!
Truy nhập vào đường dẫn sau:
http://localhost/phpFox-3.5.1/upload/index.php?do=/admincp/createuser/
Hoặc truy nhập vào AdminCP và đi theo đường dẫn:
Module >> Createuser >> Show info
Đây là kết quả thu được:

Giải thích chi tiết:
Tên lớp trong file index.class.php là:
Createuser_Component_Controller_Admincp_Index
Nếu thay dấu gạch dưới (_) bằng dấu gạch trái (/) thì nó sẽ nhắc bạn tới đường dẫn đến file index.class.php
của chúng ta:
/module/createuser/include/component/controller/admincp/index.class.ph
p
Lớp này sẽ kế thừa từ lớp Phpfox_Component, lý do là nó nằm trong thư mục Component.
Để thực thi được controller này, ta cần cung cấp phương thức public process().
Cái tên index ở đây là bắt buộc khi bạn muốn dẫn đến module gốc ở đường link:
http://localhost/phpFox-3.5.1/upload/index.php?do=/admincp/createuser/
Tiếp theo chúng ta sẽ tạo file add.class.php, đây sẽ là controller của đường dẫn:
http://localhost/phpFox-3.5.1/upload/index.php?do=/admincp/createuser/add/
Và tất nhiên bạn vẫn sẽ phải tạo một file html tương ứng (add.html.php) ở thư mục
modulecreateusertemplatedefaultcontrolleradmincp để hiển thị thông tin cần thiết.
Ta sẽ xây dựng form trong add.html.php để nhập thông tin user cần tạo. Đây là dạng form mà tôi đã tạo.

Và dưới đây là đoạn code tương ứng:
add.html.php
<html>
<body>
<form action="{url link='admincp.createuser.index'}"
method="post" id="add_new_user">
<div class="user_create">
<div class="table_header">
User Infomation
</div>
<div class="table">
<div class="table_left">
{required}Full name:
</div>
<div class="table_right">
<input type="text" name="full_name"
size="40" value="yourname" />
</div>
</div>
<div class="table">
<div class="table_left">
{required}Email:
</div>
<div class="table_right">
<input type="text" name="email"
size="40" value="someone@example.com" required />
</div>
</div>
<div class="table">
<div class="table_left">
{required}Password:
</div>
<div class="table_right">
<input type="password" name="password"
size="40" value="" required/>
</div>
</div>
<div class="table">
<div class="table_left">
{required}Birthday:
</div>
<div class="table_right">
<select name="month">
<option value="">Month: </option>
{foreach from=$months item=month}
<option
value={$i++}>{$month}</option>
{/foreach}
</select>
/
<select name="day">
<option value="">Day: </option>
{foreach from=$days item=day}
<option
value={$day}>{$day}</option>
{/foreach}
</select>
/
<select name="year">
<option value="">Year: </option>
{foreach from=$years item=year}
<option
value={$year}>{$year}</option>
{/foreach}
</select>
</div>
</div>
<div class="table">
<div class="table_left">
{required}I am:
</div>
<div class="table_right">
<select name="gender">
<option value="">Select: </option>
<option value="1">Male</option>
<option value="2">Female</option>
</select>
</div>
</div>
<div class="table_clear">
<input type="submit" value="{phrase
var='core.submit'}" class="button" name="submit" />
</div>
</div>
</form>
</body>
</html>

Giải thích code:
Action ở form là:
action="{url link='admincp.createuser.index'}"
Link 'admincp.createuser.index’ có dạng ‘[admincp.]module_name.file_name_prefix’, phần admincp. có
thể có hoặc không tùy thuộc vào việc module thực hiện trên admincp hay trên site thông thường. Ý nghĩa
là form này sau khi click submit sẽ thực hiện đoạn code trong file index.class.php và index.html.php.
Các thẻ div ở đây tôi có sử dụng các class được định nghĩa sẵn trong phpfox để đồng nhất với những form
của các module khác. Thông tin về các class này bạn có thể xem trong các file html nằm trong các module
có sẵn của phpfox.
Từ {required} thay thế cho dấu * màu đỏ.
Tiếp theo là một vòng lặp khá đặc biệt:
{foreach from=$months item=month}...{/foreach}
Vòng lặp này có nghĩa là duyệt tất cả các phần tử trong mảng $months, mỗi phần tử sẽ được đại diện bởi
biến $month. Trong PHP, vòng lặp này sẽ được viết lại như sau:
foreach($months as $month){}
Câu hỏi là mảng $months này được lấy từ đâu ra? Thực ra mảng $month được gán trong file
add.class.php. Nội dung file add.class.php như sau:
add.class.php
<?php
class Createuser_Component_Controller_Admincp_Add extends Phpfox_Component{
public function process() {
$month = array('January', 'February', 'March', 'April', 'May',
'June', 'July', 'August', 'September', 'October', 'November', 'December');
$day = array();
$year = array();
for ($i = 1; $i < 32; $i++) {
$day[] = $i;
}
for ($j = 1900; $j < 2015; $j++) {
$year[] = $j;
}
$this->template()->assign(array(
'months' => $month,
'days' => $day,
'years' => $year
));
}
}
?>

Bởi vì đoạn mã của chúng ta sử dụng mô hình MVC, tức là logic PHP trong file class tách biệt với logic thiết
kế trong file html, vì vậy các thông tin trong file class sẽ được gán vào các biến để sử dụng trong file html.
Phpfox cung cấp phương thức assign() có trong lớp Phpfox_Template để thực hiện phép gán này.

Hiển thị thông tin người dùng trên menu Show info
Menu
Show
info
có
url
dẫn
đến
module
gốc
http://localhost/phpFox3.5.1/upload/index.php?do=/admincp/createuser/. Do đó ta sẽ xây dựng giao diện cho menu này qua file
index.html.php và điều khiển bằng controller index.class.php.
Nội dung file index.html.php:
index.html.php
<html>
<div class="table_header">
Show user info
</div>
<div class="table">
<div class="table_left">
Name:
</div>
<div class="table_right">
{$fulname}
</div>
</div>
<div class="table">
<div class="table_left">
Email:
</div>
<div class="table_right">
{$email}
</div>
</div>
<div class="table">
<div class="table_left">
Birthday:
</div>
<div class="table_right">
{$birthday}
</div>
</div>
<div class="table">
<div class="table_left">
Gender:
</div>
<div class="table_right">
{$gender}
</div>
</div>
</html>

Các biến cần lấy ở đây là $fulname, $email, $birthday, $gender. Những biến này sẽ được lấy bằng mảng
$_POST thông qua form được xây dựng ở file add.html.php.
Nội dung của file index.class.php:
index.class.php
<?php
class Createuser_Component_Controller_Admincp_Index extends Phpfox_Component
{
public function process() {
$this->template()->assign(array(
'fulname' => $_POST['full_name'],
'email' => $_POST['email'],
'password' => md5($_POST['password']),
'birthday' => $month . $_POST['day'] .
$_POST['year'],
'gender' => $_POST['gender']
));
}
}
?>

Đến đây ta sẽ test thử việc hiển thị thông tin người dùng. Truy nhập theo đường dẫn
http://localhost/phpFox-3.5.1/upload/index.php?do=/admincp/createuser/add/ hoặc đăng nhập vào
AdminCP, truy nhập vào đường dẫn Module ≫ Createuser ≫ Add new, nhập đầy đủ thông tin vào form
sau:

Click Submit và hệ thống sẽ tự động điều hướng đến link http://localhost/phpFox3.5.1/upload/index.php?do=/admincp/createuser/index/:
Insert thông tin người dùng vào cơ sở dữ liệu
Để truy nhập và thực hiện các phương thức lên cơ sở dữ liệu, tôi sẽ tạo một service extends từ
Phpfox_Service. File service này nằm trên đường dẫn:
modulecreateuserincludeservicecreateuser.class.php
Phpfox quy định mỗi module chỉ có một service duy nhất để thao tác với cơ sở dữ liệu và chỉ có tên dạng
module_name.class.php. Nội dung của file createuser.class.php:
createuser.class.php
<?php
class Createuser_Service_Createuser extends Phpfox_Service {
public function insert_user() {
$month = $_POST['month'];
switch ($month) {
case 'January': $month = '01';
break;
case 'February': $month = '02';
break;
case 'March': $month = '03';
break;
case 'April': $month = '04';
break;
case 'May': $month = '05';
break;
case 'June': $month = '06';
break;
case 'July': $month = '07';
break;
case 'August': $month = '08';
break;
case 'September': $month = '09';
break;
case 'October': $month = 10;
break;
case 'November': $month = 11;
break;
case 'December': $month = 12;
break;
}
$insert = Phpfox::getLib('database')->insert('phpfox_user',
array(
'user_group_id' => '2',
'full_name' => $_POST['full_name'],
'email' => $_POST['email'],
'password' => md5($_POST['password']),
'birthday' => $month . $_POST['day'] .
$_POST['year'],
'gender' => $_POST['gender']
));
return $insert;
}
}
?>

Tên lớp vẫn tuân thủ theo định dạng được định nghĩa ở trên.
Do giá trị $month ban đầu ở dạng chữ mà không phải dạng số, trong khi dạng hiển thị birthday trong cơ
sở dữ liệu là mmddyyyy, nên ta sẽ chuyển giá trị $month từ dạng chữ sang dạng số cho phù hợp.
Có 2 cách để thực hiện insert vào cơ sở dữ liệu:
$this→database()→insert(‘table_name’, array(‘collumn_name_1’ =>‘value_1’,
‘collumn_name_2’ => ‘value_2’, …));
Phpfox::getLib('database')->insert(‘table_name’, array(‘collumn_name_1’ =>‘value_1’,

‘collumn_name_2’ => ‘value_2’, …));
ở đó column_name_i là tên cột thứ i, còn value_i là giá trị của cột tương ứng.
Tiếp theo chúng ta sẽ thực thi service này. Yêu cầu là click nút Submit thì service này cũng được thực thi,
nên ta sẽ thực hiện việc thực thi này trong phương thức process của file index.class.php. Chúng ta sẽ thêm
đoạn code sau trong file index.class.php.
Phpfox::getService('createuser')->insert_user();
Phương thức getService nhận tham số là tên module và gọi đến phương thức insert_user() để thực hiện
việc insert thông tin người dùng vào cơ sở dữ liệu.

Test
Chúng ta sẽ thực hiện test với người dùng John Adam ở trên. Đây là ảnh cơ sở dữ liệu trước khi click nút
Submit.
Sau khi click nút Submit.

Chú ý: Do ở đây tôi thực hiện trên localhost nên các đường dẫn đều bắt đầu bằng localhost, nếu bạn tạo
module trên server của bạn, hãy thay localhost bằng tên site của bạn trong các đường dẫn mà tôi đưa ra.

Contenu connexe

Tendances

Bài 7 Xây dựng website sử dụng PHP và MySQL - Giáo trình FPT
Bài 7 Xây dựng website sử dụng PHP và MySQL - Giáo trình FPTBài 7 Xây dựng website sử dụng PHP và MySQL - Giáo trình FPT
Bài 7 Xây dựng website sử dụng PHP và MySQL - Giáo trình FPTMasterCode.vn
 
Bài 4 Bảo mật cho website - Xây dựng ứng dụng web
Bài 4 Bảo mật cho website - Xây dựng ứng dụng webBài 4 Bảo mật cho website - Xây dựng ứng dụng web
Bài 4 Bảo mật cho website - Xây dựng ứng dụng webMasterCode.vn
 
Bài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng web
Bài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng webBài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng web
Bài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng webMasterCode.vn
 
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPTBài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPTMasterCode.vn
 
Tài liệu Zend Framework 2 - Cài đặt và cấu hình Zend Framework 2 - Bài 2
Tài liệu Zend Framework 2 - Cài đặt và cấu hình Zend Framework 2 - Bài 2Tài liệu Zend Framework 2 - Cài đặt và cấu hình Zend Framework 2 - Bài 2
Tài liệu Zend Framework 2 - Cài đặt và cấu hình Zend Framework 2 - Bài 2KhanhPham
 
Hướng dẩn cập nhật bài viết trên Joomla
Hướng dẩn cập nhật bài viết trên JoomlaHướng dẩn cập nhật bài viết trên Joomla
Hướng dẩn cập nhật bài viết trên JoomlaMinhtuan Chau
 
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng webBài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng webMasterCode.vn
 
Asp.net mvc 3 (c#) (9 tutorials) egroups vn
Asp.net mvc 3 (c#) (9 tutorials)   egroups vnAsp.net mvc 3 (c#) (9 tutorials)   egroups vn
Asp.net mvc 3 (c#) (9 tutorials) egroups vnNguyen Van Hung
 
Lap trinh-joomla-15-theo-mo-hinh-mvc
Lap trinh-joomla-15-theo-mo-hinh-mvcLap trinh-joomla-15-theo-mo-hinh-mvc
Lap trinh-joomla-15-theo-mo-hinh-mvcChe Linh Nguyen
 
Quản trị joomla toàn tập
Quản trị joomla toàn tậpQuản trị joomla toàn tập
Quản trị joomla toàn tậpdvms
 

Tendances (20)

Bài 7 Xây dựng website sử dụng PHP và MySQL - Giáo trình FPT
Bài 7 Xây dựng website sử dụng PHP và MySQL - Giáo trình FPTBài 7 Xây dựng website sử dụng PHP và MySQL - Giáo trình FPT
Bài 7 Xây dựng website sử dụng PHP và MySQL - Giáo trình FPT
 
Bài 4 Bảo mật cho website - Xây dựng ứng dụng web
Bài 4 Bảo mật cho website - Xây dựng ứng dụng webBài 4 Bảo mật cho website - Xây dựng ứng dụng web
Bài 4 Bảo mật cho website - Xây dựng ứng dụng web
 
Bài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng web
Bài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng webBài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng web
Bài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng web
 
Web301 slide 4
Web301   slide 4Web301   slide 4
Web301 slide 4
 
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPTBài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
 
Web201 slide 2
Web201   slide 2Web201   slide 2
Web201 slide 2
 
Web3012 assignment
Web3012   assignmentWeb3012   assignment
Web3012 assignment
 
Bai tap php_m123
Bai tap php_m123Bai tap php_m123
Bai tap php_m123
 
Gioi thieu joomla
Gioi thieu joomlaGioi thieu joomla
Gioi thieu joomla
 
Web203 slide 5
Web203   slide 5Web203   slide 5
Web203 slide 5
 
Web301 slide 7
Web301   slide 7Web301   slide 7
Web301 slide 7
 
Tài liệu Zend Framework 2 - Cài đặt và cấu hình Zend Framework 2 - Bài 2
Tài liệu Zend Framework 2 - Cài đặt và cấu hình Zend Framework 2 - Bài 2Tài liệu Zend Framework 2 - Cài đặt và cấu hình Zend Framework 2 - Bài 2
Tài liệu Zend Framework 2 - Cài đặt và cấu hình Zend Framework 2 - Bài 2
 
Asp control
Asp controlAsp control
Asp control
 
Tìm hiểu về Joomla
Tìm hiểu về Joomla Tìm hiểu về Joomla
Tìm hiểu về Joomla
 
Web301 slide 1
Web301   slide 1Web301   slide 1
Web301 slide 1
 
Hướng dẩn cập nhật bài viết trên Joomla
Hướng dẩn cập nhật bài viết trên JoomlaHướng dẩn cập nhật bài viết trên Joomla
Hướng dẩn cập nhật bài viết trên Joomla
 
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng webBài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
 
Asp.net mvc 3 (c#) (9 tutorials) egroups vn
Asp.net mvc 3 (c#) (9 tutorials)   egroups vnAsp.net mvc 3 (c#) (9 tutorials)   egroups vn
Asp.net mvc 3 (c#) (9 tutorials) egroups vn
 
Lap trinh-joomla-15-theo-mo-hinh-mvc
Lap trinh-joomla-15-theo-mo-hinh-mvcLap trinh-joomla-15-theo-mo-hinh-mvc
Lap trinh-joomla-15-theo-mo-hinh-mvc
 
Quản trị joomla toàn tập
Quản trị joomla toàn tậpQuản trị joomla toàn tập
Quản trị joomla toàn tập
 

En vedette

En vedette (9)

Taylor swift khen toc tien giong marilyn monroe
Taylor swift khen toc tien giong marilyn monroeTaylor swift khen toc tien giong marilyn monroe
Taylor swift khen toc tien giong marilyn monroe
 
FBI戳穿谎言惯用九大秘笈
FBI戳穿谎言惯用九大秘笈FBI戳穿谎言惯用九大秘笈
FBI戳穿谎言惯用九大秘笈
 
环保设计 Eco design
环保设计 Eco design环保设计 Eco design
环保设计 Eco design
 
Facebook в системі бібліотечних інтернет-комунікацій
Facebook в системі бібліотечних інтернет-комунікаційFacebook в системі бібліотечних інтернет-комунікацій
Facebook в системі бібліотечних інтернет-комунікацій
 
Facebook And Academic Libraries
Facebook And Academic LibrariesFacebook And Academic Libraries
Facebook And Academic Libraries
 
Sierra 101 powerpoint
Sierra 101 powerpointSierra 101 powerpoint
Sierra 101 powerpoint
 
X'mas Green Guide a to z
X'mas Green Guide a to zX'mas Green Guide a to z
X'mas Green Guide a to z
 
Jay Z
Jay  ZJay  Z
Jay Z
 
patrón Duende amigurumi
patrón Duende amigurumipatrón Duende amigurumi
patrón Duende amigurumi
 

Similaire à Create easymoduleinphpfox

tao module joomla 1.5
tao module  joomla 1.5tao module  joomla 1.5
tao module joomla 1.5dvms
 
Zend Framework 2.0: Upload file và Multi upload files trong ZF2 - Bài 9
Zend Framework 2.0:  Upload file và Multi upload files trong ZF2 - Bài 9Zend Framework 2.0:  Upload file và Multi upload files trong ZF2 - Bài 9
Zend Framework 2.0: Upload file và Multi upload files trong ZF2 - Bài 9KhanhPham
 
Tailieuonline.tk joomla-viet-component
 Tailieuonline.tk joomla-viet-component Tailieuonline.tk joomla-viet-component
Tailieuonline.tk joomla-viet-componentzzbabyloveszz
 
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Minh Tri Lam
 
Hỏi tình hình bk tiny bktiny-hdsd
Hỏi tình hình bk tiny   bktiny-hdsdHỏi tình hình bk tiny   bktiny-hdsd
Hỏi tình hình bk tiny bktiny-hdsdVu Hung Nguyen
 
[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập
[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập
[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tậpnnn4194a
 
The First 2015 Saigon WordPress Meetup
The First 2015 Saigon WordPress MeetupThe First 2015 Saigon WordPress Meetup
The First 2015 Saigon WordPress MeetupKhanhPham
 
Hướng dẫn lập trình với SCSF phần II(smart client software factory)
Hướng dẫn lập trình với SCSF phần II(smart client software factory)Hướng dẫn lập trình với SCSF phần II(smart client software factory)
Hướng dẫn lập trình với SCSF phần II(smart client software factory)Minh Tri Lam
 
PHP có thể làm gì? 9 Thứ thú vị có thể làm với PHP
PHP có thể làm gì?  9 Thứ thú vị có thể làm với PHPPHP có thể làm gì?  9 Thứ thú vị có thể làm với PHP
PHP có thể làm gì? 9 Thứ thú vị có thể làm với PHPNIIT - ICT Hà Nội
 
Sức mạnh của jsf 2, phần 3 xử lý sự kiện, java script và ajax
Sức mạnh của jsf 2, phần 3 xử lý sự kiện, java script và ajaxSức mạnh của jsf 2, phần 3 xử lý sự kiện, java script và ajax
Sức mạnh của jsf 2, phần 3 xử lý sự kiện, java script và ajaxTuyet Tam
 
Tai lieu huong_dan_tu_hoc_visual_studio2010
Tai lieu huong_dan_tu_hoc_visual_studio2010Tai lieu huong_dan_tu_hoc_visual_studio2010
Tai lieu huong_dan_tu_hoc_visual_studio2010Nhat Linh Luong
 
Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản
Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản
Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản KhanhPham
 
Mixing asp.net mvc & web form into hybrid project
Mixing asp.net mvc & web form into hybrid projectMixing asp.net mvc & web form into hybrid project
Mixing asp.net mvc & web form into hybrid projectMinh Tri Lam
 
Asp.net mvc framework qua cac vi du
Asp.net mvc framework  qua cac vi duAsp.net mvc framework  qua cac vi du
Asp.net mvc framework qua cac vi duKim Hyun Hai
 
Tutoria mvc framework
Tutoria mvc frameworkTutoria mvc framework
Tutoria mvc frameworkXuan Le
 
Php cơ bản của trung tâm hocweb.com.vn
Php cơ bản của trung tâm hocweb.com.vnPhp cơ bản của trung tâm hocweb.com.vn
Php cơ bản của trung tâm hocweb.com.vnDang le Nam
 
Tran thikimthao k37103014_wordpress
Tran thikimthao k37103014_wordpressTran thikimthao k37103014_wordpress
Tran thikimthao k37103014_wordpressTím Biếc
 

Similaire à Create easymoduleinphpfox (20)

tao module joomla 1.5
tao module  joomla 1.5tao module  joomla 1.5
tao module joomla 1.5
 
Zend Framework 2.0: Upload file và Multi upload files trong ZF2 - Bài 9
Zend Framework 2.0:  Upload file và Multi upload files trong ZF2 - Bài 9Zend Framework 2.0:  Upload file và Multi upload files trong ZF2 - Bài 9
Zend Framework 2.0: Upload file và Multi upload files trong ZF2 - Bài 9
 
Joo
JooJoo
Joo
 
Tailieuonline.tk joomla-viet-component
 Tailieuonline.tk joomla-viet-component Tailieuonline.tk joomla-viet-component
Tailieuonline.tk joomla-viet-component
 
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
 
Yii
YiiYii
Yii
 
Joomla developermanual
Joomla developermanualJoomla developermanual
Joomla developermanual
 
Hỏi tình hình bk tiny bktiny-hdsd
Hỏi tình hình bk tiny   bktiny-hdsdHỏi tình hình bk tiny   bktiny-hdsd
Hỏi tình hình bk tiny bktiny-hdsd
 
[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập
[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập
[Athena] Nguyễn Nhật Nguyên - Báo cáo thực tập
 
The First 2015 Saigon WordPress Meetup
The First 2015 Saigon WordPress MeetupThe First 2015 Saigon WordPress Meetup
The First 2015 Saigon WordPress Meetup
 
Hướng dẫn lập trình với SCSF phần II(smart client software factory)
Hướng dẫn lập trình với SCSF phần II(smart client software factory)Hướng dẫn lập trình với SCSF phần II(smart client software factory)
Hướng dẫn lập trình với SCSF phần II(smart client software factory)
 
PHP có thể làm gì? 9 Thứ thú vị có thể làm với PHP
PHP có thể làm gì?  9 Thứ thú vị có thể làm với PHPPHP có thể làm gì?  9 Thứ thú vị có thể làm với PHP
PHP có thể làm gì? 9 Thứ thú vị có thể làm với PHP
 
Sức mạnh của jsf 2, phần 3 xử lý sự kiện, java script và ajax
Sức mạnh của jsf 2, phần 3 xử lý sự kiện, java script và ajaxSức mạnh của jsf 2, phần 3 xử lý sự kiện, java script và ajax
Sức mạnh của jsf 2, phần 3 xử lý sự kiện, java script và ajax
 
Tai lieu huong_dan_tu_hoc_visual_studio2010
Tai lieu huong_dan_tu_hoc_visual_studio2010Tai lieu huong_dan_tu_hoc_visual_studio2010
Tai lieu huong_dan_tu_hoc_visual_studio2010
 
Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản
Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản
Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản
 
Mixing asp.net mvc & web form into hybrid project
Mixing asp.net mvc & web form into hybrid projectMixing asp.net mvc & web form into hybrid project
Mixing asp.net mvc & web form into hybrid project
 
Asp.net mvc framework qua cac vi du
Asp.net mvc framework  qua cac vi duAsp.net mvc framework  qua cac vi du
Asp.net mvc framework qua cac vi du
 
Tutoria mvc framework
Tutoria mvc frameworkTutoria mvc framework
Tutoria mvc framework
 
Php cơ bản của trung tâm hocweb.com.vn
Php cơ bản của trung tâm hocweb.com.vnPhp cơ bản của trung tâm hocweb.com.vn
Php cơ bản của trung tâm hocweb.com.vn
 
Tran thikimthao k37103014_wordpress
Tran thikimthao k37103014_wordpressTran thikimthao k37103014_wordpress
Tran thikimthao k37103014_wordpress
 

Dernier

.................KHTN 9....................................Viet Nam.......
.................KHTN 9....................................Viet Nam........................KHTN 9....................................Viet Nam.......
.................KHTN 9....................................Viet Nam.......thoa051989
 
Giáo trình xã hội học Thể dục Thể thao hay
Giáo trình xã hội học Thể dục Thể thao hayGiáo trình xã hội học Thể dục Thể thao hay
Giáo trình xã hội học Thể dục Thể thao hayLcTh15
 
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...Nguyen Thanh Tu Collection
 
BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...
BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...
BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...Nguyen Thanh Tu Collection
 
GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...
GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...
GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...Nguyen Thanh Tu Collection
 
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docx
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docxTổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docx
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docxTrangL188166
 
đồ án thương mại quốc tế- hutech - KDQTK21
đồ án thương mại quốc tế- hutech - KDQTK21đồ án thương mại quốc tế- hutech - KDQTK21
đồ án thương mại quốc tế- hutech - KDQTK21nguyenthao2003bd
 
Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...
Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...
Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...Xem Số Mệnh
 
GIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdf
GIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdfGIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdf
GIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdfHngNguyn271079
 
1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao
1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao
1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ haoBookoTime
 
chủ nghĩa xã hội khoa học về đề tài cuối kì
chủ nghĩa xã hội khoa học về đề tài cuối kìchủ nghĩa xã hội khoa học về đề tài cuối kì
chủ nghĩa xã hội khoa học về đề tài cuối kìanlqd1402
 
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...Nguyen Thanh Tu Collection
 
TƯ TƯỞNG HỒ CHÍ MINH VỀ NHÀ NƯỚC CỦA NHÂN DÂN, DO NHÂN DÂN, VÌ NHÂN DÂN VÀ VẬ...
TƯ TƯỞNG HỒ CHÍ MINH VỀ NHÀ NƯỚC CỦA NHÂN DÂN, DO NHÂN DÂN, VÌ NHÂN DÂN VÀ VẬ...TƯ TƯỞNG HỒ CHÍ MINH VỀ NHÀ NƯỚC CỦA NHÂN DÂN, DO NHÂN DÂN, VÌ NHÂN DÂN VÀ VẬ...
TƯ TƯỞNG HỒ CHÍ MINH VỀ NHÀ NƯỚC CỦA NHÂN DÂN, DO NHÂN DÂN, VÌ NHÂN DÂN VÀ VẬ...cogiahuy36
 
Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...
Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...
Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...Xem Số Mệnh
 
syllabus for the book "Tiếng Anh 6 i-Learn Smart World"
syllabus for the book "Tiếng Anh 6 i-Learn Smart World"syllabus for the book "Tiếng Anh 6 i-Learn Smart World"
syllabus for the book "Tiếng Anh 6 i-Learn Smart World"LaiHoang6
 
vat li 10 Chuyen de bai 4 Xac dinh phuong huong.pptx
vat li 10  Chuyen de bai 4 Xac dinh phuong huong.pptxvat li 10  Chuyen de bai 4 Xac dinh phuong huong.pptx
vat li 10 Chuyen de bai 4 Xac dinh phuong huong.pptxlephuongvu2019
 
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...Nguyen Thanh Tu Collection
 
TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...
TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...
TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...Nguyen Thanh Tu Collection
 
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docxNỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx7E26NguynThThyLinh
 
Game-Plants-vs-Zombies để ôn tập môn kinh tế chính trị.pptx
Game-Plants-vs-Zombies để ôn tập môn kinh tế chính trị.pptxGame-Plants-vs-Zombies để ôn tập môn kinh tế chính trị.pptx
Game-Plants-vs-Zombies để ôn tập môn kinh tế chính trị.pptxxaxanhuxaxoi
 

Dernier (20)

.................KHTN 9....................................Viet Nam.......
.................KHTN 9....................................Viet Nam........................KHTN 9....................................Viet Nam.......
.................KHTN 9....................................Viet Nam.......
 
Giáo trình xã hội học Thể dục Thể thao hay
Giáo trình xã hội học Thể dục Thể thao hayGiáo trình xã hội học Thể dục Thể thao hay
Giáo trình xã hội học Thể dục Thể thao hay
 
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
 
BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...
BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...
BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...
 
GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...
GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...
GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...
 
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docx
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docxTổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docx
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docx
 
đồ án thương mại quốc tế- hutech - KDQTK21
đồ án thương mại quốc tế- hutech - KDQTK21đồ án thương mại quốc tế- hutech - KDQTK21
đồ án thương mại quốc tế- hutech - KDQTK21
 
Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...
Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...
Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...
 
GIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdf
GIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdfGIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdf
GIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdf
 
1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao
1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao
1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao
 
chủ nghĩa xã hội khoa học về đề tài cuối kì
chủ nghĩa xã hội khoa học về đề tài cuối kìchủ nghĩa xã hội khoa học về đề tài cuối kì
chủ nghĩa xã hội khoa học về đề tài cuối kì
 
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
 
TƯ TƯỞNG HỒ CHÍ MINH VỀ NHÀ NƯỚC CỦA NHÂN DÂN, DO NHÂN DÂN, VÌ NHÂN DÂN VÀ VẬ...
TƯ TƯỞNG HỒ CHÍ MINH VỀ NHÀ NƯỚC CỦA NHÂN DÂN, DO NHÂN DÂN, VÌ NHÂN DÂN VÀ VẬ...TƯ TƯỞNG HỒ CHÍ MINH VỀ NHÀ NƯỚC CỦA NHÂN DÂN, DO NHÂN DÂN, VÌ NHÂN DÂN VÀ VẬ...
TƯ TƯỞNG HỒ CHÍ MINH VỀ NHÀ NƯỚC CỦA NHÂN DÂN, DO NHÂN DÂN, VÌ NHÂN DÂN VÀ VẬ...
 
Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...
Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...
Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...
 
syllabus for the book "Tiếng Anh 6 i-Learn Smart World"
syllabus for the book "Tiếng Anh 6 i-Learn Smart World"syllabus for the book "Tiếng Anh 6 i-Learn Smart World"
syllabus for the book "Tiếng Anh 6 i-Learn Smart World"
 
vat li 10 Chuyen de bai 4 Xac dinh phuong huong.pptx
vat li 10  Chuyen de bai 4 Xac dinh phuong huong.pptxvat li 10  Chuyen de bai 4 Xac dinh phuong huong.pptx
vat li 10 Chuyen de bai 4 Xac dinh phuong huong.pptx
 
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
 
TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...
TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...
TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...
 
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docxNỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx
 
Game-Plants-vs-Zombies để ôn tập môn kinh tế chính trị.pptx
Game-Plants-vs-Zombies để ôn tập môn kinh tế chính trị.pptxGame-Plants-vs-Zombies để ôn tập môn kinh tế chính trị.pptx
Game-Plants-vs-Zombies để ôn tập môn kinh tế chính trị.pptx
 

Create easymoduleinphpfox

  • 1. Cách tạo một module đơn giản trên phpfox Ở bài viết này, tôi sẽ trình bày một cách chi tiết các bước xây dựng một module đơn giản trên công cụ phpfox. Chúng ta sẽ tiếp cận bằng cách thực hiện một ví dụ cụ thể, các bạn có thể áp dụng những chi tiết trong ví dụ này để áp dụng cho những project của các bạn. Đề bài: Viết một module trên phpfox tạo một user và insert thông tin user đó vào cơ sở dữ liệu, đồng thời hiển thị thông tin user vừa tạo trên một menu ở AdminCP. Cách thực hiện: Phiên bản sử dụng: phpfox 3.5.1 Bạn có thể download phpfox tại đây. Hướng dẫn cài đặt phpfox bạn có thể tham khảo ở đây. Create a new product Đầu tiên bạn sẽ tạo một product mới (nơi chứa module của bạn). Tuy nhiên, đây chỉ là bước tùy chọn vì bạn có thể đặt module của mình vào một product bất kì có sẵn trên phpfox. Mặc dù vậy, việc sử dụng một product riêng của bản thân sẽ giúp bạn có thể tùy biến dễ dàng những chức năng trong nó. Các bước để tạo một product mới như sau: Đăng nhập với tài khoản AdminCP và truy nhập đường dẫn sau: Extensions >> Product >> Create New Product Điền đầy đủ các thông tin vào form và click nút submit: Dưới đây tôi sẽ giải thích chi tiết thông tin của từng trường:
  • 2.        Product ID: giá trị ID duy nhất của product. Nó có thể là kí tự số, chữ cái và dấu gạch dưới (_), và luôn ở dạng chữ cái thường. Ở đây tôi sẽ chọn là create_user. Title: tiêu đề của product, thứ mà sẽ hiển thị trong danh sách các product. Ở đây tôi sẽ chọn là Create new user. Description: mô tả ngắn về product. Ở đây tôi sẽ chọn là Create a new user manually. Version: phiên bản hiện tại của product. Do tôi mới tạo product này nên tôi sẽ chọn là 1.0. Product URL: URL của website của bạn, ở đây tôi sử dụng localhost nên sẽ điền là: localhost. Version Check URL: URL để phpfox kiểm tra phiên bản release của product. Ở đây tôi điền là localhost/version.php. Active: thiết lập trạng thái của product là active hoặc inactive. Chọn Yes. Create new module in AdminCP Đăng nhập vào AdminCP và vào theo đường dẫn: Extension >> Module >> Create New Module Tiếp theo chúng ta sẽ điền đầy đủ vào form dưới đây và click nút submit: Chi tiết thông tin của từng trường:     Product: tên của product chứa module của bạn. Ở đây tôi sẽ chon là Create new user. Module ID: id của module. Ở đây tôi chọn là createuser. Add to Menu: chọn Yes để module của bạn xuất hiện trong Module menu. Sub Menu: Khi bạn chọn Yes ở phần Add to Menu, bạn sẽ bắt buộc phải điền thông tin ở mục Sub Menu này. Ở đây chúng ta sẽ định nghĩa tên của các sub menu và URL tương ứng. Tôi sẽ tạo 2 sub menu: Show info để hiển thị thông tin người dùng, với link createuser được hiểu là đường dẫn http://localhost/phpFox-3.5.1/upload/index.php?do=/admincp/createuser/; Add new tạo form để điền thông tin người dùng và insert thông tin đó vào cơ sở dữ liệu, với link createuser.add đại
  • 3.  diện cho đường dẫn http://localhost/phpFox3.5.1/upload/index.php?do=/admincp/createuser/add/. Info: Mô tả ngắn về module. Ở đây tôi chọn là Admin can create a new user manually!. Build file structure Dẫn đến folder /module/ trên server của bạn nơi chứa file cài đặt của phpfox. Tạo một folder mới với tên của module mà bạn vừa tạo, của tôi là createuser. Bên trong folder mới bạn sẽ tạo theo cấu trúc sau: /include/ /include/component/ /include/component/ajax/ /include/component/block/ /include/component/controller/ /include/component/controller/admincp /include/plugin/ /include/service/ /static/ /static/css/default/default/ /static/image/ /static/jscript/ /template/ /template/default/ /template/default/block/ /template/default/controller/ /template/default/controller/admincp Chú ý rằng đây là cấu trúc file dạng đầy đủ của một module, vì vậy tùy vào mục đích của bạn mà bạn có thể chỉ cần tạo một số thư mục cần thiết. Create a controller Controller là những file php điều khiển tất cả các page của phpfox. Đầu tiên hãy tạo một php class file cho controller của chúng ta: /module/createuser/include/component/controller/admincp/index.class.ph p Nội dung của file index.class.php như sau: index.class.php <?php class Createuser_Component_Controller_Admincp_Index extends Phpfox_Component { public function process() { } }
  • 4. ?> Tiếp theo chúng ta sẽ tạo một file HTML cho controller vừa tạo của chúng ta: modulecreateusertemplatedefaultcontrolleradmincpindex.html.php Trong file index.html.php, bạn có thể thêm dòng sau để kiểm tra tính kết nối giữa file controller và html mà bạn vừa tạo. index.html.php Helloworld! Truy nhập vào đường dẫn sau: http://localhost/phpFox-3.5.1/upload/index.php?do=/admincp/createuser/ Hoặc truy nhập vào AdminCP và đi theo đường dẫn: Module >> Createuser >> Show info Đây là kết quả thu được: Giải thích chi tiết: Tên lớp trong file index.class.php là: Createuser_Component_Controller_Admincp_Index Nếu thay dấu gạch dưới (_) bằng dấu gạch trái (/) thì nó sẽ nhắc bạn tới đường dẫn đến file index.class.php của chúng ta: /module/createuser/include/component/controller/admincp/index.class.ph p Lớp này sẽ kế thừa từ lớp Phpfox_Component, lý do là nó nằm trong thư mục Component. Để thực thi được controller này, ta cần cung cấp phương thức public process(). Cái tên index ở đây là bắt buộc khi bạn muốn dẫn đến module gốc ở đường link: http://localhost/phpFox-3.5.1/upload/index.php?do=/admincp/createuser/
  • 5. Tiếp theo chúng ta sẽ tạo file add.class.php, đây sẽ là controller của đường dẫn: http://localhost/phpFox-3.5.1/upload/index.php?do=/admincp/createuser/add/ Và tất nhiên bạn vẫn sẽ phải tạo một file html tương ứng (add.html.php) ở thư mục modulecreateusertemplatedefaultcontrolleradmincp để hiển thị thông tin cần thiết. Ta sẽ xây dựng form trong add.html.php để nhập thông tin user cần tạo. Đây là dạng form mà tôi đã tạo. Và dưới đây là đoạn code tương ứng: add.html.php <html> <body> <form action="{url link='admincp.createuser.index'}" method="post" id="add_new_user"> <div class="user_create"> <div class="table_header"> User Infomation </div> <div class="table"> <div class="table_left"> {required}Full name: </div> <div class="table_right"> <input type="text" name="full_name" size="40" value="yourname" /> </div> </div> <div class="table"> <div class="table_left"> {required}Email: </div> <div class="table_right"> <input type="text" name="email" size="40" value="someone@example.com" required /> </div> </div>
  • 6. <div class="table"> <div class="table_left"> {required}Password: </div> <div class="table_right"> <input type="password" name="password" size="40" value="" required/> </div> </div> <div class="table"> <div class="table_left"> {required}Birthday: </div> <div class="table_right"> <select name="month"> <option value="">Month: </option> {foreach from=$months item=month} <option value={$i++}>{$month}</option> {/foreach} </select> / <select name="day"> <option value="">Day: </option> {foreach from=$days item=day} <option value={$day}>{$day}</option> {/foreach} </select> / <select name="year"> <option value="">Year: </option> {foreach from=$years item=year} <option value={$year}>{$year}</option> {/foreach} </select> </div> </div> <div class="table"> <div class="table_left"> {required}I am: </div> <div class="table_right"> <select name="gender"> <option value="">Select: </option> <option value="1">Male</option> <option value="2">Female</option> </select> </div> </div> <div class="table_clear"> <input type="submit" value="{phrase var='core.submit'}" class="button" name="submit" />
  • 7. </div> </div> </form> </body> </html> Giải thích code: Action ở form là: action="{url link='admincp.createuser.index'}" Link 'admincp.createuser.index’ có dạng ‘[admincp.]module_name.file_name_prefix’, phần admincp. có thể có hoặc không tùy thuộc vào việc module thực hiện trên admincp hay trên site thông thường. Ý nghĩa là form này sau khi click submit sẽ thực hiện đoạn code trong file index.class.php và index.html.php. Các thẻ div ở đây tôi có sử dụng các class được định nghĩa sẵn trong phpfox để đồng nhất với những form của các module khác. Thông tin về các class này bạn có thể xem trong các file html nằm trong các module có sẵn của phpfox. Từ {required} thay thế cho dấu * màu đỏ. Tiếp theo là một vòng lặp khá đặc biệt: {foreach from=$months item=month}...{/foreach} Vòng lặp này có nghĩa là duyệt tất cả các phần tử trong mảng $months, mỗi phần tử sẽ được đại diện bởi biến $month. Trong PHP, vòng lặp này sẽ được viết lại như sau: foreach($months as $month){} Câu hỏi là mảng $months này được lấy từ đâu ra? Thực ra mảng $month được gán trong file add.class.php. Nội dung file add.class.php như sau: add.class.php <?php class Createuser_Component_Controller_Admincp_Add extends Phpfox_Component{ public function process() { $month = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); $day = array(); $year = array(); for ($i = 1; $i < 32; $i++) { $day[] = $i; } for ($j = 1900; $j < 2015; $j++) { $year[] = $j; } $this->template()->assign(array( 'months' => $month, 'days' => $day, 'years' => $year )); }
  • 8. } ?> Bởi vì đoạn mã của chúng ta sử dụng mô hình MVC, tức là logic PHP trong file class tách biệt với logic thiết kế trong file html, vì vậy các thông tin trong file class sẽ được gán vào các biến để sử dụng trong file html. Phpfox cung cấp phương thức assign() có trong lớp Phpfox_Template để thực hiện phép gán này. Hiển thị thông tin người dùng trên menu Show info Menu Show info có url dẫn đến module gốc http://localhost/phpFox3.5.1/upload/index.php?do=/admincp/createuser/. Do đó ta sẽ xây dựng giao diện cho menu này qua file index.html.php và điều khiển bằng controller index.class.php. Nội dung file index.html.php: index.html.php <html> <div class="table_header"> Show user info </div> <div class="table"> <div class="table_left"> Name: </div> <div class="table_right"> {$fulname} </div> </div> <div class="table"> <div class="table_left"> Email: </div> <div class="table_right"> {$email} </div> </div> <div class="table"> <div class="table_left"> Birthday: </div> <div class="table_right"> {$birthday} </div> </div> <div class="table"> <div class="table_left"> Gender: </div> <div class="table_right"> {$gender} </div>
  • 9. </div> </html> Các biến cần lấy ở đây là $fulname, $email, $birthday, $gender. Những biến này sẽ được lấy bằng mảng $_POST thông qua form được xây dựng ở file add.html.php. Nội dung của file index.class.php: index.class.php <?php class Createuser_Component_Controller_Admincp_Index extends Phpfox_Component { public function process() { $this->template()->assign(array( 'fulname' => $_POST['full_name'], 'email' => $_POST['email'], 'password' => md5($_POST['password']), 'birthday' => $month . $_POST['day'] . $_POST['year'], 'gender' => $_POST['gender'] )); } } ?> Đến đây ta sẽ test thử việc hiển thị thông tin người dùng. Truy nhập theo đường dẫn http://localhost/phpFox-3.5.1/upload/index.php?do=/admincp/createuser/add/ hoặc đăng nhập vào AdminCP, truy nhập vào đường dẫn Module ≫ Createuser ≫ Add new, nhập đầy đủ thông tin vào form sau: Click Submit và hệ thống sẽ tự động điều hướng đến link http://localhost/phpFox3.5.1/upload/index.php?do=/admincp/createuser/index/:
  • 10. Insert thông tin người dùng vào cơ sở dữ liệu Để truy nhập và thực hiện các phương thức lên cơ sở dữ liệu, tôi sẽ tạo một service extends từ Phpfox_Service. File service này nằm trên đường dẫn: modulecreateuserincludeservicecreateuser.class.php Phpfox quy định mỗi module chỉ có một service duy nhất để thao tác với cơ sở dữ liệu và chỉ có tên dạng module_name.class.php. Nội dung của file createuser.class.php: createuser.class.php <?php class Createuser_Service_Createuser extends Phpfox_Service { public function insert_user() { $month = $_POST['month']; switch ($month) { case 'January': $month = '01'; break; case 'February': $month = '02'; break; case 'March': $month = '03'; break; case 'April': $month = '04'; break; case 'May': $month = '05'; break; case 'June': $month = '06'; break; case 'July': $month = '07'; break; case 'August': $month = '08'; break; case 'September': $month = '09'; break; case 'October': $month = 10; break; case 'November': $month = 11; break; case 'December': $month = 12; break; } $insert = Phpfox::getLib('database')->insert('phpfox_user', array(
  • 11. 'user_group_id' => '2', 'full_name' => $_POST['full_name'], 'email' => $_POST['email'], 'password' => md5($_POST['password']), 'birthday' => $month . $_POST['day'] . $_POST['year'], 'gender' => $_POST['gender'] )); return $insert; } } ?> Tên lớp vẫn tuân thủ theo định dạng được định nghĩa ở trên. Do giá trị $month ban đầu ở dạng chữ mà không phải dạng số, trong khi dạng hiển thị birthday trong cơ sở dữ liệu là mmddyyyy, nên ta sẽ chuyển giá trị $month từ dạng chữ sang dạng số cho phù hợp. Có 2 cách để thực hiện insert vào cơ sở dữ liệu: $this→database()→insert(‘table_name’, array(‘collumn_name_1’ =>‘value_1’, ‘collumn_name_2’ => ‘value_2’, …)); Phpfox::getLib('database')->insert(‘table_name’, array(‘collumn_name_1’ =>‘value_1’, ‘collumn_name_2’ => ‘value_2’, …)); ở đó column_name_i là tên cột thứ i, còn value_i là giá trị của cột tương ứng. Tiếp theo chúng ta sẽ thực thi service này. Yêu cầu là click nút Submit thì service này cũng được thực thi, nên ta sẽ thực hiện việc thực thi này trong phương thức process của file index.class.php. Chúng ta sẽ thêm đoạn code sau trong file index.class.php. Phpfox::getService('createuser')->insert_user(); Phương thức getService nhận tham số là tên module và gọi đến phương thức insert_user() để thực hiện việc insert thông tin người dùng vào cơ sở dữ liệu. Test Chúng ta sẽ thực hiện test với người dùng John Adam ở trên. Đây là ảnh cơ sở dữ liệu trước khi click nút Submit.
  • 12. Sau khi click nút Submit. Chú ý: Do ở đây tôi thực hiện trên localhost nên các đường dẫn đều bắt đầu bằng localhost, nếu bạn tạo module trên server của bạn, hãy thay localhost bằng tên site của bạn trong các đường dẫn mà tôi đưa ra.