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:
<input type="hidden" name="referrer" value="" />
<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ú. |
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
aSt aStart
SM2_ROOT+N
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
SM2_CURR + 1 Inician una capa por debajo de la capa actual con todos los subniveles.
page_id
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
comienza desde el nivel especificado en aSt aStart, hasta el nivel especificado aquí.
SM2_ALL
SM2_CURR+N
SM2_CURR+3 Todos los subniveles padre + actual + 3
SM2_START+N
Los niveles se muestran independientemente del nivel en el que se encuentre la página actual.
SM2_START + 1 Nivel de inicio + un nivel inferior.
SM2_MAX + N
Las capas por debajo del nivel actual no se muestran.
SM2_MAX+1 El nivel de inicio y un nivel por debajo de él.
$Opciones
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
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
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
y todos los elementos de menú que conducen a él.
A-1 -> B-2 -> C-2 (CURRENT)
SM2_SIBLING
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
SM2_ALLINFO
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
SM2_PRETTY
en una forma legible. Esto es especialmente útil al depurar la salida del menú.
SM2_BUFFER
SM2_CURRTREE
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
Esto puede ser necesario para instalaciones antiguas de WebsiteBaker.
para generar una salida HTML válida.
SM2_SHOWHIDDEN
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
SM2_NO_TITLE
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
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
Si este parámetro se establece en false, se utiliza el valor predeterminado ‘ < / li>’.
aMen aMenuOpen
Si este parámetro se establece en false, se utiliza el valor predeterminado».
$aMenuClose
Si este parámetro se establece en false, se utiliza el valor predeterminado ‘ < / ul>’.
$aTopItemOpen
$aTopMenuOpen
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’.
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:
B
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
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.
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. |
< | Menos de |
<= | inferior o igual a |
== | Igual |
!= | No igual |
>= | Mayor o igual a |
> | Mayor que |
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:
|
id | Compruebe el id de página con los siguientes valores:
|
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. |
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 |
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