ADBLOCK_MSG
Стандартный метод через привязку модуля здесь не подходит, поскольку, как описано в упомянутой статье, пункт меню для страницы ошибки не создается. В принципе, таковой пункт создать все-таки можно (не привязывая к нему страницу, а чисто для привязки модулей - вот как раз навигатора в нашем случае). Тогда навигатор можно скрыть для этой страницы, выбрав пункт На всех страницах, кроме указанных | 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 в условие. Можно также перевернуть логику и спрятать навигатор на всех статьях, кроме перечисленных (подробнее - там же). И наконец - она позволяет манипулировать и прочими модулями, для которых выделены отдельные позиции в основном шаблоне сайта.
Комментарии
Вы писали:
Цитата: Я отвечал:
Цитата: Приношу извинения.
Если быть точным, то скрыть нужно на этой страничке:
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 - Страница не найдена! Ужас просто... И решения пока не нашёл...