Контакты

Поиск по сайту

Категория: Joomla Опубликовано: 25 Март 2015

Краткое описание для пунктов меню из 2–3 слов сделает навигацию по сайту более удобной для пользователя. Так же, есть мнение, что это нравится поисковым роботам.

Существуют сторонние расширения для решения этой задачи, но установка лишнего модуля или плагина — не всегда лучший вариант. Хочется воспользоваться штатными средствами движка, чтобы не перегружать его лишними скриптами.

Joomla 2.5 позволяет это сделать без добавления дополнительного поля в настройки меню.

На странице настроек пункта меню есть слева (четвертое сверху) поле «Примечание», которым, чаще всего, не пользуются. Вот и появился прекрасный повод его поиспользовать.

Если посмотреть через FireBug в FF, то узнаем имя поля — «jform[note]». Теперь остается вывести значение из этого поля внутри тега созданного пункта меню. Например, обернув это примечание в тег, который уже сможем стилизовать по своему усмотрению.

За вывод меню в Joomla отвечает штатный модуль. Файлы, которые нам нужны расположены здесь \www\modules\mod_menu\tmpl. Движок трогать не будем, а создадим в корневой папке нашего шаблона такие папки html\mod_menu (т. е. полный путь от корня сайта должен быть таким \www\templates\имя_шаблона_по_умолчанию\html\mod_menu).

В папку mod_menu шаблона из папки tmpl движка копируем файлы default_component.php, default_separator.php и default_url.php.

В каждом из этих файлов ищем строчки php-кода, отвечающие за вывод содержимого пунктов меню.

В файле default_url.php это строчки со всеми вариантами оператора switch:

    switch ($item->browserNav) :
        default:
        case 0:
    ?><a <?php echo $class; ?>href="<?php echo $flink; ?>" <?php echo $title; ?>><?php echo $linktype; ?></a><?php
            break;
        case 1:
    ?><a <?php echo $class; ?>href="<?php echo $flink; ?>" target="_blank" <?php echo $title; ?>><?php echo $linktype; ?></a><?php
            break;
        case 2:
            $options = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,'.$params->get('window_open');
                ?><a <?php echo $class; ?>href="<?php echo $flink; ?>" onclick="window.open(this.href,'targetWindow','<?php echo $options;?>');return false;" <?php echo $title; ?>><?php echo $linktype; ?></a><?php
            break;
    endswitch; 

Идея такая: если наше поле «jform[note]» непустое — создаем span и заполняем его содержимым поля. Если в примечании ничего нет — то и span’а у нас никакого нет.

В каждом из трех наших файлов после строчки

    defined('_JEXEC') or die;

вставляем такой код:

    $span = $item->note;
    if (!(empty($span))) {
            $span = '<span class="lidesc">'.$span.'</span>';
        } else {
            $span = null;
            }

Затем в каждом из вариантов, описанных в switch, перед каждым закрывающим тегом </a> вставляем такой код:

    <?php echo $span; ?>

В итоге должно получиться так:

    switch ($item->browserNav) :
        default:
        case 0:
    ?><a <?php echo $class; ?>href="<?php echo $flink; ?>" <?php echo $title; ?>><?php echo $linktype; ?><?php echo $span; ?></a><?php
            break;
        case 1:
            // _blank
    ?><a <?php echo $class; ?>href="<?php echo $flink; ?>" target="_blank" <?php echo $title; ?>><?php echo $linktype; ?><?php echo $span; ?></a><?php
            break;
        case 2:
            // window.open
            $options = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,'.$params->get('window_open');
                ?><a <?php echo $class; ?>href="<?php echo $flink; ?>" onclick="window.open(this.href,'targetWindow','<?php echo $options;?>');return false;" <?php echo $title; ?>><?php echo $linktype; ?><?php echo $span; ?></a><?php
            break;
    endswitch;

В файле default_component.php то же самое — вывод переменной $span перед </a>.

Файл default_separator.php совсем маленький. Здесь выводим значение $span  только один раз, перед закрывающим тегом </span>. И получаем:

<span class="separator"><?php echo $title; ?><?php echo $linktype; ?><?php echo $span; ?></span>

Сохраняем. Теперь, если все сделали правильно, то в каждом созданном пункте меню, где было указано примечание, должен появиться дополнительный текст.

Не обязательно выводить именно так, как у меня ( <span> с классом lidesc). Тут все в зависимости от фантазии. Главное, знать имя поля примечания (в Joomla 3x оно может быть другим), ну и теги внимательно закрыть, если фантазия простирается уж очень далеко.

В сыром виде у меня это выглядит примерно так:

А готовый вариант на сайте выглядит уже вот так:

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

P/S:
Для тех, кому неудобно вбивать примечание в узенькое текстовое поле «note», в файле  www\administrator\components\com_menus\models\forms\item.xml (на Joomla 2.5 и 3.x) ищем строчку:

<field name='note'…

и ставим тип «textarea» вместо «text».

Минусы данного способа вам, наверняка,  известны.

Добавить сообщение

Форма входа

Индекс цитирования Яндекс.Метрика