Menúes
Esta página describe el procedimiento a seguir para crear un menú multinivel.
Categorías
La clase Category
expone el método estático menu
que permite generar un menú multinivel de categorías activas usando listas anidadas:
<ul>
<?=Category::menu()?>
</ul>
Adicionalmente, puede restringirse la cantidad de niveles a generar indicándolo con un valor numérico en el primer parámetro. Por ejemplo, para crear un menú de dos niveles como máximo:
<ul>
<?=Category::menu(2)?>
</ul>
Por último, pueden crearse menúes con código personalizado utilizando la clase Category
. Se recomienda crear una clase en el directorio classes
del template para dicho fin, por ejemplo:
<?php
class MiTienda {
static function menu($maxLevels = null, $parent = null, $level = 1) {
global $_db, $_cache, $_front, $_category;
if($parent != null || !$_cache->start('categorymenu'.$maxLevels.SOURCE)) {
$c = new Category($_db);
$c->filter('visible', 1);
$c->filter('parentId', $parent);
$n = $c->fetch();
if($n == 0)
return '';
if($parent != null)
echo '<ul class="submenu">';
while($c->getNext()) {
echo '<li><a href="'.$c->getURL().'" title="'.$c->get('name').'" '.($_front->id() == 'category' && $_category->get('id') == $c->get('id') ? 'class="active"' : '').'>'.$c->get('name').'</a>';
if($maxLevels == null || $level < $maxLevels)
MiTienda::menu($maxLevels, $c->get('id'), $level+1);
echo '</li>';
}
if($parent != null) {
echo '</ul>';
} else {
$_cache->end();
}
}
}
}
?>
De esta manera puede modificarse el HTML del menú según las necesidades de cada tienda. Puede invocarse en el layout sin necesidad de precargar la clase manualmente:
<ul>
<?=MiTienda::menu()?>
</ul>
Menúes
De forma análoga, pueden crearse menúes usando el método output
de la clase Menu
. Todo el comportamiento descripto en el apartado anterior aplica también a este tipo de menúes:
<ul>
<?=Menu::output()?>
</ul>
Páginas
Pueden crearse menúes de páginas activas usando el método menu
de la clase Page
. En este caso los menúes son siempre de un único nivel:
<ul>
<?=Page::menu()?>
</ul>
Last updated
Was this helpful?