Вывод HTML в главном меню Joomla - PullRequest
4 голосов
/ 29 декабря 2008

Я пытаюсь отредактировать выходной модуль joomla main_menu, чтобы я мог создать собственное выпадающее меню. На данный момент он выводит html примерно так:

<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>

Я хотел бы удалить теги span для вывода.

Что я знаю, так это то, что если я хочу отредактировать вывод; в моей папке шаблонов я создаю каталог с именем «html», а затем внутри него новый каталог с именем «mod___mainmenu», а затем make копирует файл default.php из существующей папки mod_mainmenu из каталога modules. Все изменения, которые я внесу в файл, изменят вывод.

Проблема, с которой я столкнулся, заключается в том, что я не могу понять, что происходит с кодом, который написан в файле default.php, так как он использует какую-то систему XML, с которой я не знаком, и комментариев нет.

Если у кого-нибудь есть идеи, которые будут очень полезны!

Вот код из файла default.php для меню:

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');

Ответы [ 2 ]

6 голосов
/ 25 января 2009

Вам следует избегать редактирования основных файлов, когда это возможно, чтобы избежать перезаписи ваших изменений при обновлении. Вместо этого используйте файлы переопределения шаблонов.

Когда я столкнулся с этим, я хотел добавить и очистить тег em для каждого элемента меню, чтобы обеспечить замену изображения Гилдера / Левина . В моем html override ({templatedir} \ html \ mod_mainmenu \ default.php) я окружил вызов modMainMenuHelper :: render (в основном, последняя строка) выходным буфером и использовал простой str_replace для добавления тега em:

ob_start();
modMainMenuHelper::render($params, 'modMainMenuXMLCallback');
$mainMenuContent = ob_get_clean();
echo str_replace('</span>', '</span><em></em>', $mainMenuContent);

Поскольку вы просто хотите избавиться от тега span, вы можете сделать:

ob_start();
modMainMenuHelper::render($params, 'modMainMenuXMLCallback');
$mainMenuContent = ob_get_clean();
echo str_replace(array('<span>','</span>'), array('',''), $mainMenuContent);
2 голосов
/ 30 декабря 2008

Оказывается, теги span добавляются в совершенно другой файл.

Если вы перейдете в каталог modules / mod_mainmenu, есть файл helper.php, который также контролирует некоторые выходные данные.

В строках 285 и 293 в коде есть несколько тегов span. Удаление этих заставило вывод работать так, как я хотел.

...