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:
En este index.php cargo la BD, variables de sesión etc.RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} !(index\.php|robots\.txt) [NC] RewriteRule ^(.*)$ /index.php [L]
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:
Si el usuario no indica ninguna página, se tomará "inicio" como predeterminada:$url = explode('/', $_SERVER['REDIRECT_URL']);
Código:
Si existe un PHP para esa página, donde se asignan variables específicas, se incluye así:$_page = $url[1]?$url[1]:'inicio';
Código:
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í:if (file_exists("$_page.php")) include_once "$_page.php";
Código:
$_content = $form->toHtml();
Código:
Ahora voy con las asignaciones de variables:if (file_exists("$_page.tpl")) $_template = "$_page.tpl"; else $_template = '_default.tpl';
Código:
Y muestro la plantilla principal$smarty->assign('_template', $_template); $smarty->assign('_content', $_content);
Código:
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í:$smarty->display("_layout.tpl");
Código:
En el caso que la página tenga un TPL de distinto nombre, DENTRO del PHP se asigna la variable $_template<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>
Y por ultimo, lo que tenemos en _default.tpl es:
Código:
Ahora bien, la pregunta es: Como puedo utilizar esta estructura sin tener que deshabilitar el caché del smarty ? Esto sólo funciona con {$_content}
Código:
lo que implicaría estar usando el smarty por gusto. Cuando lo pongo a true, siempre se visualiza la misma página.$smarty->caching = false;
Gracias de antemano