Основной курс по Joomla
0 Пользователей и 1 Гость просматривают эту тему.
  • 19 Ответов
  • 870 Просмотров
*

zimt42

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

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

effrit

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

yandex_hb

  • Давно я тут
  • ****
  • 350
  • 20
Re: Циклические ссылки в меню
« Ответ #2 : 16.08.2016, 11:26:09 »
Модуль меню надо ковырять. А зачем это вообще нужно?
*

Shustry

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

Shustry

  • Группа развития
  • *****
  • 6426
  • 733
  • Рисую дизайны
Re: Циклические ссылки в меню
« Ответ #4 : 16.08.2016, 14: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

  • Новичок
  • *
  • 9
  • 0
Re: Циклические ссылки в меню
« Ответ #5 : 16.08.2016, 15:39:00 »
А зачем это вообще нужно?
Во-первых, то же SEO, страница, ссылающаяся на саму себя теряет в весе, ну и во-вторых, здравый смысл: если я уже зашёл в пункт меню, зачем ссылаться на него же? <a> должен становиться <span>.
*

zimt42

  • Новичок
  • *
  • 9
  • 0
Re: Циклические ссылки в меню
« Ответ #6 : 16.08.2016, 15: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

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

effrit

  • Группа развития
  • *****
  • 7446
  • 815
  • effrit.com
Re: Циклические ссылки в меню
« Ответ #8 : 16.08.2016, 16:04:30 »
zimt42, надо было ужо картинки пиарить, раз взялись мой сайт раскручивать )).

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

zimt42

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

yandex_hb

  • Давно я тут
  • ****
  • 350
  • 20
Re: Циклические ссылки в меню
« Ответ #10 : 16.08.2016, 16:22:51 »
Цитировать
страница, ссылающаяся на саму себя теряет в весе
ИМХО: Вес не теряется и не утекает, нет такого вообще. А вот передаваемый вес уменьшается, да. Но учитывая сколько обычно ссылок бывает на странице — это вообще не существенно.

Цитировать
Особенно, когда есть список из подменю, и я в одном из них, то я не должен мочь по нему кликнуть и перезагрузить страницу тем самым
Ну вообще-то многие так делают, чтобы перезагрузить страницу, особенно если на странице динамический контент. Для юзабилити важно показать, что пользователь уже на этой странице, а кликабельна ссылка или нет — пофигу.
*

effrit

  • Группа развития
  • *****
  • 7446
  • 815
  • effrit.com
Re: Циклические ссылки в меню
« Ответ #11 : 16.08.2016, 16:24:19 »
zimt42, просто если со стороны js, то там более понятно, чего делать, и можно универсальный код написать с минимумом подгонки под разные сайты.
смысл в том, что активному меню вешается свой уникальный класс, так что можно скриптом выбирать все ссылки с этим классом (или вложенные в этот класс) и удалять им href-атрибут.

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

Shustry

  • Группа развития
  • *****
  • 6426
  • 733
  • Рисую дизайны
Re: Циклические ссылки в меню
« Ответ #12 : 16.08.2016, 16: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

  • Новичок
  • *
  • 9
  • 0
Re: Циклические ссылки в меню
« Ответ #13 : 16.08.2016, 16:44:07 »
ИМХО: Вес не теряется и не утекает, нет такого вообще.
Мне кажется, что мы о разном весе говорим. Я про тот, который поисковыми машинами учитывается при выдаче, где сотни факторов влияют. И вот ссылательство на саму себя — это минус юзабилити и странице.

effrit, а, я вспомнил, почему отложил мысль с js и выборкой по активному классу (поизголяться может и можно, но..): есть у нас пункт-меню-1, мы в нём, оно с классом активности, запрещаем клик. А потом мы идем в подменю! И надо чтобы родитель в данном случае был также с классом active, но кликабельным, ведь сейчас мы не в нём, а в его потомке, вот в чём заковырка
*

zimt42

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

Shustry

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

zimt42

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

Mr.Can

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

dmitry_stas

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

Mr.Can

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