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:

themes/mi_tienda/classes/MiTienda.php
<?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>

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