Usando XSLT como camada View no Kohana
Comecei a pouco a me aprofundar na framework Kohana 3. Como resultado dos meus estudos iniciais criei um modulo para utilização de template XSL na mesma. O modulo possibilita a utilização de um template ou uma view comum.
Basicamente funciona da seguinte forma:
Adicione o modulo XSL a pasta module.
Modifique o arquivo bootstrap.php dentro da pasta application adicionando o modulo XSL, dessa forma:
Kohana::modules(array( ... 'xslt' => MODPATH.'xslt' // Template XSLT ... ));
Adicione uma rota home ao bootstrap.php, dessa forma:
Route::set('default', '((/(/)))')
->defaults(array(
'controller' => 'home',
'action' => 'index',
));
Na pasta application/class/controller crie um arquivo layout.php, com esse conteúdo:
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Layout extends Controller_Xslt
{
public $template = 'layout';
public function before()
{
parent::before();
if ($this->auto_render)
{
// Define global vars
$this->template->kanema = 'http://www.kanema.com.br/';
$this->template->title = '';
$this->template->content = '';
$this->template->media = Array(
"script" => Array()
);
}
}
public function after()
{
if ($this->auto_render)
{
//
}
parent::after();
}
} // END Layout
E uma outra controller chamada home.php com o conteúdo:
<?php
class Controller_Home extends Controller_Layout
{
public function action_index()
{
$this->template->content = "home";
$this->template->title = 'Home';
$this->template->media = Array(
"script" => Array(
"http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"
)
);
$this->template->items = Array(
"item" => Array
(
Array(
"name" => "Teste 1",
"value" => "10"
),
Array(
"name" => "Teste 2",
"value" => "20"
),
Array(
"name" => "Teste 3",
"value" => "30"
),
Array(
"name" => "Teste 4",
"value" => "40"
)
)
);
}
}
?>
Agora na pasta application/views crie um arquivo chamado layout, com o conteúdo:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset={kohana/charset}" />
<base href="{kohana/base}" />
<xsl:for-each select="media/script">
<script src="{text()}" type="text/javascript"></script>
</xsl:for-each>
</head>
<body>
<xsl:include href="{content}" />
</body>
</html>
E uma outra view com o nome de home.php, dessa forma:
<xsl:if test="items"> <ul> <xsl:for-each select="items/item"> <li><xsl:value-of select="name" /> - <xsl:value-of select="value" /></li> </xsl:for-each> </ul> </xsl:if>
Pronto!
Você deve provavelmente irá obter o seguinte resultado:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <base href="http://localhost/kohana/" /> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script> </head> <body> <h1>Home</h1> <ul> <li>Teste 1 - 10</li> <li>Teste 2 - 20</li> <li>Teste 3 - 30</li> <li>Teste 4 - 40</li> </ul> Desenvolvido por <a href="http://www.kanema.com.br/" title="Eduardo Pacheco">Eduardo Pacheco</a> </body> </html>
O primeiro teste foi esse, caso deseje baixar o código demo click aqui:
Baixar Modulo XSL