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 đ...








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 ở...


diện
cho
đường
dẫn
http://localhost/phpFox3.5.1/upload/index.php?do=/admincp/createuser/add/.
Info: Mô tả ngắn về modul...
?>

Tiếp theo chúng ta sẽ tạo một file HTML cho controller vừa tạo của chúng ta:
modulecreateusertemplatedefaultcontroller...
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/ind...
<div class="table">
<div class="table_left">
{required}Password:
</div>
<div class="table_right">
<input type="password" n...
</div>
</div>
</form>
</body>
</html>

Giải thích code:
Action ở form là:
action="{url link='admincp.createuser.index'}"
L...
}
?>

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ế tron...
</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
$_POS...
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 ...
'user_group_id' => '2',
'full_name' => $_POST['full_name'],
'email' => $_POST['email'],
'password' => md5($_POST['password...
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 ...
Upcoming SlideShare
Loading in...5
×

Create easymoduleinphpfox

671

Published on

Published in: Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
671
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
15
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Create easymoduleinphpfox

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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.

×