20 de setembro de 2010, às 2:37

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.

Baixar Modulo XSL

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

Deixe um comentário

*