Cách viết plugin cho CakePHP
Trong một ứng dụng viết bằng CakePHP bạn có thể lồng vào đó một ứng dụng khác nhỏ hơn nhưng vẫn có đủ các thành phần như controller, view, model, component, helper…. gọi là plugin. Plugin đặc biệt hữu ích khi bạn muốn thêm chức năng vào một ứng dụng mà không muốn can thiệp vào ứng dụng đã có. Bài này tôi sẽ hướng dẫn các bạn tự viết một plugin hiển thị một calendar dùng jquery
Giả sử bạn đã có một ứng dụng viết trên nền CakePHP. Bây giờ bạn tạo một thư mục có tên là cake_calender trong app/plugins
Trong thư mục app/plugins/cake_calendar này bạn tạo tiếp các thư mục:
- controllers
- views
- webroot
Lưu ý: nếu bạn dùng bản cakephp 1.2 thì thư mục webroot bạn đổi tên thành vendors, khi đó plugin mới nhận được link tới js và css
Tiếp theo là các thư mục con:
- views/layouts
- views/cake_calendar
- webroot/js
- webroot/css
Bạn thấy là cấu trúc thư mục y hệt như ứng dụng CakePHP ban đầu của bạn
Tiếp theo bạn tạo file cake_calendar_app_controller.php trong app/plugins/cake_calendar có nội dung:
<?php class CakeCalendarAppController extends AppController { } ?> |
Tạo tiếp file cake_calendar_controller.php trong app/plugins/cake_calendar/controllers có nội dung:
<?php class CakeCalendarController extends CakeCalendarAppController { var $name = 'CakeCalendar'; var $uses = array(); var $helpers = array('Html','Javascript'); function index() { } } ?> |
Hoàn thành xong bước tạo controller, tiếp theo ta tạo view cho action index
Tạo file index.ctp trong app/plugins/cake_calendar/views/cake_calendar có nội dung:
<script type='text/javascript'>
$(document).ready(function() {
var date = new Date();
var d = date.getDate();
var m = date.getMonth();
var y = date.getFullYear();
$('#calendar').fullCalendar({
theme: true,
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
editable: true,
events: [
{
title: 'All Day Event',
start: new Date(y, m, 1)
},
{
title: 'Long Event',
start: new Date(y, m, d-5),
end: new Date(y, m, d-2)
},
{
id: 999,
title: 'Repeating Event',
start: new Date(y, m, d-3, 16, 0),
allDay: false
},
{
id: 999,
title: 'Repeating Event',
start: new Date(y, m, d+4, 16, 0),
allDay: false
},
{
title: 'Meeting',
start: new Date(y, m, d, 10, 30),
allDay: false
},
{
title: 'Lunch',
start: new Date(y, m, d, 12, 0),
end: new Date(y, m, d, 14, 0),
allDay: false
},
{
title: 'Birthday Party',
start: new Date(y, m, d+1, 19, 0),
end: new Date(y, m, d+1, 22, 30),
allDay: false
},
{
title: 'Click for Google',
start: new Date(y, m, 28),
end: new Date(y, m, 29),
url: 'http://google.com/'
}
]
});
});
</script>
<style type='text/css'>
body {
margin-top: 40px;
text-align: center;
font-size: 13px;
font-family: "Lucida Grande",Helvetica,Arial,Verdana,sans-serif;
}
#calendar {
width: 900px;
margin: 0 auto;
}
</style>
<div id='calendar'></div> |
Plugin này chưa có layout mặc định, nó sẽ dùng layout của ứng dụng có sẵn, ta tạo file default.ctp trong app/plugins/cake_calendar/views/layouts có nội dung như sau:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Cake Calendar Plugin</title> <?php echo $html->css(array( '/cake_calendar/css/redmond/theme', '/cake_calendar/css/fullcalendar' )); echo $javascript->link(array( '/cake_calendar/js/jquery/jquery', '/cake_calendar/js/jquery/jquery-ui-custom', '/cake_calendar/js/fullcalendar.min' )); ?> </head> <body> <?php echo $content_for_layout;?> </body> </html> |
Cuối cùng, bạn chép các files css và js tôi đính kèm vào app/plugins/cake_calendar/webroot/css và app/plugins/cake_calendar/webroot/js
Bây giờ mở trình duyệt ra và gõ thử: http://localhost/test/cakephp1.3.2/cake_calendar
Nếu xuất hiện giao diện như sau nghĩa là bạn đã viết thành công plugins cake_calendar
Hãy nhìn lại tổng quan thư mục cake_calendar (cũng là tên của plugin), bạn thấy rằng cake_calendar như một ứng dụng CakePHP hoàn chỉnh (có đầy đủ cấu trúc thư mục như CakePHP ban đầu). Bây giờ bạn chép thư mục cake_calendar này bỏ sang một ứng dụng CakePHP khác và truy cập tới thì kết quả cũng tương tự như trên. Điều này có nghĩa là plugin hoạt động gần như độc lập và có thể chạy trên nhiều ứng dụng khác nhau viết trên nền CakePHP. Chắc hẳn bạn đã thấy rõ công dụng của plugin sau bài viết này! Chúc các bạn ứng dụng thành công!
Tôi có đính kèm code hoàn chỉnh của plugin cake_calendar, bạn thử download về và giải nén cho vào app/plugins, chạy trên trình duyệt xem có kết quả không nhé, sau đó bạn tự mình làm lại xem sao.
7 Comments to “Cách viết plugin cho CakePHP”
Post comment
Bài viết mới
- CakePHP version 1.3.12
- Tạo chuỗi ngẫu nhiên với 1 dòng code
- Kỹ thuật “bit field” trong phân quyền
- Làm việc với File và Folder
- CakePHP 1.3.8
- CakePHP 1.3.7 Released
- Ajax trong CakePHP
- Tạo và load file config trong CakePHP
- Làm site đa ngôn ngữ với CakePHP (Phần 1)
- CakePHP 1.3.6 and 1.2.9 released
- CakePHP 1.3.5 released
- Type hinting trong PHP
- CakePHP ra phiên bản mới 1.3.4
- Tích hợp Zend framework vào CakePHP
- Tạo virtual host trên local
- Sử dụng Acl trong cakephp – Phần 2
- Sử dụng Acl trong cakephp – Phần 1
- Sinh code tự động với cake console
- Tự động xóa record ở bảng con khi reocord ở bảng cha bị xóa
- Xác thực người dùng với component Auth
Thảo luận mới
- admin on Sử dụng session trong CakePHP
- admin on Sử dụng session trong CakePHP
- hanh on Sử dụng session trong CakePHP
- bich yen on Sử dụng session trong CakePHP
- admin on Sử dụng session trong CakePHP
- bich yen on Sử dụng session trong CakePHP
- bich yen on Sử dụng session trong CakePHP
- admin on Sử dụng Acl trong cakephp – Phần 1
- admin on Sử dụng session trong CakePHP
- Bich Yen on Sử dụng session trong CakePHP
TAG
Calendar
Lưu trữ
- September 2011 (3)
- July 2011 (1)
- March 2011 (1)
- February 2011 (1)
- November 2010 (4)
- October 2010 (1)
- September 2010 (2)
- August 2010 (9)
- July 2010 (9)
- June 2010 (22)
Blogroll
- Bakery
- Biển đảo Việt Nam
- CakePHP
- CakePHP Google Group
- CakePHP Manual
- CakePHP Questions
- Diễn đàn CakePHP VN

admin


sao minh lam theo huong dan o tren ma khong thay hien thi j het vay?
hay la do duong dan http://localhost/cake/cake_calendar
minh de duong dan nhu the co dung khong?
ban nao chi minh voi!
Có báo lỗi gì cụ thể không bạn? Đường dẫn thì tùy vào nơi đặt code của bạn thôi.
xin chào admin. anh có thể nói thêm về vấn đề Views và Controller: ví dụ như trong Controller có file: cake_calendar_controller thì trong Views phải có thư mục:cake_calendar ha anh, mình có thể đổi thư mục cake_calendar thành cakecalendar duoc không anh, em cảm ơn anh nhiều.
Nếu muốn đổi tên thư mục hoặc file của view, trong controller, bạn phải dùng thêm hàm
$this->render(path_to_view);
để chỉ đúng file mà controller sẽ lấy để render
cho minh xem cau truc thu muc cua ban
sao lai la : http://localhost/test/cakephp1.3.2/cake_calendar (sao lai co test)
minh dung cakephp 2 .0.4 thi phai sua doi nhu nao nhi
test là thư mục trong www, bạn có thể để ở nơi khác tùy bạn, đâu nhất thiết phải có test