Стандартный метод через привязку модуля здесь не подходит, поскольку, как описано в упомянутой статье, пункт меню для страницы ошибки не создается. В принципе, таковой пункт создать все-таки можно (не привязывая к нему страницу, а чисто для привязки модулей - вот как раз навигатора в нашем случае). Тогда навигатор можно скрыть для этой страницы, выбрав пункт На всех страницах, кроме указанных | On all pages except those selected в списке Привязка модуля | Module Assignment на странице редактирования параметров модуля в админке сайта. Такой способ в данном случае вполне работает, при добавлении новых пунктов в разные меню breadcrumbs будут привязываться к ним автоматически, так что делать это каждый раз вручную не понадобится (в отличие от варианта Только на указанных страницах | Only on the pages selected, тут придется ручками добавлять каждый созданный пункт меню в модуль). Однако минус его - необходимость создания меню для материалов, когда другой нужды в них не наблюдается. Все эти меню добавляются как дополнительные табы в разделы Выбор меню | Menu Selection всех модулей и загромождают интерфейс. Особенно это проявляется в случае мультиязычности, когда приходится создавать меню для каждого языка отдельно, и, соответственно, количество табов в интерфейсах редактирования модулей возрастает пропорционально количеству языков.

Учитывая вышеприведенные доводы, предпочитаю альтернативное решение. Правда, оно потребует некоторых навыков чтения и редактирования PHP-кода. Однако, если точно следовать инструкции - то самых что ни на есть минимальных.

А начнем мы, как всегда, с поиска файла и места в его коде, куда будут вноситься изменения. Модуль хлебных крошек имеет отдельную позицию, которая задается в файле index.php активного шаблона. Находится он в папке templates\[my_template], и вместо [my_template] каждый подставляет папку своего шаблона. Откроем файл на редактирование и найдем вхождение модуля навигатора в его коде. Тут возможны варианты. Например, в поставляемых с Джумлой шаблонах Beez2 и Beez5 искомый кусок кода выглядит так:

<div id="breadcrumbs">
 
  <jdoc:include type="modules" name="position-2" />
 
</div>

В моем кастомном шаблоне, структура которого была построена в Artisteer, навигатор выводится специальной функцией artxPost, вызов которой в index.php выглядит так:

if ($view->containsModules('breadcrumb')
  echo artxPost($view->position('breadcrumb'));

В других шаблонах код хлебных крошек может быть другим, но общий принцип таков: найти нужное место в коде можно, поискав либо по слову "breadcrumb", либо, если в вашем шаблоне модуль стоит в позиции с менее интуитивно подходящим именем - то по этому имени. Выяснить позицию модуля легко на странице его редактирования в админке. Также может прояснить картину с модулями предпросмотр позиций в менеджере шаблонов (если включить предварительно опцию Просмотр позиций модулей | Preview Module Positions в его настройках).

Теперь определим код, позволяющий скрыть вывод модуля в зависимости от наших условий. Если просто требуется убрать его с главной страницы, критерий будет таким:

JRequest::getVar('view') != 'frontpage'

Применив его для первого примера (Beez2 или Beez5), изменим приведенную часть кода на следующую:

<div id="breadcrumbs">
 
<?php if (JRequest::getVar('view') != 'frontpage') { ?>
  <jdoc:include type="modules" name="position-2" />
<?php } ?>
 
</div>

Во втором примере (шаблон, построенный в Artisteer) измененный код будет иметь такой вид:

if ($view->containsModules('breadcrumb') &&
    JRequest::getVar('view') != 'frontpage')
  echo artxPost($view->position('breadcrumb'));

Вернемся теперь к ситуации, когда требуется убрать модуль навигатора со страниц, выводящих конкретные материалы. Рассмотрим случай мультиязычного сайта (а именно - двуязычного, каковым является мой на момент написания этих строк) и ликвидируем хлебные крошки с обеих страниц 404 - русской и английской. Начнем с того, что узнаем ID соответствующих материалов. Это легко сделать, найдя их в списке материалов в админке сайта. В моем случае идентификатор русской страницы - 80, английской же - 448. В следующих фрагментах кода, призванных, как и в предыдущем случае, заменить существующие, подставьте вместо них свои значения (подробнее об этой конструкции - в статье, описывающей методику избирательного вывода социальных кнопок).

Первый пример:

<div id="breadcrumbs">
 
<?php
  $article_id = explode(':', JRequest::getVar('id'));
  if (!(JRequest::getVar('view') == 'article' &&
        ($article_id[0] == '80' || $article_id[0] == '448'))) {
?>
  <jdoc:include type="modules" name="position-2" />
<?php } ?>
 
</div>

Второй пример:

if ($view->containsModules('breadcrumb') &&
    !(JRequest::getVar('view') == 'article' &&
      ($article_id[0] == '80' || $article_id[0] == '448'))) {
  echo artxPost($view->position('breadcrumb'));

По этой методике можно скрыть хлебные крошки и с других страниц, просто добавив их ID в условие. Можно также перевернуть логику и спрятать навигатор на всех статьях, кроме перечисленных (подробнее - там же). И наконец - она позволяет манипулировать и прочими модулями, для которых выделены отдельные позиции в основном шаблоне сайта.

Комментарии  

Николай
0 # Николай 29.03.2014 16:41
Когда вызываю страницы сайта с помощью хлебных крошек, то на страницу вылезает все, что связанно с данной категорией -все тексты данной категории, список статей, в общем, черти-что. Не связано ли это с тем, что у меня статьи не привязаны к меню, а вызываются по ссылкам в главной статье категории?
Ogri
0 # Ogri 15.04.2014 23:17
Николай, уверен, что вы уже знаете ответ на вопрос, заданный вами больше двух недель назад. Я, к сожалению, по некоторым причинам не смог отреагировать оперативно. Если тем не менее вопрос для вас все еще актуален - дайте знать, подумаем.
Ogri
0 # Ogri 17.04.2014 19:13
Николай, по ошибке потер ваш следующий комментарий и мой ответ на него. Восстанавливаю.
Вы писали:
Цитата:
Второй день бьюсь с этой темой. Скорее всего до конца не понимаю принцип работы крошек и их взаимосвязь с меню, деревом категорий и материалами.
Я отвечал:
Цитата:
Крошки привязаны к структуре меню. Вызов страницы через крошки такой же, как и по клику на пункт меню. А вот что там будет на странице, зависит от привязки конкретного пункта меню.
Приношу извинения.
Денис
0 # Денис 04.06.2014 07:31
Подскажите пожалуйста, как исключить хлебные крошки на страничке для которой нет возможности создать пункт меню?
Если быть точным, то скрыть нужно на этой страничке:
index.php?option=com_virtuemart&view=opc&controller=opc&task=checkout
Ogri
0 # Ogri 04.06.2014 16:09
Я именно сейчас делаю статью о выборочной привязке не только к материалам, но и к категориям, а также к компонентам и их отдельным страницам. А тут вы как раз своим вопросом подтвердили, что это актуально не только мне.

В вашем случае условие вывода крошек будет таким:

$jinput = JFactory::getApplication()->input;

$option = $jinput->getCmd('option');
$view = $jinput->getCmd('view');
$controller = $jinput->getCmd('controller');
$task = $jinput->getCmd('task');

if (!($option == 'com_virtuemart' && $view == 'opc' && $controller == 'opc' && $task == 'checkout')) {
  /* выводить хлебные крошки */
}

Я не использую virtuemart и не могу потестить этот код, но тестил подобный на других компонентах и на 99% уверен, что он будет работать. Если сможете - подтвердите. Удачи!
Денис
0 # Денис 11.06.2014 06:28
Спасибо за оперативный ответ, но потестить так и не удалось. В нужном мне шаблоне shaper_megadeal позиции и настройки модулей хранятся в папочке лейаут в формате json, так что нужно изобретать новый велосипед :-)
Ogri
0 # Ogri 11.06.2014 23:29
В этом случае можно внести код в сам модуль крошек. Мне приходилось его кастомизировать, найти место, куда всунуть фильтр, несложно. Вопрос - стоит ли игра свеч, поскольку подобные кастомизации приходится тащить через обновления. В json тоже можно влезть, есть средства. Если вам действительно важно убрать крошки с определенных страниц - можем разобрать ваш случай. Если же это не сильно принципиально - оставьте как есть.
Олег
0 # Олег 12.09.2014 07:31
Как в breadcrumb поставить nofollow главной странице, если материал находится в 3 кликах от главной?
Ogri
0 # Ogri 13.09.2014 20:30
Странная задача. Впрочем, легко решаемая. Немножко кастомизируется модуль breadcrumbs или пишется плагин. Тут вообще неважно, сколько крошек от материала до главной. Я сейчас немного занят, но если вы подтвердите, что вам эта задача важна, с удовольствием отвлекусь от своих занятий и выдам решение.
Олег
0 # Олег 17.09.2014 04:52
Я через breadcrumbs часть автоматической перелинковки делаю, но в джумле немогу разобраться как ставить nofollow в нём по заданным условиям.
Ogri
0 # Ogri 18.09.2014 15:06
Редактируете файл [корень_сайта]\modules\mod_breadcrumbs\tmpl\default.php

Находите вот этот кусок:

// Render all but last item - along with separator
if (!empty($item->link))
{
    echo '<a href="' . $item->link . '" class="pathway">' . $item->name . '</a>';
}

Если хотите сделать nofollow только для линка на главную, заменяете третью строчку на такую:

echo '<a href="' . $item->link . '" class="pathway"' . ($key == 0 ? ' rel="nofollow"' : '') . '>' . $item->name . '</a>';

Если для всех - убираете условие $key == 0. Если для некоторых по вашему выбору - задайте соответствующие условия.
Олег
0 # Олег 23.09.2014 05:12
Спасиб за помощь, сделал условие, получилось идеално для меня
// Find last and penultimate items in breadcrumbs list
end($list);
$last_item_key = key($list);
prev($list);
$penult_item_key = key($list);
$Result = array();
foreach ($list as $key) {
$Result[] = $key;
}
if (count($Result) == 3) {
$rel = 'rel="nofollow"';
}
if (count($Result) >= 4) {
$rel2 = 'rel="nofollow"';
}
// Generate the trail
foreach ($list as $key=>$item) :
// Make a link if not the last item in the breadcrumbs
$show_last = $params->get('showLast', 1);
if ($key != $last_item_key)
{
// Render all but last item - along with separator
if (!empty($item->link))
{
echo '' . $item->name . '';
Олег
0 # Олег 23.09.2014 05:17
a'. ($key == 0 ? $rel : '').($key == 0 ? $rel2 : '').($key == 1 ? $rel2 : '').' href="' . $item->link . '" class="pathway" >'
Александр я
0 # Александр я 07.12.2014 05:51
Цитирую Ogri:
Редактируете файл [корень_сайта]\modules\mod_breadcrumbs\tmpl\default.php

Находите вот этот кусок:

// Render all but last item - along with separator
if (!empty($item->link))
{
    echo '<a href="' . $item->link . '" class="pathway">' . $item->name . '</a>';
}

Если хотите сделать nofollow только для линка на главную, заменяете третью строчку на такую:

echo '<a href="' . $item->link . '" class="pathway"' . ($key == 0 ? ' rel="nofollow"' : '') . '>' . $item->name . '</a>';

Если для всех - убираете условие $key == 0. Если для некоторых по вашему выбору - задайте соответствующие условия.

А у меня вот ничего не изменилось(( В общем стоит 3 жумла, В модуле есть кнопка не показывать главную, но она не работает, видать я чето наклацал, т.к. ранее работала. Помогите мне убрать "Главная" или сделать ее не ссылкой.. В меру шаблона главная у меня идет site.ru или site.ru/home, там идет модуль с заставкой на весь екран, и кнопка войти и идет перенаправление на site.tu/glavnaya, на блог категорий.. Так вот, как можно сделать ее неактивной, или вовсе убрать или перенаправить на :glavnaya:
Олег
0 # Олег 17.09.2014 05:35
На счёт скрытия крошек с вариантом joomla 2.5.19 и Artisteer if ($view->containsModules('position-2') && JURI::current() != JURI::base())
echo artxPost($view->position('position-2'));
Ogri
+1 # Ogri 18.09.2014 14:55
Такой вариант не универсален - не годится для мультиязычного сайта. Мой как раз такой - двуязычный. JURI::base() у меня -
http:// ogri.me/, а JURI::current() на главной для каждого языка - http:// ogri.me/ru/ и http:// ogri.me/en/, т.е. с префиксом языка. Условие JRequest::getVar('view') != 'frontpage' работает всегда.
Олег
0 # Олег 23.09.2014 05:12
Условие JRequest::getVar('view') != 'frontpage' у меня не сработало
Евген
0 # Евген 11.01.2016 08:14
а как добавить еще страницу в условие?
JRequest::getVar('view') != 'frontpage'

например корзину?
JRequest::getVar('view') != 'frontpage' && != 'cart'
так?
Ogri
0 # Ogri 12.01.2016 00:05
Какую корзину? В электронном магазине? Зависит от компонента. JRequest::getVar('view') != 'frontpage' - это для com_content, в нем корзины нет. Вы почитайте вот это - ogri.me/ru/web-design-development/813-struktura-vnutrennikh-ssylok-sajta-na-joomla и до комплекта еще ogri.me/ru/web-design-development/816-joomla-filtruem-kontent-po-materialam-kategoriyam-i-komponentam. Там всё для введения условий, подобных вашему с корзиной.
Евген
0 # Евген 12.01.2016 02:59
Да, электронного магазина.
JRequest::getVar('view') != 'frontpage' - я таким образом запрятал div с заголовком страницы в карточке товара productdetails.








Чтобы запрятать div в корзине магазина, вместо productdetails указываю cart. Всё работает, div скрывается в корзине. Но вот каким образом указать сразу и productdetails и cart - не знаю. Пробую:
JRequest::getVar('view') != 'productdetails' && != 'cart' - не работает.
Евген
0 # Евген 12.01.2016 03:01
if(JURI::current()== JURI::base())
else{ if (JRequest::getString('view') != 'productdetails')

Заголовок
Евген
0 # Евген 12.01.2016 08:05
разобрался) прописал != ('productdetails' || 'cart')
Алексей
0 # Алексей 01.02.2016 19:26
Ну весь index.php обрыл вдоль и поперёк! Нет у меня ничего похожего на:
if ($view->containsModules('breadcrumb') &&
JRequest::getVar('view') != 'frontpage')
echo artxPost($view->position('breadcrumb'));

И breadcrumb в нём нигде не упоминается (шаблон Артистер)!

Однако "крошки" на странице ошибок висят и бесят! И если убрать букву у любой страницы внутри категорий, для попадания на страницу ошибки оттуда, то крошки выглядят Главная - Категория - Без категории - Ошибка 404 - Страница не найдена! Ужас просто... И решения пока не нашёл...
Ogri
0 # Ogri 01.02.2016 20:11
Я сто лет назад делал шаблон в Артистере, да и статье три с половиной года. Бросьте ваш index.php на мыло (), гляну.
Роман
0 # Роман 28.05.2016 04:33
Здравствуйте. Подскажите пожалуйста, куда смотреть в такой ситуации: на главную привязан отдельный материал (zoo item), нужно чтобы модуль breadcrumbs вообще не выводился на главной(конкретно этом материале). В настройках модуля joomla не получается, только видимо правкой кода. Буду очень благодарен за помощь!

Оставлять комментарии могут только зарегистрированные пользователи.

Работая с этим сайтом, вы даете свое согласие на использование файлов cookie, необходимых для сохранения выбранных вами настроек, а также для нормального функционирования сервисов Google.