Оценок: 1
Меню Joomla - меняем ссылку для текущей страницы на span

Меню Joomla - меняем ссылку для текущей страницы на span

Необходимо будет внести правки в макет вывода пункта меню для компонента - default_component.php. Для начала не забываем скопировать его из "/modules/mod_menu/tmpl/default_component.php" в "/html/mod_menu/default_component.php" своего шаблона. Далее можно приступать к правке.

Необходимо задать два разных варианта отображения отдельно для пункта меню ссылающегося на текущую страницу и отдельно на любую другую страницу, используя проверку на соответствие некоторым условиям. Пункт меню текущей страницы будет иметь тег span с классом "a", класс необходимо задать т.к. теги span могут быть у других элементов данного пункта.

Вот часть кода, которая и выводит ссылки пунктов меню:

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

В начале добавим проверку, вконце альтернативный вариант отображения. Что касается проверки, если открыть основной макет модуля меню - default.php, там есть проверка для добавления к активному пункту меню сласса "current":

if (($item->id == $active_id) OR ($item->type == 'alias' AND $item->params->get('aliasoptions') == $active_id))
	{
		$class .= ' current';
	}

Изначально планировал сделать так же, но такой вариант не работает в случае с блогом категории - когда заходим в материал блога, ссылка на категорию остается активной, следовательно нужна была дополнительная проверка. Решил использовать сравнение "view" пункта меню и текущей страницы. В итоге получил такой код:

if ($item->id != $active_id)
{
switch ($item->browserNav)
{
	default:
	case 0:
?><a <?php echo $class; ?>href="<?php echo $item->flink; ?>" <?php echo $title; ?>><?php echo $linktype; ?></a><?php
		break;
	case 1:
		// _blank
?><a <?php echo $class; ?>href="<?php echo $item->flink; ?>" target="_blank" <?php echo $title; ?>><?php echo $linktype; ?></a><?php
		break;
	case 2:
	// Use JavaScript "window.open"
?><a <?php echo $class; ?>href="<?php echo $item->flink; ?>" onclick="window.open(this.href,'targetWindow','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes');return false;" <?php echo $title; ?>><?php echo $linktype; ?></a>
<?php
		break;
}
} else if (JRequest::getVar('view', null)==$item->query['view']){
?><span class="a"><?php echo $linktype; ?></span><?php
} else {
	?><a <?php echo $class; ?>href="<?php echo $item->flink; ?>" <?php echo $title; ?>><?php echo $linktype; ?></a><?php
}

Не забываем в css продублировать все свойства тега "a" меню для "span.a"

Оценок: 1
Надежный хостинг VPS серверов
  • Свои ISO образы
  • VDS с оплатой раз и навсегда
  • Аренда VDS на любой срок, с оплатой по дням
  • Большое разнообразие конфигураций
  • Дата-центры в ЕС и России
+ скидка 10%

Комментарии (0)