Salida html del menú principal de Joomla
joomla1.5 (2)
Resulta que las etiquetas span se agregan en un archivo completamente diferente.
Si va al directorio modules / mod_mainmenu hay un archivo helper.php que también controla algunos de los resultados.
En las líneas 285 y 293 hay algunas etiquetas span en el código. Eliminar los hizo que la salida funcionara como yo quería.
Estoy intentando editar el módulo joomla main_menu de salida para poder crear un menú desplegable personalizado. Por el momento, actualmente genera html como este:
<ul class="menu">
<li class="active item1" id="current"><a href="#"><span>First Level Item </span</a></li>
<li class="parent item63"><a href="#"><span>First Level Item Parent</span></a>
<ul>
<li class="item60"><a href="#"><span>Second Level Item</span></a></li>
<li class="item69"><a href="#"><span>Second Level Item</span></a></li>
</ul>
</li>
<li class="item64"><a href="#"><span>First Level Item</span></a></li>
<li class="item66"><a href="#"><span>First Level Item</span></a></li>
Lo que me gustaría hacer es eliminar las etiquetas span para la salida.
Lo que sé hasta ahora es que si quiero editar la salida; en mi carpeta de plantillas hago un directorio llamado ''html'' y luego dentro de ese un nuevo directorio llamado ''mod___mainmenu'' y luego hago una copia del archivo default.php de la carpeta mod_mainmenu existente desde el directorio de módulos. Todos los cambios en I make to take file cambiarán la salida.
El problema que estoy teniendo es que no puedo entender lo que está sucediendo con el código que está escrito en el archivo default.php, ya que utiliza algún sistema XML que no estoy familiarizado con él y no hay comentarios.
¡Si alguien tiene alguna idea que sea súper útil!
Aquí está el código del archivo default.php para el menú:
defined(''_JEXEC'') or die(''Restricted access'');
if ( ! defined(''modMainMenuXMLCallbackDefined'') )
{
function modMainMenuXMLCallback(&$node, $args)
{
$user = &JFactory::getUser();
$menu = &JSite::getMenu();
$active = $menu->getActive();
$path = isset($active) ? array_reverse($active->tree) : null;
if (($args[''end'']) && ($node->attributes(''level'') >= $args[''end'']))
{
$children = $node->children();
foreach ($node->children() as $child)
{
if ($child->name() == ''ul'') {
$node->removeChild($child);
}
}
}
if ($node->name() == ''ul'') {
foreach ($node->children() as $child)
{
if ($child->attributes(''access'') > $user->get(''aid'', 0)) {
$node->removeChild($child);
}
}
}
if (($node->name() == ''li'') && isset($node->ul)) {
$node->addAttribute(''class'', ''parent'');
}
if (isset($path) && in_array($node->attributes(''id''), $path))
{
if ($node->attributes(''class'')) {
$node->addAttribute(''class'', $node->attributes(''class'').'' active'');
} else {
$node->addAttribute(''class'', ''active'');
}
}
else
{
if (isset($args[''children'']) && !$args[''children''])
{
$children = $node->children();
foreach ($node->children() as $child)
{
if ($child->name() == ''ul'') {
$node->removeChild($child);
}
}
}
}
if (($node->name() == ''li'') && ($id = $node->attributes(''id''))) {
if ($node->attributes(''class'')) {
$node->addAttribute(''class'', $node->attributes(''class'').'' item''.$id);
} else {
$node->addAttribute(''class'', ''item''.$id);
}
}
if (isset($path) && $node->attributes(''id'') == $path[0]) {
$node->addAttribute(''id'', ''current'');
} else {
$node->removeAttribute(''id'');
}
$node->removeAttribute(''level'');
$node->removeAttribute(''access'');
}
define(''modMainMenuXMLCallbackDefined'', true);
}
modMainMenuHelper::render($params, ''modMainMenuXMLCallback'');
Debe evitar editar los archivos principales siempre que sea posible para evitar que sus cambios se sobrescriban cuando realice la actualización. En su lugar, utilice plantillas que reemplazan a los archivos.
Cuando me encontré con esto, quería agregar y vaciar la etiqueta em en cada elemento del menú para permitir el reemplazo de la imagen de Gilder / Levin . En mi sobreescritura html ({templatedir} / html / mod_mainmenu / default.php) rodeé la llamada a modMainMenuHelper :: render (la última línea, básicamente) con un buffer de salida, y usé un simple str_replace para agregar la etiqueta em:
ob_start();
modMainMenuHelper::render($params, ''modMainMenuXMLCallback'');
$mainMenuContent = ob_get_clean();
echo str_replace(''</span>'', ''</span><em></em>'', $mainMenuContent);
Como solo quieres deshacerte de la etiqueta span, puedes hacer:
ob_start();
modMainMenuHelper::render($params, ''modMainMenuXMLCallback'');
$mainMenuContent = ob_get_clean();
echo str_replace(array(''<span>'',''</span>''), array('''',''''), $mainMenuContent);