Estimados amigos.
Tengo unas cuantas dudas de como realizar las actualizaciones del template principal del sitio ( default.phtml). cuando selecciono una opcion del menu principal...
la situacion es : Tengo un template que como dije arriba es el predeterminado de la aplicacion, el cual muestra dos partial uno para el menu principal de la aplicacion y el otro para el menu secundario (submenu, dependiente del principal ), estos dos partial consultan una tabla "menus" que es donde estas alojadas las opciones de los dos menus ( principal y secundario) dependiendo de un parametro que es enviado desde el controlador que es el id del menu principal elegido.
Llamado de los partial en default.phtml:
<?php View::partial('menuPrincipal',array("parent"=>"$menu_sel","seleccion"=>"$selected"));?>
$menu_sel : id del menu padre o principal.
$selected : valor que permite cambiar el color o mostrar una "marca" al menu seleccionado.
<?php View::partial('menuLateral',array("parent"=>"$menu_sel","seleccion"=>"$selected"));?>
codigo de los partial :
<?php
if (!isset($parent)) $parent = 1;
if (!isset($seleccion)) $seleccion = 1;
?>
<?php foreach (Load::model('menus')->getMenus($parent) as $item) :?>
<?php if($item->id == $seleccion) { ?>
<?php
echo "<div class='navigationLink'>".html::link("index/index"."/".$item->id,$item->nombre,array("class"=>"activeLink"))."
".""; ?>
<?php } else { ?>
<?php echo "<div class='navigationLink'>".html::link("index/index"."/".$item->id,$item->nombre).""; ?>
<?php } ?>
<?php endforeach; ?>
el controlador :
class IndexController extends ApplicationController
{
public $selected;
public $menu_sel;
public function index($menuid = 1)
{
// echo $menuid;
switch ($menuid) {
case 2:
$this->selected = 2;
$this->menu_sel = 2;
View::template('default');
Router::redirect('afiliados');
break;
}
}
}
La logica seria que dependiendo de que opcion elija del menu principal , se actualice el menu secundario con las opciones correspondientes y ademas se nuestre la vista del controlador elegido ( que para este caso se corresponde con cada opcion del menu principal)
En este link esta una parte del codigo del template , los partial y el controlador:
http://pastebin.com/s94WWdyRAqui esta una imagen del template para tener una idea grafica del asunto :
http://imageshack.us/photo/my-images/810/menusy.png/.
Nota: Estoy usando la beta 2 del framework. gracias por su tiempo.
Comentarios
Lo que hice fue modificar el "default.phtml", despues de cargar los css y javascript, solo puse View::content(), dentro del del template y en cada vista recreaba toda la pagina, con las modificaciones, pertinente para cada caso, es decir repito todo el codigo del template en cada vista de la aplicacion, les dije que no era la mas adecuada, que no cumple con la mayoria de los estandares actuales y bla, bla, pero es la que me saco de apuros lo mas rapido posible.
codigo default.phtml.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
' />
Documento sin tÃtulo
<?php Tag::css('discuss') ?>
<?php Tag::css('tablecloth/tablecloth') ?>
<?php echo Html::includeCss() ?>
<?php Tag::js('jquery/jquery-1.4.2.min') ?>
<?php Tag::js('style') ?>
<?php Tag::js('jquery/ui/ui.core'); ?>
<?php Tag::js('themes/ui-lightness/jquery.ui.all'); ?>
javascript/tablecloth/tablecloth.js">
<?php View::content()?>
Con esto me permite definir en cada controlador / accion, de la aplicacion las variables que cargan la opcion de menu seleccionada, y tambien del submenu, en cada uno de los partial , para ser visualizados / actualizados en cada vista.
En mi humilde opinion , se deberia tratar de mejorar o encontrar tecnicas y procedimientos para tratar de automatizar lo mas posible, este tipo de situaciones, en este caso el menu, que no siempre tiene que ser tan dinamico como lo es un menu de jquery, u otras tecnicas de javascript, en mi caso es una aplicacion de una intranet corporativa , en la que se busca mas resultados rapidos que beneficios visuales, ojo!! , no por esto estoy diciendo que jquery es lento o complicado, o que no se pueda usar para otras areas de la aplicacion, de echo, estoy cargando las librerias de jquery en la aplicacion.
bueno, si alguien tiene interes de dejar o sujerir alguna forma alternativa de hacer esto , por favor la postea.
Muchas Gracias.
un abrazo a todos.