Docstoc

Model View Controller trong Joomla

Document Sample
Model View Controller trong Joomla Powered By Docstoc
					Tổng quan về mô hình Model View Controller trong Joomla 1.5




Theo như sơ đồ trên thì MVC bao gồm các phần sau:
- Page.
- Controller.
- Model.
- Toolbar.
- View.
- Layout.
Trong phạm vi bài này, để các bạn hiểu thêm về cách thức hoạt động của MVC. chúng ta sẽ
tham khảo mô hình MVC đơn giản không có thành phần Toolbar.
Tất cả các tập tin đề cập trong bài này đều chứa trong thư mục Back - End (<tên cài đặt
joomla>\administrator\components\com_demo).
I.Page
Đây là trang sẽ thực thi đầu tiên của component, nhiệm vụ là load controller. Có tên dạng
admin.<com_name>.php.
ví dụ: theo như component chúng ta đang làm thì nó sẽ có tên là admin.demo.php.
Nội dung tập tin.

1.defined( '_JEXEC' ) or die( 'Restricted access' );
2.require_once(JPATH_COMPONENT.DS.'controller.php');
3.echo"<div><h3>Development Demo By Phạm Trương Hồng Ngân.
Email:phamtruonghongngan@yahoo.com</h3></div>";
4.$controller=new DemoController(array('default_task' => 'display'));
5.$controller->execute('abcd');
2. Load tập tin chứa lớp controller.
4. khởi tạo đối tượng controller và tham số là phương thức mặc định sẽ thực thi.
5. controller thực thi phương thức, hàm này có tham số là phương thức cần thực thi, nếu tìm
không thấy phương thức này trong lớp controller thì phương thức mặc định khi khởi tạo sẽ
được thực thi.

II. Model

Các model đều chứa trong <tên cài đặt
joomla>\administrator\components\com_demo\models.
Tên model tuỳ ý.
Nội dung :

defined('_JEXEC') or die('Restrict Access');
1.jimport('joomla.application.component.model');
2.class ModelDemo extends JModel
3.{ var $_records=null;
4.function getList()
5.{if(!$this->_records)
6.{$query="select * from demo_list";
7.$this->_records=$this->_getList($query,0,0);}
8.return $this->_records;
9.}
10.function getTen()
11.{
12.if(!$this->_records)
13.{$query="select * from demo_list limit 0,10";
14.$this->_db->setQuery($query);
15.$this->_records=$this->_db->loadObjectList();}
16.return $this->_records;
17.}
18.}
2. Load tập tin khai báo lớp JModel. vì các Model chúng ta tạo đều extends JModel.
3. Khai báo model, tên model được đặt theo nguyên tắc : <tiền tố><tên model>, trong ví dụ
này, tiền tố là Model,tên là Demo.
chú ý: <tên model> cũng là tên tập tin chứa model.trong ví dụ này,tập tin tên là
demo.php.
4. Khai báo biến chứa dữ liệu.
5->19. Khai báo 2 hàm lấy dữ liệu getList() và getTen().
III. View
Các view đều chứa trong thư mục <tên cài đặt joomla>\administrator\components\com_demo,
và mỗi view lại chứa
trong các thư mục tương ứng với tên của nó. ví dụ: view tên all chứa tròn thư mục all.


1.defined('_JEXEC')or die('Restricted Access');
2.jimport('joomla.application.component.view');
3.class DemoViewAll extends JView
4.{
5.function display($tpl=null)
6.{ $model=$this->getModel();
7.//$list=$model->getList();
8.$listall=$model->getTen();
9.$this->assignRef('list',$listall);
10.parent::display($tpl);
11.}
12.}
2. Load tập tin khai báo lớp JView. vì các View chúng ta tạo đều extends JView.
3. Khai báo view, tên view được đặt theo nguyên tắc : <tiền tố><tên view>, trong ví dụ này,
tiền tố là DemoView,tên view là All.
5. Cài đặt hàm display, hàm luôn có tham số là $tpl=null.
6. Lấy model đã đựoc controller đặt cho.
7. Gọi phương thức getList cài đặt trong model để điền dữ liệu cho layout.
8. Gọi phương thức getTen cài đặt trong model để điền dữ liệu cho layout.
- chú ý : trong 1 view có thể gọi nhiều phương thức của model để điền dữ liệu.Trong ví dụ
này các bạn chỉ cần run 1 trong 2 phương thức.
9. Gán biến list trong layout tham chiếu đến $listall.
Hàm assignRef() có 2 tham số.
- Tham số 1 : biến cần gán tham chiếu -> chúng ta sẽ dùng biến này trong layout.
- Tham số 2 : biến tham chiếu.
Trong 1 view bạn có thể Gán tham chiếu nhiều biến.
10.gọi hàm trình bày của lớp cha.

IV. Layout

Các layout của mỗi view đều chứa trong thư mục tmpl của view đó.Ví dụ: view của chúng ta
là all thì các layout sẽ chứa trong <tên cài đặt
joomla>\administrator\components\com_demo\views\all\tmpl

Tên tập tin chứa layout tuỳ ý. Sẽ được gọi trong $view->setLayout('all') của controller. nếu
đặt tên tập tin chứa layout là xyz thì controller sẽ sửa lại như sau $view->setLayout('xyz').
Nội dung :

defined('_JEXEC') or die('restricted Access');?>
<fieldset><legend>Dữ liệu trong bảng demo_list</legend>
<table class='adminlist'>
<thead><tr><th
class='title'>Id</th><th>Name</th><th>Age</th><th>State</th></tr></thead>
<?$k = 0;
for ($i=0, $n=count( $this->list ); $i < $n; $i++)
{$l=$this->list[$i];?>
<tr class='row<?=$k;?>'>
<td><?=$l->id?></td>
<td><?=$l->name?></td>
<td><?=$l->age?></td>
<td><?=$l->state?></td></tr>
<?$k = 1 - $k;}?>
</table>

Trong phần này chúng ta sẽ dùng biến $this->list mà trong view chúng ta đã tham chiếu đến
$listall để điền dữ liệu.

V. Controller

Tập tin chứa khai báo của controller. có thể đặt tên bất kỳ.
Nội dung:

1.defined('_JEXEC')or die('Restricted Access');
2.jimport('joomla.application.component.controller');
3.class DemoController extends JController
4.{
5.function __construct( $default = array() )
6.{ parent::__construct( $default );}
7.function display()
8.{$document=&JFactory::getDocument();
9.$viewType=$document->getType();
10.$view=&$this->getView('all',$viewType,'DemoView');
11.$model=&$this->getModel('demo',"Model");
12.if(!JError::isError($model))
13.{$view->setModel($model,true);}
14.$view->setLayout('all');
15.$view->display();
16.}
17.}
2. Load tập tin khai báo lớp JController. vì các controller chúng ta tạo đều extends
JController.
3. Bạn có thể sử dụng bấy kỳ tên nào cho controller.
5.6. hàm khởi tạo controller. có tham số là các phương thức mặc định sẽ thực thi.
7. Phương thức display.
8. Lấy đối tượng document của joomla.
9. Lấy kiểu của tài liệu. (joomla hỗ trợ nhiều dạng tài liệu: html, pdf..) mỗi kiểu tài liệu sẽ ứng
với 1 view.
10. Lấy view cần trình bày qua hàm getView(), hàm có 3 tham số:
- Tham số 1 là tên view (sau phần tiền tố).
- Tham số 2 là kiểu view.
- Tham số 3 là Tiền tố trong tên view.
kết hợp 3 tham số trên ta có thể tìm ra tập tin chứa view như sau:
- Thư mục chứa tập tin là <tên view> => all (thư mục này trong thư mục views)
- Tập tin chứa là view.<kiểu view>.php => view.html.php (tập tin chứa trong thư mục all)
- Tên view là <tiền tố><tên view> => demoViewAll
11. Lấy model cần sử dụng qua hàm getModel(), hàm có 2 tham số:
- Tham số 1 là tên model (sau phần tiền tố).
- Tham số 2 là Tiền tố.
Theo như trên thì thông tin về tập tin chứa model như sau:
- Tập tin chứa là <tên model>.php =>demo.php (tập tin chứa trong thư mục models)
- Tên model là <tiền tố><tên model> => ModelDemo
12.13. Nếu không có lỗi trong quá trình tìm Model thì Đặt model cho view là model vừa lấy
đựơc.
14. Đặt layout sẽ hiển thị cho view.(trong ví dụ này layout chứa trong thư mục <tên cài đặt
joomla>\administrator\components\com_demo\views\all).
15. Gọi phương thức display trong view (lấy dữ liệu trong model và điền vào layout).




tham khảo các phương thức khác của model, controller, view trong
\libraries\joomla\application\component

				
DOCUMENT INFO