Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/01/2007, 09:38
eturi
 
Fecha de Ingreso: enero-2002
Ubicación: Bilbao, Vizcaya
Mensajes: 37
Antigüedad: 22 años, 4 meses
Puntos: 2
Mi Front Controller

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:

Código:
{$_content}
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