Структура внутренних ссылок сайта на JoomlaОпубликовано: 13.06.2014 17:11 Автор: Ogri Просмотров: 26915
Внутренние ссылки 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-теги
Популярные
-
94168
Миграция с Joomla 1.5 на Joomla 2.5. Ч.2-1. Перенос jDownloads и jComments -
60856
Редактирование анимированных GIF-имиджей в Photoshop CS3 -
53837
Joomla: Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JComments -
34148
Joomla: как добавить свои языковые константы или переопределить существующие -
33729
Единая фильтрация вывода модуля mod_jcomments_latest
Авторизация
Гитара
Гостевая колонка
Последние комментарии
-
Joomla: Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JComments
-
אתר הבית 24.03.2023 16:59
Spot on with this write-up, I absolutely believe that this website needs a lot more attention.
-
업소알바 24.03.2023 16:31
And, be positive to check out the job tools for local positions and a salary estimator. Here is my ...
-
www.vespermov.com 24.03.2023 15:40
You have made some decent points there. I looked on the net for more info about the issue and found most ...
-
Sc686.net 24.03.2023 15:12
Thanks for every other informative web site. Where else may I am getting that type of info written ...
-
-
Joomla: Какую версию выбрать?
-
Henry 24.03.2023 16:47
%% My web-site - portfolio (Henry: https://www.punterforum.it/profile.php?id=98397)
-
groups 24.03.2023 16:42
%% my blog post - groups: http://ttlink.com/annieyoul0
-
how to Fit a Window 24.03.2023 16:03
%% my web blog - how to Fit a Window ...
-
Ghost Security 24.03.2023 15:56
%% my blog: Ghost Security: http://bbs33.cn/home.php?mod=space&uid=815741
-
-
Структура внутренних ссылок сайта на Joomla
-
Jeramy 24.03.2023 16:41
%% Here is my web blog - portfolios (Jeramy ...
-
Shad 24.03.2023 16:38
%% Here is my web page: vinyl fence installation cost (Shad ...
-
Комментарии
My blog ... Local Window Fitters Near Me (121.88.250.220)
Have a look at my blog post: jacksboro prescription Drugs (https://vimeo.com/)
Feel free to visit my blog window
Stop by my page fitted
my page - how long Does a ghost immobiliser fitting take (linkagogo.trade)
My web-site: enterprise - Elise,
my homepage: gates installed near me [Nadia]
Here is my web-site Group
My site: portfolios
Here is my web page: vinyl fence installation cost (Shad)
Here is my web blog - portfolios (Jeramy)