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

zimt42

  • Новичок
  • 7
  • 0 / 0
Пролог: был основательно перерыт как форум, так и за его пределами, рабочее решение так и не найдено.
Версия: 3.6.2.

Задача: есть меню, подменю, они состоят из ссылок, который там всегда есть. Но если мы находимся в одном из пунктов, то он ссылается сам на себя, чего быть не должно. Как избавиться от циклической переадресации? Причём, если мы находимся в /меню3, то он должен быть некликабельным, но если мы находимся в меню3/подменю1, то некликабельным должно быть только подменю1, а меню3 являться ссылкой.
*

effrit

  • Легенда
  • 9591
  • 1060 / 13
  • effrit.com
Re: Циклические ссылки в меню
« Ответ #1 : 16.08.2016, 09:08:24 »
написано не очень понятно, лучше бы ссылку на сайт дали.
возможно, вы не используете тип пункта меню Псевдоним, который используется, когда в любом из меню уже есть пункт, ссылающийся на нужную страницу, и ему надо создать дубликат
*

Shustry

  • Гуру
  • 6436
  • 743 / 3
  • Рисую дизайны
Re: Циклические ссылки в меню
« Ответ #2 : 16.08.2016, 12:33:40 »
Шаблон пункта меню переопределяется для этого.
Бесплатно консультирую по дизайну и вёрстке (только в личку сердечно прошу не стучать). Платно делаю дизайн, вёрстку и темплейты для Joomla. Работаю только за деньги. За большие. И долго. Но качественно.
---------------------------------------------------------
xmpp:joomla@conference.jabber.ru - наша конфа!
*

Shustry

  • Гуру
  • 6436
  • 743 / 3
  • Рисую дизайны
Re: Циклические ссылки в меню
« Ответ #3 : 16.08.2016, 12:45:04 »
Копируете из modules\mod_menu\tmpl\ в templates\шаблон\html\mod_menu файл default_component.php. Далее оборачиваете вывод ссылки в условие (начиная с 26-й строки):

Код: php
/*начало вставки 1*/
$uri = JURI::current();
$ur = JURI::getInstance( $uri );
$u = $ur->getPath();

if ($u == $item->flink) {
echo '<span class='.$class.'>'.$linktype.'</span>';
} else {
/*конец вставки 1*/

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;
}
/*вставка два, только скобка*/
}
/*вставка два кончилась*/

Должно сработать. Не проверял.
Бесплатно консультирую по дизайну и вёрстке (только в личку сердечно прошу не стучать). Платно делаю дизайн, вёрстку и темплейты для Joomla. Работаю только за деньги. За большие. И долго. Но качественно.
---------------------------------------------------------
xmpp:joomla@conference.jabber.ru - наша конфа!
*

zimt42

  • Новичок
  • 7
  • 0 / 0
Re: Циклические ссылки в меню
« Ответ #4 : 16.08.2016, 13:43:39 »
Shustry, IDE сразу ругается на этот код, как минимум незакрытый switch, возможно что-то ещё (не силён в PHP). По аналогии вставить не вижу куда, файл default_component выглядит вот так:
Код
<?php
/**
 * @package     Joomla.Site
 * @subpackage  mod_menu
 *
 * @copyright   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;

$attributes = array();

if ($item->anchor_title)
{
$attributes['title'] = $item->anchor_title;
}

if ($item->anchor_css)
{
$attributes['class'] = $item->anchor_css;
}

if ($item->anchor_rel)
{
$attributes['rel'] = $item->anchor_rel;
}

$linktype = $item->title;

if ($item->menu_image)
{
$linktype = JHtml::_('image', $item->menu_image, $item->title);

if ($item->params->get('menu_text', 1))
{
$linktype .= '<span class="image-title">' . $item->title . '</span>';
}
}

if ($item->browserNav == 1)
{
$attributes['target'] = '_blank';
}
elseif ($item->browserNav == 2)
{
$options = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes';

$attributes['onclick'] = "window.open(this.href, 'targetWindow', '" . $options . "'); return false;";
}

echo JHtml::_('link', JFilterOutput::ampReplace(htmlspecialchars($item->flink)), $linktype, $attributes);
*

zimt42

  • Новичок
  • 7
  • 0 / 0
Re: Циклические ссылки в меню
« Ответ #5 : 16.08.2016, 13:53:46 »
написано не очень понятно, лучше бы ссылку на сайт дали.
Могу показать на примере вашего сайта =)
Идём куда-нибудь в меню, например в http://effrit.com/work/presentations, и с этой страницы вверху в меню также есть ссылка на Презентации, т. е. на саму же себя, а так быть не должно.
И, кстати, ещё бы на главной странице логотип не был кликабельным, но это уже меньшая из проблем, но суть та же.
*

effrit

  • Легенда
  • 9591
  • 1060 / 13
  • effrit.com
Re: Циклические ссылки в меню
« Ответ #6 : 16.08.2016, 14:04:30 »
zimt42, надо было ужо картинки пиарить, раз взялись мой сайт раскручивать )).

понял, о чем речь, на одном из сайтов логотип отключал на главной так, а на текущем сайте смысла нет - он не для сео сделан )
ну тогда шаблон вывода ковырять, как Шустрый товарищ завещал ).
но там решение зависит от выбранного модуля меню.
по идее, можно js-скриптом более универсально удалять ссылки на самого себя, но это уже, наверно, для робота не сработает?
*

zimt42

  • Новичок
  • 7
  • 0 / 0
Re: Циклические ссылки в меню
« Ответ #7 : 16.08.2016, 14:07:48 »
effrit, ну SEO это как дополнительный малый фактор, больше смущает именно вопрос логичности и правильности интерфейса. Особенно, когда есть список из подменю, и я в одном из них, то я не должен мочь по нему кликнуть и перезагрузить страницу тем самым.
Да, понимаю, что надо ковырять тот самый файл, встречал это в других ветках, но для других версий, и у меня не сработало. Поэтому и создал тему, т. к. PHP-ковырялки не имею =)
Про js уже тоже мысли закрадываются, но пока ещё теплится надежда решить этот вопрос правильно, а потом костылить.
*

effrit

  • Легенда
  • 9591
  • 1060 / 13
  • effrit.com
Re: Циклические ссылки в меню
« Ответ #8 : 16.08.2016, 14:24:19 »
zimt42, просто если со стороны js, то там более понятно, чего делать, и можно универсальный код написать с минимумом подгонки под разные сайты.
смысл в том, что активному меню вешается свой уникальный класс, так что можно скриптом выбирать все ссылки с этим классом (или вложенные в этот класс) и удалять им href-атрибут.

а вообще, да - я обычно просто подсвечиваю активную ссылку и этого хватает.
*

Shustry

  • Гуру
  • 6436
  • 743 / 3
  • Рисую дизайны
Re: Циклические ссылки в меню
« Ответ #9 : 16.08.2016, 14:28:21 »
файл целиком. Свич закрывается в предпоследней строке. Невнимательно смотрели.

Код: php
<?php
/**
 * @package     Joomla.Site
 * @subpackage  mod_menu
 *
 * @copyright   Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

// Note. It is important to remove spaces between elements.
$class = $item->anchor_css ? 'class="' . $item->anchor_css . '" ' : '';
$title = $item->anchor_title ? 'title="' . $item->anchor_title . '" ' : '';

if ($item->menu_image)
{
$item->params->get('menu_text', 1)?
$linktype = '<img src="' . $item->menu_image . '" alt="' . $item->title . '" /><span class="image-title">' . $item->title . '</span> ' :
$linktype = '<img src="' . $item->menu_image . '" alt="' . $item->title . '" />';
}
else
{
$linktype = $item->title;
}
/*начало вставки 1*/
$uri = JURI::current();
$ur = JURI::getInstance( $uri );
$u = $ur->getPath();

if ($u == $item->flink) {
echo '<span class='.$class.'>'.$linktype.'</span>';
} else {
/*конец вставки 1*/

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;
} //вот тут свич закрывается
/*вставка два, только скобка*/
}
/*вставка два кончилась*/
Бесплатно консультирую по дизайну и вёрстке (только в личку сердечно прошу не стучать). Платно делаю дизайн, вёрстку и темплейты для Joomla. Работаю только за деньги. За большие. И долго. Но качественно.
---------------------------------------------------------
xmpp:joomla@conference.jabber.ru - наша конфа!
*

zimt42

  • Новичок
  • 7
  • 0 / 0
Re: Циклические ссылки в меню
« Ответ #10 : 16.08.2016, 14:48:35 »
файл целиком.
Прошу прощения, я ожидал (не знаю почему) endswitch, в любом случае сначала IDE ругался, а на этот файл целиком — нет.
Но самое главное-то! Заработало! Всё поразъехалось, но это вопрос в подправке стилей, фигня.
Просто огромное спасибо, вот уж не ожидал, что не смогу чего-то нагуглить, пойду на форум и получу ответ-решение! Осталось только вопрос с логотипом-ссылкой на главной решить =)
*Убежал на радостях в закат*
*

Shustry

  • Гуру
  • 6436
  • 743 / 3
  • Рисую дизайны
Re: Циклические ссылки в меню
« Ответ #11 : 16.08.2016, 14:58:09 »
Незачто. Файлы разные возможно потому, что мой из модуля непосредственно, а не из шаблона.
Бесплатно консультирую по дизайну и вёрстке (только в личку сердечно прошу не стучать). Платно делаю дизайн, вёрстку и темплейты для Joomla. Работаю только за деньги. За большие. И долго. Но качественно.
---------------------------------------------------------
xmpp:joomla@conference.jabber.ru - наша конфа!
*

zimt42

  • Новичок
  • 7
  • 0 / 0
Re: Циклические ссылки в меню
« Ответ #12 : 16.08.2016, 17:41:19 »
Скинутый мною файл, кстати, тоже был из модуля, а не из шаблона. Видать в недавнем обновлении поменялось у них что-то.
*

Mr.Can

  • Новичок
  • 19
  • 0 / 0
Re: Циклические ссылки в меню
« Ответ #13 : 12.02.2017, 03:11:47 »
Если тема еще жива, подскажите пожалуйста: Актуален ли данный метод для Joomla 3.6.5 или в силу произошедших за это время изменений и выпусков новых версий, нужно искать другой способ для решения этого вопроса? Спасибо за любую информацию.
*

dmitry_stas

  • Легенда
  • 12997
  • 1221 / 8
Re: Циклические ссылки в меню
« Ответ #14 : 12.02.2017, 09:58:48 »
это зависит от используемого вами модуля меню. лучшим способом узнать будет установить и посмотреть :)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Mr.Can

  • Новичок
  • 19
  • 0 / 0
Re: Циклические ссылки в меню
« Ответ #15 : 22.02.2017, 09:35:47 »
это зависит от используемого вами модуля меню. лучшим способом узнать будет установить и посмотреть :)
Используется Gantry 5 с шаблоном Hydrogen в настройках меню указано Use default menu, поэтому трудно сказать, какое именно меню использует Framework свое собственное (если у него оно есть, то где искать?) или же стандартный модуль Joomla mod_menu
*

sozeedatel

  • Новичок
  • 1
  • 0 / 0
Re: Циклические ссылки в меню
« Ответ #16 : 01.06.2018, 17:21:45 »
Огромное спасибо, Шустрому. Работает и на Joomla 3.8.8Только не могу подвязать стиль CSS активного пункта меню.
пишет <a class=""а надо <a class="active"
Как допилить, что поправить.
*

lawrik2005

  • Новичок
  • 13
  • 0 / 0
Re: Циклические ссылки в меню
« Ответ #17 : 10.07.2018, 23:19:52 »
е спасибо, Шустрому. Работает и на Joomla 3.8.8Только не могу подвязать стиль CSS активного пункта меню.
пишет <a class=""а надо <a class="active"
Как допилить, что поправить.
Метод рабочий, но с активного пункта меню пропадает стиль.... Подскажите пожалуйста как подвязать стиль CSS активного пункта меню?  Буду очень при очень благодарен если напишите как.....
*

lawrik2005

  • Новичок
  • 13
  • 0 / 0
Re: Циклические ссылки в меню
« Ответ #18 : 10.07.2018, 23:36:52 »
Метод рабочий, но с активного пункта меню пропадает стиль.... Подскажите пожалуйста как подвязать стиль CSS активного пункта меню?  Буду очень при очень благодарен если напишите как.....
разобрался)))

заменил
echo '<span class='.$class.'>'.$linktype.'</span>';
на
echo '<a class="separator">'.$linktype.'</a>';
*

lawrik2005

  • Новичок
  • 13
  • 0 / 0
Re: Циклические ссылки в меню
« Ответ #19 : 13.07.2018, 15:52:00 »
Незачто. Файлы разные возможно потому, что мой из модуля непосредственно, а не из шаблона.
Как вы можете прокомментировать если данный метод перестаёт работать при переносе сайта на хостинг?
*

Shustry

  • Гуру
  • 6436
  • 743 / 3
  • Рисую дизайны
Re: Циклические ссылки в меню
« Ответ #20 : 18.07.2018, 16:27:04 »
Как вы можете прокомментировать если данный метод перестаёт работать при переносе сайта на хостинг?
Никак. Сделайте var_dump и посмотрите, где ошибка у вас.
Бесплатно консультирую по дизайну и вёрстке (только в личку сердечно прошу не стучать). Платно делаю дизайн, вёрстку и темплейты для Joomla. Работаю только за деньги. За большие. И долго. Но качественно.
---------------------------------------------------------
xmpp:joomla@conference.jabber.ru - наша конфа!
*

Alti-R

  • Новичок
  • 9
  • 0 / 0
Re: Циклические ссылки в меню
« Ответ #21 : 08.09.2019, 19:22:19 »
Копируете из modules\mod_menu\tmpl\ в templates\шаблон\html\mod_menu файл default_component.php. Далее оборачиваете вывод ссылки в условие (начиная с 26-й строки):

Всем привет! В моем шаблоне нет такой папки mod_menu в директории templates\шаблон\html\. Поэтому я создал там эту папку и скопировал туда файл default_component.php, предварительно вставив внутрь код из файла целиком от Shustry. Но все равно ничего не произошло, ссылка на любом активном пункте меню также функционирует на саму себя. Версия Joomla 3.9.11. Не могли бы подсказать пожалуйста что я делаю не так?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Изменить id пунктов меню

Автор dron

Ответов: 6
Просмотров: 187
Последний ответ 03.10.2019, 17:00:34
от dron
Ошибка в меню сайта

Автор volciti

Ответов: 5
Просмотров: 699
Последний ответ 01.10.2019, 14:10:31
от arma
Все новые пункты меню оказываются в корзине

Автор Igor_77

Ответов: 23
Просмотров: 869
Последний ответ 29.09.2019, 21:34:46
от dron
Меню не видит ни одного материала созданных стандартным способом. Нужен совет!

Автор Snip

Ответов: 2
Просмотров: 86
Последний ответ 23.09.2019, 10:06:48
от Snip
Скрыть пункт меню

Автор SuschnosT

Ответов: 7
Просмотров: 2217
Последний ответ 19.09.2019, 12:19:20
от SergeySpace