Menús múltiples

show_menu2, versión 4.9 x

Show_Menu2 es un fragmento de código para CMS WebsiteBaker. Desde WebsiteBaker 2.7 se incluye con el CMS.
La antigua función show_menu se reemplaza y amplía por completo con show_menu2. Todos los datos necesarios para crear el menú se generan mediante una única consulta de base de datos. Mediante amplias posibilidades de ajuste del código HTML generado, todos los tipos de menú posibles (listas, migas de pan, mapas de sitio, etc.).) puede generarse.

  • Instalación
  • Usando Show_Menu2
  • FAQ
  • Función
  • Salida HTML
  • Parámetro
  • Opciones avanzadas
  • Cadenas de formato
  • Formato condicional
  • Formateador

INSTALLATIONup

Dado que show_menu2 suele estar presente en WebsiteBaker, no se requiere instalación. Si, contrariamente a lo esperado, no existe, puede descargarlo aquí.

Usando SHOW_MENU2up

Para usar show_menu2 tienes que modificar la plantilla donde quieres que aparezca el menú. Nota: Si se reemplazan llamadas de menú antiguas, también se deben usar los nuevos parámetros correspondientes que show_menu2 necesita.

En la mayoría de los casos, la llamada estándar con al menos 4 parámetros de show_menu2 es suficiente. En este caso, se utilizan los valores predeterminados, esto crea un menú que muestra la página actual y las subpáginas de la página actual:

show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM);

Nota: la llamada a show_menu2 es PHP y normalmente debe estar encerrada en caracteres de código PHP (a menos que la llamada ya esté dentro de código PHP):

 <?php show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM); ?>

Este menú predeterminado ya crea un menú completo en forma de lista con varias clases que permiten formatear fácilmente usando CSS. Por ejemplo, la clase «menu-current» se añade a la etiqueta <li> del elemento de menú actual. Además, cada elemento de menú de los subítems contiene la clase «menu-expand». Esto permite crear reglas CSS muy diferenciadas para cada elemento de menú.
Por ejemplo:

li.menu-expand { font-weight: bold; }li.menu-current { background: red; }

La sección «Salida HTML» contiene una descripción detallada de qué clases se asignan a qué elemento. Mediante el uso de diferentes parámetros en la llamada a la función show_menu2, también es posible crear estructuras de menú muy extensas y diferentes. Por ejemplo, para mostrar solo elementos de menú del nivel superior de la estructura de menús, puede usar la siguiente llamada:

show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM);

O, por ejemplo, para mostrar hasta dos subniveles de la página actual:

show_menu2(0, SM2_CURR+1, SM2_CURR+2, SM2_TRIM);

Hay muchas posibilidades para crear diferentes estructuras de menú. Se pueden encontrar numerosos ejemplos en el sitio web de demostración: KLICK

FAQup

P: No soy programador. ¿No hay documentación más sencilla?
A: No, porque esto ya es la documentación simple.

P: ¿Cómo puedo crear un menú desplegable?
A: Esto no tiene nada que ver con show_menu2. Para crear un menú desplegable, solo tiene que ajustar el código CSS de la plantilla respectiva. Los ajustes necesarios se pueden encontrar, por ejemplo, en la plantilla «allcss2» del Repositorio de complementos de WebsiteBaker-> https://addon.websitebaker.org/

P: ¿Por qué desaparece el menú después de haber utilizado la función de búsqueda en una página web multilingüe?
A: Faltan las líneas necesarias en la plantilla utilizada:

1. En el Backend de Administración del BM: Opciones – > Mostrar opciones avanzadas – > Opciones de búsqueda – > Encabezado-inserte la siguiente línea directamente después de la etiqueta <formulario> de apertura:

<input type="hidden" name="referrer" value="" />

2. inserte la siguiente línea en el índice.php de la plantilla utilizada inmediatamente después de la etiqueta <form> de apertura de la búsqueda:

<input type="hidden" name="referrer" value="<?php echo defined('REFERRER_ID')?REFERRER_ID:PAGE_ID;?>" />

P: ¿Multilingüe? Eso suena genial. ¿Cómo lo haces?
A: https://help.websitebaker.org/en/designerguide/multilingual-websites.php

P: Cada vez que se llama a una página, SM2 genera el siguiente mensaje de advertencia:
» error show_menu2: $aOptions no es válido. ¡No se han suministrado banderas del grupo 1!»
A: Los valores incorrectos o un número incorrecto de valores se pasaron a la función.
Consulte la sección PARÁMETROS para ver los valores de bandera correctos para pasar al parámetro $aOptions.

P: ¿Cómo uso una clase/imagen/color/widget diferente para cada entrada de un menú?
A: Utilizar la cadena de formato en la $aItemOpen cadena. Cree una clase o id única para cada elemento de menú y, a continuación, haga referencia a ese elemento en su CSS o Javascript para hacer lo que desee.
Para agregar una clase única para cada elemento del menú (o similar):

"<li><a href="" target="" class=" p"></a>"

… crear elementos de menú como …

<li><a href="/pages/foo/bar.php" target="_top" class="menu-top p45">Top Menu</a>

Haga referencia a esto en su CSS como:

a.p45 { color: red; }

Para agregar un ID único para cada elemento de menú (o similar):

"<li><a href="" target="" class=""></a>"

… crear elementos de menú como …

<li><a href="/pages/foo/bar.php" target="_top" class="menu-top">Top Menu</a>

Haga referencia a esto en su CSS como:

a#p45 { color: red; }

Tenga en cuenta que el ID solo se puede usar si ese menú se genera y muestra una sola vez en la página (porque los ID HTML deben ser únicos dentro de una página).

FUNCTIONup

La llamada completa y los valores de parámetro predeterminados para show_menu2 son los siguientes:

show_menu2( $aMenu = 0, $aStart = SM2_ROOT, $aMaxLevel = SM2_CURR+1, $aOptions = SM2_TRIM, $aItemOpen = '</a>', $aItemClose = '</li>', $aMenuOpen = '', $aMenuClose = '</ul>', $aTopItemOpen = false, $aTopMenuOpen = false);

La sección» Parámetros » contiene una descripción detallada de cada parámetro individual.
Cada parámetro debe utilizarse de forma absolutamente correcta. Las siguientes reglas pueden ayudar:

aMen aMenu = 0 es el mejor valor en la mayoría de los casos.
aSt aStart debe ser un ID de página o un valor que comience por «SM2_».
aM aMaxLevel solo puede obtener valores que comiencen con «SM2_».
Op aOptions excepto en algunos casos especiales, solo se permiten valores que comiencen con «SM2_».
Todos los demás parámetros contienen las etiquetas (HTML) que controlan la salida del menú.
A partir de $aItemOpen se puede pasar a cada parámetro el valor false para obtener el valor predeterminado respectivo.

Esto se puede usar, por ejemplo, para crear una lista numerada, mientras que los valores predeterminados se siguen utilizando para los elementos de menú individuales:

show_menu2(0, SM2_ROOT, SM2_ALL, SM2_ALL, false, false, '<ol>', '</ol>');

Tenga en cuenta: ¡hasta $aOptions incluidos, todos los parámetros deben pasarse explícitamente!

Salida HTML

La salida HTML depende en gran medida de los parámetros que se pasan a la función. Independientemente de esto, las clases posteriores siempre se utilizan para cada menú, por lo que los elementos de menú individuales también pueden tener varias clases si es necesario.

CLASE ASIGNACIÓN
menú superior Solo el primer elemento de menú.
menú-padre Cualquier opción del menú principal.
menú-actual Sólo el elemento de menú de la página actual.
menú-hermano – Todos los «hermanos» de la página actual.
menú-niño Cualquier submenú de la página actual.
menú-expanda Cualquier menú que tiene submenús.
menu-first El primer elemento de cualquier menú o submenú.
menu-last El último elemento de cualquier menú o submenú.
Las siguientes clases solo se agregan si se establece el indicador SM2_NUMCLASS:
menú-N Cada elemento de menú, donde la N representa la profundidad ABSOLUTA del menú, comenzando por 0, del elemento de menú respectivo.
Así que el nivel superior es siempre menu-0, el siguiente nivel es menu-1, y así sucesivamente.
menu-child-N Cada submenú de las páginas actuales, donde la N representa la profundidad RELATIVA del submenú, comenzando por 0.

Ejemplo de salida HTML:

<ul class="menu-top menu-0"> <li class="menu-0 menu-first"> ... </li> <li class="menu-0 menu-expand menu-parent"> ... <ul class="menu-1"> <li class="menu-1 menu-expand menu-first"> ... <ul class="menu-2"> <li class="menu-2 menu-first"> ... <li class="menu-2 menu-last"> ... </ul> </li> <li class="menu-1 menu-expand menu-parent"> ... <ul class="menu-2"> <li class="menu-2 menu-expand menu-current menu-first"> ... ** CURRENT PAGE ** <ul class="menu-3"> <li class="menu-3 menu-child menu-child-0 menu-first"> ... <ul class="menu-4"> <li class="menu-4 menu-child menu-child-1 menu-first"> ... </li> <li class="menu-4 menu-child menu-child-1 menu-last"> ... </li> </ul> </li> <li class="menu-3 menu-child menu-child-0 menu-last"> ... </li> </ul> </li> <li class="menu-2 menu-sibling menu-last"> ... </li> </ul> </li> <li class="menu-1"> ... </li> <li class="menu-1 menu-expand menu-last"> ... <ul class="menu-2"> <li class="menu-2 menu-first menu-last"> ... </li> </ul> </li> </ul> </li> <li class="menu-0 menu-last"> ... </li> </ul> 

PARAMETERup

aMen aMenu

Número de menú. Esto es útil para usar varios menús en una página. El número de menú 0 es el menú predeterminado de la página actual, SM2_ALLMENU devuelve todos los menús utilizados en el sistema.

aSt aStart

Especifica el nivel desde el que se iniciará la creación del menú. En la mayoría de los casos, este será el nivel superior del menú que se mostrará. Se puede utilizar uno de los siguientes valores:

SM2_ROOT+N

Comienza N niveles por debajo del nivel superior, por ejemplo:

SM2_ROOT Comienza en el nivel superior
SM2_ROOT+1 Comienza una capa por debajo de la capa superior
SM2_ROOT+2 Comienza dos niveles por debajo del nivel superior

SM2_CURR+N

Inicia N niveles por debajo del nivel actual, por ejemplo:

SM2_CURR Comienza en la capa actual. Todos los hermanos del nivel actual
SM2_CURR + 1 Inician una capa por debajo de la capa actual con todos los subniveles.

page_id

Utiliza la página con el id de página especificado como elemento principal.
Se muestran todos los submenús de esta página. (El id de página se puede determinar editando la página en el backend de administración, se mostrará en la barra de direcciones del navegador: http://SITE/admin/pages/modify.php?page_id=35

$aMaxLevel

El número máximo de niveles que se pueden mostrar. La pantalla
comienza desde el nivel especificado en aSt aStart, hasta el nivel especificado aquí.
SM2_ALL

Sin restricciones, se muestran todos los niveles.

SM2_CURR+N

Siempre muestra la página actual + N niveles.

SM2_CURR Capa actual (sin subcapa)
SM2_CURR+3 Todos los subniveles padre + actual + 3

SM2_START+N

Siempre comienza en el nivel de inicio + N niveles.
Los niveles se muestran independientemente del nivel en el que se encuentre la página actual.

SM2_INICIAR un solo nivel desde el nivel inicial.
SM2_START + 1 Nivel de inicio + un nivel inferior.

SM2_MAX + N

Muestra un máximo de N niveles desde el nivel inicial.
Las capas por debajo del nivel actual no se muestran.

SM2_MAX Solo el plano de inicio (el mismo efecto que SM2_START)
SM2_MAX+1 El nivel de inicio y un nivel por debajo de él.

$Opciones

Banderas especiales para diferentes opciones de generación de menús. Se pueden combinar entre sí mediante un enlace OR (|).
Por ejemplo, para definir tanto TRIM como PRETTY, use: (SM2_TRIM / SM2_PRETTY).

GRUPO 1
——-
Siempre se debe especificar un indicador de este grupo. Estos indicadores determinan cómo se suprimen en la salida los elementos hermanos del árbol de menús.

SM2_ALL

Muestra todas las ramas del árbol de menús

 A-1 -> B-1 -> B-2 -> C-1 -> C-2 (CURRENT) -> D-1 -> D-2 -> C-3 A-2 -> B-3 -> B-4

SM2_TRIM

Muestra todos los menús hermanos de la página en la ruta actual.
Todos los submenús de elementos que no están en la ruta de acceso.se eliminan
.

 A-1 -> B-1 -> B-2 -> C-1 -> C-2 (CURRENT) -> D-1 -> D-2 -> C-3 A-2 

SM2_CRUMB

Muestra la ruta de ruta del menú, es decir, el elemento de menú actual
y todos los elementos de menú que conducen a él.

A-1 -> B-2 -> C-2 (CURRENT)

SM2_SIBLING

Como SM2_TRIM, pero solo se muestran los menús hermanos de la página actual. Todos los demás elementos se suprimen.

 A-1 -> B-2 -> C-1 -> C-2 (CURRENT) -> D-1 -> D-2 -> C-3 

GRUPO 2
——-
Estas banderas son opcionales, se pueden combinar en cualquier número.

SM2_NUMCLASS

Añade las clases de menú numeradas » menu-N «y»menu-child-N».

SM2_ALLINFO

Carga todos los campos de la tabla de páginas de la base de datos.
Esto causa un consumo de memoria bastante alto y debe ser
por lo tanto, debe usarse con precaución.
Esto significa, por ejemplo, que se pueden cargar las palabras clave, la descripción de la página y
toda la información disponible que normalmente no es
.
Tenga en cuenta: esta bandera se debe establecer en la PRIMERA llamada de schow_menu2
se puede usar para el ID de menú respectivo, o en conjunto con
con SM2_NOCACHE, de lo contrario no tiene efecto.

SM2_NOCACHE

Los datos leídos de la base de datos no se reutilizan cuando se llama de nuevo a show_menu2, sino que se leen de nuevo desde la base de datos.

SM2_PRETTY

Trae la salida HTML del menú con espacios en blanco y saltos de línea
en una forma legible. Esto es especialmente útil al depurar la salida del menú.

SM2_BUFFER

No genera el código HTML directamente, sino que lo guarda internamente y lo genera como una cadena completa.

SM2_CURRTREE

Excluye de la visualización todos los demás menús de nivel superior.
Solo se muestran los elementos de menú de la rama de menú actual.
Si es necesario, esta bandera se puede combinar con cualquier bandera del grupo 1.

SM2_ESCAPE

Aplica htmlspecialchars a la cadena de menú.
Esto puede ser necesario para instalaciones antiguas de WebsiteBaker.
para generar una salida HTML válida.

SM2_SHOWHIDDEN

Las páginas ocultas generalmente se ocultan todo el tiempo, incluso cuando están activas (es decir, la página actual o una página principal).
Use páginas privadas durante el tiempo en que desee que las páginas se oculten, excepto cuando estén activas. Sin embargo, para la compatibilidad con la versión 4.8, proporcione este indicador para permitir que las páginas ocultas se vuelvan visibles cuando estén activas.

SM2_XHTML_STRICT

Garantiza la compatibilidad XHTML de los enlaces eliminando la especificación de destino en los enlaces formateados con or e insertando el argumento title=»». Para los enlaces compilados manualmente, el diseñador es responsable de la conformidad XHTML.

SM2_NO_TITLE

Suprime la salida del contenido del atributo Title para enlaces formateados o con formato.
Para este parámetro también hay un modo extendido donde las opciones se pasan como una matriz asociativa. Consulte la sección OPCIONES AVANZADAS para obtener más información. Sin embargo, para la mayoría de las aplicaciones, esto NO es necesario.

$aItemOpen

Esto define la cadena de formato con la que se inicia cada elemento de menú individual. Se puede definir una cadena de formato diferente para el primer elemento de menú usando $aTopItemOpen.
Si este parámetro se establece en false, la cadena de formato predeterminada
‘< / a> ‘ para garantizar la compatibilidad con la función estándar show_menu () de WebsiteBaker.
Dado que el formateo con clases CSS es a menudo más fácil cuando se aplica a la etiqueta <a>, se recomienda usar la siguiente cadena de formato: ‘<li></a>’.
Este parámetro también se puede usar como una instancia de una clase de formato para el menú. Una descripción más detallada se puede encontrar en la sección FORMATEADOR. Si se especifica un formateador aquí, se ignoran todos los argumentos después de $aItemOpen.

$aItemClose

Esta cadena completa cada elemento de menú. Tenga en cuenta: ¡esto no es una cadena de formato y no se reemplazarán palabras clave!
Si este parámetro se establece en false, se utiliza el valor predeterminado ‘ < / li>’.

aMen aMenuOpen

Esta cadena de formato abre una lista de elementos de menú. Se puede definir una cadena de formato diferente para el primer menú usando $aTopMenuOpen.
Si este parámetro se establece en false, se utiliza el valor predeterminado».

$aMenuClose

Esta cadena completa de cada menú. Tenga en cuenta: ¡esto no es una cadena de formato y no se reemplazarán palabras clave!
Si este parámetro se establece en false, se utiliza el valor predeterminado ‘ < / ul>’.

$aTopItemOpen

La cadena de formato para el primer elemento del menú. Si este parámetro se establece en false, se utiliza la misma cadena de formato que para $aItemOpen.

$aTopMenuOpen

La cadena de formato para el primer menú. Si este parámetro se establece en false, se utiliza la misma cadena de formato que aMen aMenuOpen.

ADVANCED OPTIONSup

El parámetro $aoptions se puede utilizar de dos maneras. En primer lugar, como se describió anteriormente en la sección PARÁMETROS, este tipo debería ser suficiente para la gran mayoría de los casos de uso. Sin embargo, para poder abordar las opciones especiales en casos especiales, los valores requeridos deben proporcionarse como una matriz asociativa.
Nota: Los indicadores SM2_ * también se requieren aquí y deben pasarse como ‘indicadores’.

‘flags’

* * SE REQUIERE CONCELARIO * * Estos son los flags descritos anteriormente en la sección de PARÁMETROS bajo $aOptions.

‘notrim’

Esto define un número de niveles que se muestran siempre relativa al nivel de menú definido en $aStart. Esto hace que la bandera SM2_TRIM se ignore para estos niveles.

Para usar esta matriz, se recomienda crearla primero y luego suministrar el parámetro $aOptions con la matriz creada:

$options = array('flags' => (SM2_TRIM|...), 'notrim' => 1); show_menu2(0, SM2_ROOT, SM2_CURR+1, $options);

FORMATO STRINGSup

Las siguientes etiquetas se pueden usar en las cadenas de formato para $aItemOpen y aMen aMenuOpen y deben reemplazarse por el texto correspondiente.

<un> etiqueta sin clase:

'<a href="" target="">'
<un> etiqueta con la clase:

'<a href="" target="" class="">'
<li> etiqueta con la clase:

'<li class="">'
<ul> etiqueta con la clase:

'<ul class="">'
Lista de clases de esta página
el Texto del título del menú
(HTML entidad escapó a menos que el SM2_NOESCAPE bandera)
La dirección URL a un archivo de imagen con la normal de la representación
La dirección URL a un archivo de imagen con el/pase de la pantalla
título de la Página de texto
(HTML entidad escapó a menos que el SM2_NOESCAPE bandera)
La dirección URL a una página relacionada con archivo de imagen
La URL de las páginas para la <un> etiqueta
La página de destino para el <un> etiqueta
La Página de IDENTIFICACIÓN del elemento de menú actual.
El ID de página del elemento de menú principal.
A nivel de página, este es el mismo número utilizado en la etiqueta CSS» menu-N».
Número de hermanos del elemento de menú actual.
Número de todos los hermanos en este menú.
Condición (consulte la sección «Formato condicional» para obtener más información)

Las siguientes etiquetas SOLO están disponibles si el indicador SM2_ALLINFO está establecido.

descripción de la página
Palabras clave de la página

Formato condicional subir

La instrucción de formato condicional puede tomar una de las formas siguientes:


A

La afección. Vea más abajo para más detalles.

B

La expresión utilizada cuando se cumple la condición.
Puede ser cualquier cadena que no contenga el carácter’}’.
puede contener. Puede contener cualquier cadena de formato de la sección
Cadenas de formato’, pero no más pruebas de condición (porque el carácter’} ‘ no está permitido).

C

La expresión utilizada cuando no se cumple la condición.
Puede ser cualquier cadena que no contenga el carácter’}’.
puede contener. Puede contener cualquier cadena de formato de la sección
Cadenas de formato’, pero no más pruebas de condición (porque el carácter’} ‘ no está permitido).

La condición es una combinación de una o más comparaciones booleanas.
Si se requiere más de una comparación, debe combinarse con las otras comparaciones
puede vincularse mediante | / (booleano or-OR) o && (booleano and – AND).

Una única comparación consiste en el operando izquierdo, el operador y el operando derecho.
por ejemplo, X = = Y-donde X es el operando izquierdo, = = el operador y Y el operando derecho.

Operando izquierdo. Debe ser una de las siguientes palabras clave:
class Compruebe si esta clase existe. Solo el «= = «y»!= «se permiten operadores. En este caso, los operadores tienen el significado «contiene » o» no contiene «en lugar de» es igual «o»no es igual».
nivel Comprobar el nivel de página.
sib Marque el número de hermanos en la página actual.
sibCount Marque el número total de hermanos en el menú actual.
id Compruebe el id de la página.
objetivo Verificación de la especificación del objetivo.
Operador. Debe ser uno de los siguientes:
< Menos de
<= inferior o igual a
== Igual
!= No igual
>= Mayor o igual a
> Mayor que
operando Derecho. El tipo de este operando depende de la palabra clave utilizada para el operando izquierdo.
clase Uno de los nombres de clase «menu – *» especificados en la sección» Salida».
nivel Compruebe el nivel de página con los siguientes valores:

  • <número> el nivel de página absoluto
  • raíz es el nivel superior de la página
  • abuelita un nivel de página Por encima del nivel de página principal
  • padre el nivel de página principal
  • actual el nivel de página actual
  • secundario el nivel de página subordinado
id Compruebe el id de página con los siguientes valores:

  • < número> el id absoluto de página
  • padre el id de página padre
  • actual el id de página actual
sib Un entero positivo, o «SIMBCOUNT» para comprobar el número de hermanos en este menú.
sibCount Un número entero positivo
destino una cadena que representa Una posible especificación de destino.
Los siguientes ejemplos dan como resultado «true» y la expresión {exp} se ejecuta si es true:
Tiene un submenú
Si la primera entrada en un menú
NO Es el primer elemento en un menú
Si la última entrada en un menú
Situado en el nivel superior
NO Está en el nivel superior
Si la segunda entrada en un menú
Si en un menú con más de una entrada
Está en un menú que no tiene exactamente 2 elementos
Es en un hermano de menú o el submenú de un hermano menú
Es el principal punto de la corriente id
La cadena ‘_self’ está contenida en el atributo de destino.

Si se agrega una cláusula else, se ejecutará en todos los demás casos.
Por ejemplo, » foo » siempre se ejecuta cuando la comprobación if es incorrecta, por lo que:

NO es el segundo elemento del menú
no está en un menú con más de dos entradas
En comparaciones múltiples, la expresión «exp» solo se ejecuta si:
es la primera entrada O es la cuarta entrada o superior en el menú
Si la entrada actual es Y tiene submenús

Tenga en cuenta:
Todas las comprobaciones se realizarán en el orden en que se anotan, porque:

  • No hay comprobación de posibles bucles (todas las comprobaciones se ejecutan siempre).
  • Las comprobaciones no están agrupadas (no se admiten paréntesis de comprobaciones)
  • Ambas cosas tienen el mismo valor.

FORMATTERup

Atención: ¡Esta es una función avanzada y rara vez utilizada!

Con un amplio conocimiento en programación PHP, es posible usar el formato predefinido
de show_menu2 con el suyo propio.
En el include.php de show_menu2 puede ver cómo escribir el formateador.
La API que se debe usar se ve así:

class SM2_Formatter{ // called once before any menu is processed to allow object initialization function initialize() { } // called to open the menu list function startList($aPage, $aUrl) { } // called to open the menu item function startItem($aPage, $aUrl, $aCurrSib, $aSibCount) { } // called to close the menu item function finishItem() { } // called to close the menu list function finishList() { } // called once after all menu has been processed to allow object finalization function finalize() { } // called once after finalize() if the SM2_NOOUTPUT flag is used function getOutput() { }};

Webbakeris publicado bajo la Licencia Pública General de GNU

Deja una respuesta

Tu dirección de correo electrónico no será publicada.