sábado, 23 de outubro de 2010

CodeIgniter + Xajax + Smarty

No post de hoje farei uma breve introdução de como
integrar o framework CodeIgniter com Ajax (mais especificamente o xajax)
e também uma template php (Smarty).
Depois de brincar um pouco com o CodeIgniter essa semana
resolvi integra-lo com essas duas poderosas ferramentas.
Ao fazer uso do smarty, nossas views ficam muito mais limpas
sem aquele monte de código php junto com html
Entao vamos ao que interessa:

Integrando o smarty
1 - Baixe o arquivo (Smarty 3.0rc4) no site http://www.smarty.net/download.php
Descompacte e renomeie para Smarty, depois mova esta pasta para o diretorio
system/application/libraries

2 - Crie o arquivo Mysmarty.php no diretorio: system/application/libraries

require "Smarty/libs/Smarty.class.php";

/**
* @file system/application/libraries/Mysmarty.php
*/
class Mysmarty extends Smarty
{
function Mysmarty()
{
parent::__construct();

$config =& get_config();

// absolute path prevents "template not found" errors
$this->template_dir = (!empty($config['smarty_template_dir']) ? $config['smarty_template_dir']
: BASEPATH . 'application/views/');

$this->compile_dir = (!empty($config['smarty_compile_dir']) ? $config['compile_dir']
: BASEPATH . 'cache/'); //use CI's cache folder

if (function_exists('site_url')) {
// URL helper required
$this->assign("site_url", site_url()); // so we can get the full path to CI easily
}
}

function view($resource_name, $cache_id = null) {
if (strpos($resource_name, '.') === false) {
$resource_name .= '.php';//.tpl
}
return parent::display($resource_name, $cache_id);
}
} // END class smarty_library
?>




Agora vamos ao xajax.
1 - Va ate o site http://www.xajax-project.org/en/download/ e baixe o arquivo, descompacte renomeie para
xajax e mova-o para system/libraries

2 - renomeie o arquivo xajax.inc.php para xajax.php e mova-o para fora
da pasta xajax ficando em system/libraries

3 - va ate a linha que contem public function __wakeup()
e troque o conteudo de $sLocalFolder
por $sLocalFolder = dirname(__FILE__).'/xajax/xajax_core';

4 - Agora vamos criar um controller generico para o nosso xajax
com o nome xajaxBase.php


class xajaxBase extends Controller {

var $ajaxFuncPrefix = 'ax';
function __construct()
{
parent::controller();
$this->registerFunctions();
}
function registerFunctions()
{
$methods = get_class_methods($this);
foreach ($methods as $m)
{
$p = $this->ajaxFuncPrefix;
if (preg_match("/^{$p}[A-Z]/", $m))
{
$m2 = preg_replace("/^{$p}([A-Z])/e", "strtolower('$1')", $m);
$this->xajax->register(XAJAX_FUNCTION,array($m2, &$this, $m));
}
}
$this->xajax->processRequest();
}
}

Agora todas os controllers terao que extender o xajaxBase e nao mais Controller
Exemplo de como ficar nossos controllers

require_once('xajaxBase.php');
class Teste extends xajaxBase {

function Teste()
{
parent::__construct();
}
function axMyFunction()
{
$objResponse = new xajaxResponse();
$objResponse->alert('xajax instalado');
$objResponse->assign('nome', 'value', "juca pirama");
return $objResponse;
}

function index()
{
$data['xajax_js'] = $this->xajax->getJavascript(/*$sJsURI=$_SERVER['DOCUMENT_ROOT'].'ProjectName/system/libraries/xajax'*/);
$data['test'] = "Hello Smarty";

//aqui enviamos pro smarty renderizar
$this->mysmarty->view('welcome_message',$data);

}

}



No arquivo welcome_message.php que esta na view,
não se esqueça de inserir no inicio da view o seguinte trecho
de código {$xajax_js}


-- welcome_message.php --
{$xajax_js}

"



Nome



Testando o smarty:: {$test}
"

Nenhum comentário:

Postar um comentário