ADBLOCK_MSG
Структура внутренних ссылок сайта на JoomlaОпубликовано: 13.06.2014, 17:11 Автор: Ogri Просмотров: 38398
Внутренние ссылки Joomla и примеры их применения :: ОГЛАВЛЕНИЕ
Структура внутренних ссылок сайта на Joomla
Фильтруем контент по материалам, категориям и компонентам
Единая фильтрация вывода модуля mod_jcomments_latest
end faq
За последнее время я написал и внедрил несколько функций, позволяющих фильтровать вывод страниц сайта, работающего на CMS Joomla версии 2.5 и новее. Перед тем, как поделиться ими с общественностью, затрону тему, вынесенную в заголовок этой статьи, поскольку понимание принципа формирования внутренних ссылок на страницы джумловских приложений поможет лучше разобраться в их алгоритмах.
Немного теории
Приложения для CMS Joomla разрабатываются в виде компонентов. Компоненты отвечают за вывод страниц сайта. Ссылка на каждую страницу генерируется в соответствующем компоненте в стандартном формате URI:
http://[имя сайта]/index.php?[строка запроса]
Строка запроса (query string) представляет из себя последовательность пар ключ=значение
, разделенных амперсандом. Значения ключей и определяют вывод каждой страницы. URI страниц генерируются в соответствии со структурой компонента. Нас сейчас интересует не механизм формирования ссылок, а результат для каждой страницы или групп страниц конкретного приложения. Зная, как идентифицировать ключи и их значения, можно гибко манипулировать выводом контента.
Замечу лишь, что в вышеприведенном формате вы увидите ссылку в адресной строке браузера только при условии, что для сайта отключено ЧПУ (SEF). При включенном ЧПУ ссылки преобразуются роутером в более вразумительный для человеческого восприятия вид. Нас же интересуют именно внутренние ссылки, поэтому для получения ключей и их значений из адресной строки можно отключить ЧПУ на тестовой площадке.
Фреймворк Джумлы определяет некоторое количество стандартных ключей. Рассмотрим самые используемые из них.
- option - имя компонента с префиксом
'com_'
; - view - вид (или представление) конкретной страницы компонента;
- layout - дополнительный вариант вывода конкретного вида;
- Itemid - идентификатор пункта меню, к которому привязана страница, если таковая привязка имеет место.
- lang - язык страницы.
В случае мультиязычного сайта добавляется еще и параметр
В каждом компоненте разработчиками могут быть добавлены ключи, используемые для формирования ссылок на страницы данного конкретного приложения. Например, базовый компонент Джумлы com_content
, формирующий структуру категорий и материалов, оперирует следующими дополнительными ключами:
- id - идентификатор материала или категории в зависимости от текущего представления. Принимает значение ID материала в случае вывода конкретной статьи (
view=article
). ID категории этот ключ содержит при выводе списка категорий (view=categories
) или материалов в виде списка или блога категории (view=category
); - catid - идентификатор категории, в которую входит выводимый материал (
view=article
).
Значения ключей для этого компонента:
- option -
com_content.
- view -
archive
- архивные материалы;article
- материал;categories
- список категорий;category
- материалы категории в виде списка или блога;featured
- избранные материалы в виде блога;form
- форма создания или редактирования материала.
- layout -
blog
- вывод материалов категории в виде блога в представлении категории (view=category);edit
- вариант для представления формы создания или редактирования материала (view=form
). Есть ещеpagebreak
иmodal
. Маловероятно, что какой-нибудь из них пригодится на практике. Разве что первый, да и то лишь для удобства пользователей с правами редактирования.
- lang - присутствует в URI всех страниц многоязычного Joomla-сайта и содержит двухбуквенный идентификатор активного языка, соответствующий параметру Код языка для URL | URL Language Code в настройках языков в админке - например:
ru
,en
. (О языках и их настройках упоминается, например, в статье о кастомной странице 404.) - Itemid, id и catid - принимают значения идентификаторов в соответствии с видом выводимой страницы контента; при этом, если первый из них всегда содержит ID пункта меню в виде числа, то остальные два в определенном контексте могут иметь форму
[ID]:[алиас]
. Об этом еще будет упоминаться ниже.
Примеры вывода страниц компонентом com_content
Рассмотрим несколько примеров содержимого ключей строки состояния в URI определенных страниц приложения com_content.
Пример 1.
На странице, привязанной к пункту меню 35, отображается блог избранных материалов англоязычной части сайта:
option=com_content&view=featured&Itemid=35&lang=en
Пример 2.
Выводится материалы категории с id=27 в виде блога на русской части сайта. Пункт меню, к которому привязана страница - 62:
option=com_content&view=category&layout=blog&id=27&Itemid=62&lang=ru
Если бы отсутствовала пара
layout=blog
, то материалы выводились бы по умолчанию в виде списка.Пример 3.
Страница статьи, которую вы сейчас читаете:
option=com_content&view=article&id=813:struktura-vnutrennikh-ssylok-sajta-na-joomla&catid=27:stroim-sajty&Itemid=62&lang=ru
Последний пример как раз иллюстрирует случай, когда идентификаторы материала и категории содержат также и алиасы, отделенные двоеточием от ID в числовом представлении. В разделе о применении ключей строки запроса будет разобрано, как их обрабатывать.
Таким образом, отключив ЧПУ на тестовом сайте, можно увидеть параметры любой страницы в строке адреса вашего браузера.
Использование на практике
Если у вас хватило терпения продраться через предыдущие разделы, поздравляю: пришло время рассмотреть область применения полученных сведений.
Знание параметров запроса позволяет сформировать условие для отработки какого-либо кода только на одной или нескольких конкретных страницах сайта, а также для группы страниц, объединенных общим признаком - компонентом, категорией или языком.
Для создания такого условия воспользуемся конструкцией:
$value = JFactory::getApplication()->input->getCmd([ключ]);
в которой вместо [ключ]
будем подставлять строки с именами интересующих нас параметров. Возвращает getCmd
значение ключа в виде строки. Например, условие для страниц, относящихся к материалам и категориям компонента com_content
, выйдет таким:
$option = JFactory::getApplication()->input->getCmd('option'); if ($option == 'com_content') { ... }
Для целочисленных идентификаторов можно использовать метод getInt
:
$Itemid = JFactory::getApplication()->input->getInt('Itemid'); if ($Itemid == 1) { ... }
Единственная заковыка возникает в том самом случае, когда идентификаторы могут сопровождаться двоеточием и алиасом (псевдонимом). Хоть эти хвосты и добавляются к ID только когда ЧПУ отключено, такие случаи нужно обработать: а вдруг ЧПУ таки понадобится отключить? Нужен универсальный вариант. Поэтому условие по материалам и категориям будет чуть сложнее:
$temp = explode(':', $jinput->getCmd('id')); $article_id = $temp[0] + 0;
(Этот подход уже применялся в статьях о скрытии хлебных крошек на определенных страницах и об избирательном выводе кнопок соцсетей.)
Теперь можно создать блок кода инициализации всех переменных, соответствующих интересующим нас ключам запроса компонента:
$jinput = JFactory::getApplication()->input; $option = $jinput->getCmd('option'); $lang = $jinput->getCmd('lang'); $view = $jinput->getCmd('view'); $layout = $jinput->getCmd('layout'); $Itemid = $jinput->getInt('Itemid'); $temp = explode(':', $jinput->getCmd('id')); $art_cat_id = $temp[0] + 0; $temp = explode(':', $jinput->getCmd('catid')); $cat_id = $temp[0] + 0;
Получив значения параметров вывода страниц, можно комбинировать их при создании условий для фильтрации контента. Функции, упомянутые в начале статьи, содержат именно такие условия.
В заключение - несколько замечаний. Те, кто использует дополнительные фреймворки - K2, T3 и т. д. - могут вытащить ключи, предусмотренные их разработчиками, по тому же принципу. Как, впрочем, и из любых других компонентов. Те же, кто хочет сам создавать оригинальные компоненты на основе существующих или с нуля, могут почитать в сети о паттерне MVC (Модель-Вид-Контролер | Model-View-Controller), разобраться с методом JRoute
и прочими девелоперскими премудростями. И последнее, что хотел бы отметить: кастомизация под себя - это здорово, но вносить свой код в ядро и расширения следует очень аккуратно, стараясь свести к минимуму процесс восстановления изменений после установки обновлений.
Новые
-
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-теги
Популярные
-
117234
Миграция с Joomla 1.5 на Joomla 2.5. Ч.2-1. Перенос jDownloads и jComments -
86618
Joomla: Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JComments -
63659
Редактирование анимированных GIF-имиджей в Photoshop CS3 -
59530
Joomla: как добавить свои языковые константы или переопределить существующие -
44310
Цифровые коды 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
Комментарии
Это опасно для SEO? Для правильного подсчета конверсий?
Вообще-то строки запроса в человекоудобном виде должны появляться только на вспомогательных страницах - результатах поиска, страницах авторизации и т.п. Я, например, внес в robots.txt строку Disallow: /*?, запретив все такие страницы для индексирования.
В вашем случае я попробовал бы исследовать, зачем добавляется значение Itemid. Если бросите линк на сайт (здесь в камментах или в личку - ogri.me/ru/obratnaya-svyaz) - возможно, смогу ответить конкретнее.