Добрый день, уважаемые читатели блога Site on! Помните одну из моих первых статей про альтернативу robots.txt, которая даже заняла второе место на конкурсе Сосновского? Пришло время улучшить тот код! Но прежде чем это сделать, хочу напомнить, что способ, указанный в той статье отлично работал и продолжает работать на абсолютно любом сайте и CMS, а не только в Joomla. Сегодня же будет рассмотрен частный случай, мы доведём прошлый код до идеала, но только в Joomla. Поэтому пользователей всех других CMS прошу меня простить, и продолжать использовать предыдущий вариант, который тоже отлично работает.
Нашим подопытным кроликом как всегда будет связка Joomla 2.5 + VirtueMart 2. Итак, в Joomla есть такая прекрасная вещь как MVC (Model-View-Controller) паттерн программирования, который по-русски расшифровывается как модель – представление (вид) - контроллер. Так вот представления в Joomla согласно этому шаблону хранятся в папке views (виды).
Каждая страница в Джумла отрисовывается согласно своему представлению, каждое из этих представлений как-то называется. Например, представление категории VM так и называется – category, представление корзины – cart, карточки товара – productdetails и тд.
Как узнать название текущего представления? Для этого в удобном для вас месте шаблона, например, в файле /templates/ваш_шаблон/index.php сразу после открывающегося тега body пишем:
<body>
<?php
echo JRequest::getVar('view');
?>
А если напишем вот так:
<?php
echo 'Текущее представление: '.JRequest::getVar('view').', текущий компонент: '.JRequest::getVar('option');
?>
То узнаем ещё и название текущего компонента:
Как вы могли догадаться, на скриншоте я нахожусь на главной странице VM.
Ещё один простой способ узнать имя представления, это зайти в папку views интересующего вас компонента и посмотреть названия папок внутри неё. Например, все представления компонента VirtueMart2:
Кстати, в системе шаблонов Джумла есть специально зарезервированная папка под названием html (/templates/ваш_шаблон/html/), в которой могут храниться шаблоны представлений (только представлений!), которые разработчик решил изменить со стандартных, на собственные. Это придумано для удобства обновления: стандартные представления перезапишутся, но работать будут всё равно те, что в папке html.
Теперь к самому главному, что нам всё это даёт? Таким образом, мы можем перестраховаться или даже внести ещё большую универсальность в предыдущую статью на эту же тему.
Например конечный вариант того кода:
<?php if(preg_match('#\?|^/search|/notify$|^/cart|askquestion|^/manufacturer|^/user|^/2-uncategorised|^/component/#', $_SERVER['REQUEST_URI'])){ ?>
<meta name="robots" content="noindex, nofollow" />
<?php } ?>
Можно преобразовать вот так:
<head> <?php // заносим значения option и view в переменные $gwOption = JRequest::getVar('option'); $gwView = JRequest::getVar('view'); if ( (!strstr($_SERVER['REQUEST_URI'], '?start=') and strstr($_SERVER['REQUEST_URI'], '?')) or // запрещаем все страницы, где есть знак вопроса, кроме страниц со стандартной пагинацией Джумлы preg_match('#^/orders|^/search|/notify$|^/cart|^/manufacturer|^/user|^/2-uncategorised|^/component/|askquestion|by,|orderDesc#', $_SERVER['REQUEST_URI']) or // регулярное выражение как в прошлой статье, добавил пару шаблонов $gwOption==='com_users' or // запретить к индексированию страницы входа и регистрации, а также профайлы пользователей и всё, что с ними связано. $gwOption==='com_search' or // запретить страницы поиска ($gwOption==='com_virtuemart' and $gwView!=='category' and $gwView!=='productdetails' and $gwView!=='virtuemart') // запретить к индексации всё, что связанно с VM, кроме страниц категорий, карточек товаров и главной страницы VM. ){ echo '<meta name="robots" content="noindex, nofollow" />'; } ?> … </head>
Стиль написания кода мне не нравиться, но думаю, вам так понятней будет. Вообще это всё можно было записать в одну строку. Код выше это всего лишь пример, рабочий пример. Но в процессе создания сайта вы можете устанавливать новые компоненты, можете изменять URL страниц и так далее, поэтому так или иначе, код можно и нужно подстраивать под свой сайт. Хотя, как я уже писал, этот вариант тоже принесёт вам большую пользу.
Со временем я могу изменить код в этой статье, например, если кто-то внесёт свои предложения, так что не удивляйтесь, если он измениться, тем более SEO – это беспрерывный процесс и совершенству нет предела.
Стоит отметить, что такие проверки можно использовать для совершенно разных целей, а не только для запрета индексации страниц.
Всем спасибо за внимание. Скажите НЕТ дублям страниц, как это сделал Site on!
Пожалуйста, прокомментируйте, как Вам моя статья?