0 Пользователей и 1 Гость просматривают эту тему.
  • 14 Ответов
  • 1683 Просмотров
*

pavel2950

  • Захожу иногда
  • 194
  • 3 / 0
Наверное задача не из легких и такой вопрос наверное звучал не раз.

Есть меню скажем и в нем есть какое-то кол. пункт меню которые через внеш. ссылку сделаны.
Как сделать так чтоб этот пункт меню подсвечивались. когда я перехожу и попал в какую-то вкладку через внешнею ссылку ?
*

vipiusss

  • Гуру
  • 5739
  • 344 / 11
  • Скайп: renor_
Что первое вспомнил:
http://cmsassistant.net/webmaster/css/1033-ikonka-dlya-vneshney-ssylki.html

Стоп, чтобы после перехода на _blank в Joomla осталась нажатая (подсвечивалась)?
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями
*

darkghost

  • Живу я здесь
  • 2212
  • 97 / 0
то есть при наведении курсора - меню подсвечивалось или как? Сформулируйте точнее
Как себе представляете, если подсветить (выделить активный пункт) меню внешней ссылки? Посетитель с сайта ушел и тут вопрос - а есть ли на чужом сайте Ваше меню?
*

pavel2950

  • Захожу иногда
  • 194
  • 3 / 0
то есть при наведении курсора - меню подсвечивалось или как? Сформулируйте точнее
Как себе представляете, если подсветить (выделить активный пункт) меню внешней ссылки? Посетитель с сайта ушел и тут вопрос - а есть ли на чужом сайте Ваше меню?
Переходим по внешним ссылкам в пределах нашего сайта.
Есть такие случаи что надо указать ссылку на что-то именно как внешняя ссылка. Где по нажатию мы переходим на какую-то страницу на нашем сайте. Повторяю внешняя ссылка какая не уводит нас из сайта, мы шаримся внутри сайта.  


UPD: Мы перешли на какую-т стран. и хочу чтоб пункт меню был выделен( подсвечен) что я нахожусь в этом разделе меню
 



« Последнее редактирование: 16.06.2017, 10:07:32 от pavel2950 »
*

vipiusss

  • Гуру
  • 5739
  • 344 / 11
  • Скайп: renor_
А как это внешняя ссылка является внутренней? Фрейм чтоли?
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями
*

darkghost

  • Живу я здесь
  • 2212
  • 97 / 0
показали бы пациента - было бы проще, но а в принципе (если страница в пределах же сайта) то в стилях дописать свойство :active
На сайте подсветка есть на другие страницы или вывосе нет?
*

fbr

  • Завсегдатай
  • 1625
  • 189 / 7
Ясно. Тип пункта меню - внешний URL, ссылка на свою страницу.
Бывает, иногда приходится так делать.

Попробуйте в модуле menu \modules\mod_menu\tmpl\default.php после строки 52 дописать:

Код: php
	elseif ($item->type === 'url')
{
if (JURI::current() == $item->link) {$class .= ' active';}
}
строка указана для стандартного модуля j3.7.2
*

pavel2950

  • Захожу иногда
  • 194
  • 3 / 0
Ясно. Тип пункта меню - внешний URL, ссылка на свою страницу.
Бывает, иногда приходится так делать.

Попробуйте в модуле menu \modules\mod_menu\tmpl\default.php после строки 52 дописать:

Код: php
	elseif ($item->type === 'url')
{
if (JURI::current() == $item->link) {$class .= ' active';}
}
строка указана для стандартного модуля j3.7.2
Вот вы меня поняли... сейчас проверю код.
*

si@m

  • Захожу иногда
  • 162
  • 2 / 0

Попробуйте в модуле menu \modules\mod_menu\tmpl\default.php после строки 52 дописать:

Код: php
   elseif ($item->type === 'url')
   {
      if (JURI::current() == $item->link) {$class .= ' active';}
   }
строка указана для стандартного модуля j3.7.2

Попробовал сделать как вы советуете не сработало,  такой должен быть результат?
Код
<?php
/**
 * @package     Joomla.Site
 * @subpackage  mod_menu
 *
 * [member=126442]copyright[/member]   Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

$id = '';

if (($tagId = $params->get('tag_id', '')))
{
   $id = ' id="' . $tagId . '"';
}

// The menu class is deprecated. Use nav instead
?>
<ul class="nav menu<?php echo $class_sfx; ?>"<?php echo $id; ?>>
<?php foreach ($list as $i => &$item)
{
   $class = 'item-' . $item->id;

   if ($item->id == $default_id)
   {
      $class .= ' default';
   }


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

   if (in_array($item->id, $path))
   {
      $class .= ' active';
   }
   elseif ($item->type == 'alias')
   {
      $aliasToId = $item->params->get('aliasoptions');

      if (count($path) > 0 && $aliasToId == $path[count($path) - 1])
      {
         $class .= ' active';
      }
      elseif (in_array($aliasToId, $path))
      {
         $class .= ' alias-parent-active';
      }
      elseif ($item->type === 'url')
      {
      if (JURI::current() == $item->link) {$class .= ' active';}
      }
   }

   if ($item->type == 'separator')
   {
      $class .= ' divider';
   }

   if ($item->deeper)
   {
      $class .= ' deeper';
   }

   if ($item->parent)
   {
      $class .= ' parent';
   }

   echo '<li class="' . $class . '">';

   switch ($item->type) :
      case 'separator':
      case 'component':
      case 'heading':
      case 'url':
         require JModuleHelper::getLayoutPath('mod_menu', 'default_' . $item->type);
         break;

      default:
         require JModuleHelper::getLayoutPath('mod_menu', 'default_url');
         break;
   endswitch;

   // The next item is deeper.
   if ($item->deeper)
   {
      echo '<ul class="nav-child unstyled small">';
   }
   // The next item is shallower.
   elseif ($item->shallower)
   {
      echo '</li>';
      echo str_repeat('</ul></li>', $item->level_diff);
   }
   // The next item is on the same level.
   else
   {
      echo '</li>';
   }
}
?></ul>

*

fbr

  • Завсегдатай
  • 1625
  • 189 / 7
Неправильно!
У вас:
Код
elseif ($item->type == 'alias')
{
   ...
   elseif ($item->type === 'url') {...}
}

А нужно:
Код
elseif ($item->type == 'alias')
{
   ...
}

elseif ($item->type === 'url')
{
...
}

Вы проверку на url впихнули внутрь проверки на alias... Конечно не сработает
*

si@m

  • Захожу иногда
  • 162
  • 2 / 0
Вы проверку на url впихнули внутрь проверки на alias... Конечно не сработает
Спасибо что откликнулись, поправил все равно не срабатывает
*

fbr

  • Завсегдатай
  • 1625
  • 189 / 7
Специально еще раз проверил - у меня все работает))

Может у вас модуль меню переопределен в шаблоне? Тогда правки нужно вносить по месту прописки

Возможно не задан стиль CSS для класса active, или переопределен на другой стиль ...

В общем, ищите, должно работать
Код
elseif ($item->type == 'alias') {
  $aliasToId = $item->params->get('aliasoptions');
  if (count($path) > 0 && $aliasToId == $path[count($path) - 1]) {
    $class .= ' active';
  }
  elseif (in_array($aliasToId, $path)) {
    $class .= ' alias-parent-active';
  }
}
elseif ($item->type === 'url')
{
  if (JURI::current() == $item->link) {$class .= ' active';}
}
« Последнее редактирование: 22.04.2018, 14:57:15 от fbr »
*

si@m

  • Захожу иногда
  • 162
  • 2 / 0
Стили для active заданы, да и смотрю я через FireBug добавляется класс или нет. Я пробовал править default.php как в самой Joomla, так и делал переопределение, ни в том ни в другом случае не работает. Может дело в настройках SEF или еще где-то?
*

si@m

  • Захожу иногда
  • 162
  • 2 / 0
Посмотрел что выводит echo JURI::current(); и стало понятно в чем дело. Когда я создавал пункт меню "Внешний URL", в поле "Ссылка" я вписал относительную ссылку, а между тем JURI::current() получает абсолютную ссылку. Как только я вписал в абсолютную ссылку, соотвествующему пункту меню - сразу присвоился class="active".

Вопрос: поскольку это меню у меня находится не в самом верху, а ближе к середине страницы, я для удобства, к ссылкам добавляю http://site.ru/content#jakor чтоб пользователя перекидывало к нужному месту страницы, так вот JURI::current() якорь не получает вместе со ссылкой, а только http://site.ru/content
Может есть возможность получать URL не с помощью JURI::current(), а брать этот URL из бд в таком виде в каком его вписали?
*

si@m

  • Захожу иногда
  • 162
  • 2 / 0
Решил все с помощью jQuery, если вдруг понадобится кому, то можно сделать так:
Код
jQuery(function () {
jQuery('#menu a').each(function () {
var location = window.location.href;
var link = this.href;
if(location == link) {
jQuery(this).parent().addClass('active');
}
});
});

Не забудьте переопределить модуль меню в шаблоне.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Один пункт меню думает что он главный

Автор DamaVbubi

Ответов: 4
Просмотров: 248
Последний ответ 13.02.2024, 19:49:10
от DamaVbubi
[Решено] Перестали работать переходы по меню сайта

Автор AlexP750

Ответов: 12
Просмотров: 480
Последний ответ 06.02.2024, 12:42:26
от AlexP750
Пропало главное меню, и контент на главной (после обновления)

Автор GTHack

Ответов: 15
Просмотров: 517
Последний ответ 07.01.2024, 16:00:15
от ProtectYourSite
Автоматическая снятие с публикации пункта меню

Автор all_zer

Ответов: 2
Просмотров: 322
Последний ответ 30.12.2023, 15:29:58
от all_zer
Убрать из модуля новостей ссылку на статью, на которой выводится модуль

Автор zeus07

Ответов: 3
Просмотров: 708
Последний ответ 08.11.2023, 21:17:26
от GrayAn