Joomla 2.5: Убираем хлебные крошки с выбранных страницОпубликовано: 27.08.2013 16:45 Автор: Ogri Просмотров: 22544
Хлебные крошки (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-теги
Популярные
-
101685
Миграция с Joomla 1.5 на Joomla 2.5. Ч.2-1. Перенос jDownloads и jComments -
73896
Joomla: Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JComments -
61618
Редактирование анимированных GIF-имиджей в Photoshop CS3 -
38276
Joomla: как добавить свои языковые константы или переопределить существующие -
34464
Единая фильтрация вывода модуля mod_jcomments_latest
Авторизация
Гитара
Гостевая колонка
Последние комментарии
-
Joomla: Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JComments
-
스웨디시 09.06.2023 22:20
Hello! Do you use Twitter? I'd like to follow you if that would be okay. I'm absolutely enjoying your ...
-
-
Кнопки социальных сетей в Joomla 2.5. Плавающая панель от Share42
-
водка казино 10.06.2023 02:55
Howdy would you mind letting me know which web host you're working with? I've loaded your blog in ...
-
-
Миграция с Joomla 1.5 на Joomla 2.5. Ч.2-1. Перенос jDownloads и jComments
-
canada drugs cialis 09.06.2023 22:30
buy cialis from europe buy cialis sweden canada drugs cialis: https://fforhimsvipp.com/ buy cialis ...
-
lordfilm 09.06.2023 21:30
lordfilm: https://wbw.lordfilmof.com/
-
order viagra generic 09.06.2023 21:07
viagra brand or generic melhor generico do viagra order viagra generic: https://mednewwsstoday.com/ online ...
-
-
Структура внутренних ссылок сайта на Joomla
-
Sofia Weaver 10.06.2023 05:04
We absolutely love your blog and find most of your post's to be exactly I'm looking for. Do you offer ...
-
-
Цифровые коды WEB (веб) цветов для сайта
-
Gnometopia.Org 10.06.2023 04:04
I'd like to find out more? I'd care to find out some additional information. Here is my web blog ...
-
cheapest 09.06.2023 23:46
Howdy exceptional website! Does running a blog like this require a large amount of work? I have ...
-
스웨디시 09.06.2023 23:00
The tool is gently (or vigorously) scraped and rubbed over the skin. Feel free to visit my site : ...
-
滷味 09.06.2023 22:35
With that in thoughts, you are absolutely entitled to want an outfit that lives up to the special ...
-
Комментарии
Вы писали:
Цитата: Я отвечал:
Цитата: Приношу извинения.
Если быть точным, то скрыть нужно на этой страничке:
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 - Страница не найдена! Ужас просто... И решения пока не нашёл...