[KOHANA] Bài 2 Thực hiện kết xuất template

View là thành phần thứ 2 trong mô hình MVC. Thành phần này dùng để hiển thị giao diện của trang web. Như vậy phần giao diện của Website sẽ được thực hiện tại đây. hãy cùng tìm hiểu về View

Ở bài trước chúng ta đã hiểu controller dùng để thực hiện các xử lý... Bài này chúng ta liên kết để xuất ra giao diện.

Ở controller có  một Controller_Template dùng để điều hướng ra giao diện như vậy ta sẽ tạo một controller kế thừa từ nó  extends Controller_Template

bên cạnh đấy trong controller hiện tai cần sử dụng 1 biến $template để điều hướng đến view

 public $template = 'tên view'; :  đồng thời trong View cần có một file php với cùng tên view.

để chuyển giá trị từ control ra view thì dùng  $this->template->tên biến=giá trị

Thôi bây giờ thực hiện thôi.

vào lại controller

 <?php

class Controller_Home extends Controller

{

        public function action_index()

       {

               $this->response->body('Welcome');

       }

}

thay đổi

<?php

class Controller_Home extends Controller_Template

{

public $template = 'homepage';//chuyển ra view homepage.php
public function action_index()

       {

              $this->template->message = 'chào mừng đến với hoaiphan.com';//chuyển biến $message qua view

       }

}

Bây giờ qua thư mục  application/views/ tạo tập tin homepage.php  đây là tên của view với nội dung 

 

<html>

<head> <title>chúng ta học kohana!</title> <style type="text/css"> body {font-family: Georgia;} h1 {font-style: italic;}

</style>

</head> <body> <h1><?php echo $message; ?></h1> <p>Cố gắng sẽ thành công</p> </body> </html>

ở đây chú ý  <h1><?php echo $message; ?></h1> tại đây mục đích là xuất biến trong controller ra view

Thử nghiệm thôi bây giờ kết quả cũng vậy . Tuy nhiên chúng ta đã sử dụng kết hợp view với controller rồi đấy

(Còn tiếp)

 

Sử dụng controller template với Kohana
Trong post trước đó, mình đã giới thiệu cách cài đặt và viết những web page đơn giản với Kohana Framework. Nhưng để thuận tiện hơn trong vấn đề render các view thì chúng ta lại nghĩ đến việc sử dụng một template, với những thành phần đã được định sẵn, giúp có thể thay đổi bố cục của website một cách dễ dàng.

Để thực hiện được điều đó, chúng ta sẽ sử dụng class "Controller_Template" của kohana thay vì sử dụng class Controller theo như cách thông thường.

Class Controller_Template có vai trò gì ?
Thực ra class Controller_Template vẫn kế thừa từ class Controller của kohana, nhưng khi sử dụng class Controller_Template chúng ta phải chỉ định $template mà chúng ta sẽ sử dụng, $template ở đây nôm na chính là tên file view cho chính controller của chúng ta.
Ví dụ (cho thêm vài dòng code để dễ hiểu nhé):
class Controller_Welcome extends Controller_Template{
public $template = 'mytemplate';

public function action_index(){
$this->template->content = 'Hi there !';
}
}
?>
Bên trên mình đã kế thừa class Controller_Template cho controller Welcome. Khi sử dụng controller template thì chúng ta cần định nghĩa lại biến $template, nếu không giá trị mặc định sẽ là 'template', trong trường hợp này mọi action bên trong controller welcome sẽ sử dụng file template là 'mytemplate.php' trong folder views của kohana. Trong 1 action mình chỉ cần sử dụng biến $template như là một đối tượng view bình thường (vì controller template đã khỏi tạo biến template cho chúng ta).
Tại sao lại phải sử dụng class Controller_Template
Cái chính khi sử dụng template là chúng ta muốn có một bố cục rõ ràng, không tốn quá nhiều code lặp đi lặp lại nhiều lần.
Mình sẽ đi vào vấn đề chính đó là sử dụng Controller_Template một cách sao cho có hiệu quả nhất, có thể cách của mình vẫn không là cách hay nhất nhưng các bạn vẫn có thể xem đó như là để tham khảo, với kohana khi bạn đã nắm được các api của nó bạn có thể làm được nhiều thứ hơn bạn tưởng :))

Mình sẽ không kế thừa trực tiếp controller_template cho các controller của mình, thay vào đó mình sẽ sử dụng 1 class riêng gọi là Controller_Layout, class này sẽ kế thừa Controller_Template, và tất cả controller của mình sẽ kế thừa từ Controller_Layout này.

Code class Controller_Layout
class Controller_Layout extends Controller_Template
{
/**
* Template file name
*/
public $template = 'layout';

protected $_scripts = array();
protected $_styles = array();

public function __construct($req, $res)
{
parent::__construct($req, $res);
}

public function before()
{
parent::before();

/**
* Init your request
*/
$this->template->title = 'Kohana Framework';

$this->template->header = View::factory('header');
$this->template->footer = View::factory('footer');
$this->template->content = View::factory('content');
}

public function after()
{
/**
* Do stuff after invoked your action
*/
$scripts = array(
'jquery.min.js',
'core.js'
);

$styles = array(
'reset.css',
'common.css'
);

/**
* Append the script & style to template
*/
$this->template->scripts = array_merge($scripts, $this->_scripts);
$this->template->styles = array_merge($styles, $this->_styles);

parent::after();
}

public function set_content(View $content)
{
$this->template->content = $content;
}
}

Nội dung của $template 'layout.php'



<?php echo $title; ??>




Code của một controller:

class Controller_Welcome extends Controller_Layout {

public function action_index()
{
$this->_scripts = array(
'welcome.js'
);

$this->set_content(View::factory('main'));
}
} // End Welcome

Với Controller_Layout chúng ta có thể định nghĩa nhưng stylesheet hoặc javascript cần được load trong 1 trang và chúng ta vẫn có thể đưa thêm những css hay javascript khác cho từng controller hay action cụ thể nào đó.
http://vntrace.blogspot.com/2011/12/su-dung-controller-template-voi-koha...