ADBLOCK_MSG
Joomla 2.5: Убираем хлебные крошки с выбранных страницОпубликовано: 27.08.2013, 16:45 Автор: Ogri Просмотров: 23650
Хлебные крошки (breadcrumbs), известные также как навигатор сайта, - полезный модуль Joomla. И, как всякий модуль, они могут привязываться ко всем или только определенным пунктам меню. Также можно отвязать их от всех или конкретных пунктов. Многие джумловоды желают скрыть навигатор на главной странице сайта, поскольку на ней он содержит только пункт "Главная" | "Home", к тому же без линка, не неся таким образом ни смысловой, ни функциональной нагрузки. Возможно, структура сайта предусматривает и другие страницы, на которых по тем или иным причинам есть смысл скрывать навигатор. Самым типичным примером является кастомная страница ошибки 404, которая, как я отмечаю в соответствующей статье, посвященной правилам ее создания и настройки, должна быть вписана в шаблон сайта, но при этом стоять как бы особняком. Навигатор на ней не только не нужен, но еще и идеологически вреден. Будем рассматривать именно эту страницу как частный случай, описывающий общий принцип отвязки хлебных крошек от определенного материала.
Стандартный метод через привязку модуля здесь не подходит, поскольку, как описано в упомянутой статье, пункт меню для страницы ошибки не создается. В принципе, таковой пункт создать все-таки можно (не привязывая к нему страницу, а чисто для привязки модулей - вот как раз навигатора в нашем случае). Тогда навигатор можно скрыть для этой страницы, выбрав пункт На всех страницах, кроме указанных | 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 в условие. Можно также перевернуть логику и спрятать навигатор на всех статьях, кроме перечисленных (подробнее - там же). И наконец - она позволяет манипулировать и прочими модулями, для которых выделены отдельные позиции в основном шаблоне сайта.
Новые
-
20.07.2020, 00:53
Joomla 3: Перенаправление на ту же страницу после авторизации -
13.02.2017, 14:09
Joomla: как добавить свои языковые константы или переопределить существующие -
13.02.2017, 13:23
Joomla: Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JComments -
23.06.2016, 10:48
Единая фильтрация вывода модуля mod_jcomments_latest -
13.09.2015, 13:06
Постим иллюстрированные статьи Joomla-сайта на Facebook, используя OG-теги
Популярные
-
118186
Миграция с Joomla 1.5 на Joomla 2.5. Ч.2-1. Перенос jDownloads и jComments -
87345
Joomla: Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JComments -
63783
Редактирование анимированных GIF-имиджей в Photoshop CS3 -
60854
Joomla: как добавить свои языковые константы или переопределить существующие -
44742
Цифровые коды WEB (веб) цветов для сайта
Авторизация
Гитара
Гостевая колонка
Последние комментарии
-
Joomla: Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JComments
-
Тест
25.08.2020 11:37
Не выводит сообщение об ошибке, если галку не нажать в рекапче
-
Николай3333
05.08.2020 07:55
Неужели работает?
-
Дарья Смирнова
29.07.2020 06:02
Здравствуйте, все вроде сделала по инструкции, но точно так же никаких изменений. Разве что теперь ...
-
ТвойБро
24.03.2020 03:42
Огромное спасибо, помогло. Странно, что по дефолту в jcomments предлагает в настройках выбрать ...
-
Валерий
21.02.2020 03:25
Проверка
-
Денис
02.01.2020 21:21
УРАААА! Заработало после очистки кэша сайта! Спасибо!
-
Денис
02.01.2020 20:56
Забыл сказать, что этот вариант установился на сайт, но по-прежнему при использовании reCAPTCHA ...
-
Вованя
25.12.2019 18:31
12345
-
Вованя
25.12.2019 18:31
Проверка, просто проверяю. раз раз раз)
-
Тест
25.08.2020 11:37
-
Миграция с Joomla 1.5 на Joomla 2.5. Ч.2-1. Перенос jDownloads и jComments
-
Андрей67
11.08.2020 16:54
У меня такая же картина, нет кнопки Импорт. как быть?
-
Андрей67
11.08.2020 16:54
Комментарии
Вы писали:
Цитата: Я отвечал:
Цитата: Приношу извинения.
Если быть точным, то скрыть нужно на этой страничке:
index.php?option=com_virtuemart&view=opc&controller=opc&task=checkout
В вашем случае условие вывода крошек будет таким:
$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% уверен, что он будет работать. Если сможете - подтвердите. Удачи!
Находите вот этот кусок:
// 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. Если для некоторых по вашему выбору - задайте соответствующие условия.
// 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 . '';
А у меня вот ничего не изменилось(( В общем стоит 3 жумла, В модуле есть кнопка не показывать главную, но она не работает, видать я чето наклацал, т.к. ранее работала. Помогите мне убрать "Главная" или сделать ее не ссылкой.. В меру шаблона главная у меня идет site.ru или site.ru/home, там идет модуль с заставкой на весь екран, и кнопка войти и идет перенаправление на site.tu/glavnaya, на блог категорий.. Так вот, как можно сделать ее неактивной, или вовсе убрать или перенаправить на :glavnaya:
echo artxPost($view->position('position-2'));
http:// ogri.me/, а JURI::current() на главной для каждого языка - http:// ogri.me/ru/ и http:// ogri.me/en/, т.е. с префиксом языка. Условие JRequest::getVar('view') != 'frontpage' работает всегда.
JRequest::getVar('view') != 'frontpage'
например корзину?
JRequest::getVar('view') != 'frontpage' && != 'cart'
так?
JRequest::getVar('view') != 'frontpage' - я таким образом запрятал div с заголовком страницы в карточке товара productdetails.
Чтобы запрятать div в корзине магазина, вместо productdetails указываю cart. Всё работает, div скрывается в корзине. Но вот каким образом указать сразу и productdetails и cart - не знаю. Пробую:
JRequest::getVar('view') != 'productdetails' && != 'cart' - не работает.
else{ if (JRequest::getString('view') != 'productdetails')
Заголовок
if ($view->containsModules('breadcrumb') &&
JRequest::getVar('view') != 'frontpage')
echo artxPost($view->position('breadcrumb'));
И breadcrumb в нём нигде не упоминается (шаблон Артистер)!
Однако "крошки" на странице ошибок висят и бесят! И если убрать букву у любой страницы внутри категорий, для попадания на страницу ошибки оттуда, то крошки выглядят Главная - Категория - Без категории - Ошибка 404 - Страница не найдена! Ужас просто... И решения пока не нашёл...