Hola,
Les explico como estoy desarrollando las aplicaciones web con smarty+PEAR:
Tengo un front controller; index.php por el que obligo a todas las páginas a pasar, utilizando el mod_rewrite, algo así como:
Código:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !(index\.php|robots\.txt) [NC]
RewriteRule ^(.*)$ /index.php [L]
En este index.php cargo la BD, variables de sesión etc.
Luego, para evitar tener que repetir "headers y footers" por todos lados, hago una captura de la url, llamo al PHP correspondiente, si hubiere, y asigno el TPL a mostrar, asi:
Código:
$url = explode('/', $_SERVER['REDIRECT_URL']);
Si el usuario no indica ninguna página, se tomará "inicio" como predeterminada:
Código:
$_page = $url[1]?$url[1]:'inicio';
Si existe un PHP para esa página, donde se asignan variables específicas, se incluye así:
Código:
if (file_exists("$_page.php")) include_once "$_page.php";
Ahora incializo la variable $_template, si no existe, ocurre de manera similar a la pagina PHP, además para el caso de generación de formularios, se utilizaría la variable $_content. P. Ej, estoy utilizando el HTML_Quick_Form de PEAR, la declaración sería así:
Código:
$_content = $form->toHtml();
Código:
if (file_exists("$_page.tpl"))
$_template = "$_page.tpl";
else
$_template = '_default.tpl';
Ahora voy con las asignaciones de variables:
Código:
$smarty->assign('_template', $_template);
$smarty->assign('_content', $_content);
Y muestro la plantilla principal
Código:
$smarty->display("_layout.tpl");
De esta manera consigo tener todo un diseño en un solo TPL, y para cada pagina, un PHP si lo necesita y un TPL si lo necesita. El código de _layout.tpl sería mas o menos así:
Código:
<head>
<title>Layout</title>
</head>
<body>
<div class="header">Content for class "header" Goes Here</div>
<div class="sidebar">Content for class "sidebar" Goes Here</div>
<div class="content">{include file="$_template"}</div>
<div class="footer">Content for class "footer" Goes Here</div>
</body>
</html>
En el caso que la página tenga un TPL de distinto nombre, DENTRO del PHP se asigna la variable $_template
Y por ultimo, lo que tenemos en _default.tpl es:
Ahora bien, la pregunta es: Como puedo utilizar esta estructura sin tener que deshabilitar el caché del smarty ? Esto sólo funciona con
Código:
$smarty->caching = false;
lo que implicaría estar usando el smarty por gusto. Cuando lo pongo a true, siempre se visualiza la misma página.
Gracias de antemano