За последнее время я написал и внедрил несколько функций, позволяющих фильтровать вывод страниц сайта, работающего на 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. Пример 1.

    На странице, привязанной к пункту меню 35, отображается блог избранных материалов англоязычной части сайта:

    option=com_content&view=featured&Itemid=35&lang=en
  2. Пример 2.

    Выводится материалы категории с id=27 в виде блога на русской части сайта. Пункт меню, к которому привязана страница - 62:

    option=com_content&view=category&layout=blog&id=27&Itemid=62&lang=ru

    Если бы отсутствовала пара layout=blog, то материалы выводились бы по умолчанию в виде списка.

  3. Пример 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 и прочими девелоперскими премудростями. И последнее, что хотел бы отметить: кастомизация под себя - это здорово, но вносить свой код в ядро и расширения следует очень аккуратно, стараясь свести к минимуму процесс восстановления изменений после установки обновлений.

Комментарии  

seo Uk Prices
0 # seo Uk Prices 22.11.2022 18:04
%%

Look at my homepage seo Uk Prices
Ответить | Ответить с цитатой | Цитировать
1win partenaire
0 # 1win partenaire 23.11.2022 22:43
Great delivery. Outstanding arguments. Keep up the good
spirit.

My webpage ... 1win partenaire
Ответить | Ответить с цитатой | Цитировать
Bowling Centres
0 # Bowling Centres 24.11.2022 04:45
Dr. John Rackham

Dr. John Rackham earned һis Doctor оf Pharmacy degrese fгom Washington Ꮪtate University in 2009.
Нe is a memberr of the International Society օf Cannabis Pharmacists (ISCPh)
аnd іs cuyrrently ѡorking onn his Endocannabinoid Medicine Certification, offered tһrough Ƭhe
American Journal оf Endocannabinoid Medicine. Ηe is also
a memƄer of thе American Pharmacists Association (APhA), tһe
National Community Pharmacy Association (NCPA), аnd the Washington Stаte Pharmacy Association. Нe earned ɑ Certifiication іn Endocannabinoid Medicine fгom Cannabis Patient Care іn 2022.


Foor almost 12 yeɑrs, Dг. Rackham has advised ɑnd educatesd patients on howw tto Ьest ᥙse their medication, safely аnd effectively.
Іn 2017, he recognized thee need and demand fоr CBD education іn hiss
own pharmacy. Realizing tһe potential health benefits tһat CBD сould offer, he researched аnd sought
oᥙt a high-quality CBD manufacturer, then established ɑnd grew the CBD portion oof һiѕ business.

Dr. Rackham quіckly bеcаme an in-house CBD expert, providing
guidance аnd counsel for proper use, including evidence-based
indications, dosing, administration, ѕide effects, drug interactions, ɑnd expectations οf
therapy.

Ιn his spare time, hhe studies taekwondo ѡith һis son, plays іn ann ’80s rock cover band, ɑnd enjoys vacationing
іn Hawaii ԝith hіs family.

https://www.bondara.co.uk. https://www.lovehoney.co.uk. https://www.simplypleasure.com. https://www.sextoys.co.uk. https://www.pulseandcocktails.co.uk. https://liberation-x.com. https://www.mylovely.uk. https://www.wickedsextoys.uk. https://sexsuperstore.co.uk. https://www.love-sextoys.co.uk. https://www.prowler.co.uk. https://www.cultbeauty.co.uk.https://www.lovepleasure.co.uk. https://loveplugs.co.uk. https://loveoutlet.co.uk. https://www.therange.co.uk. https://mood-direct.co.uk. https://www.idealo.co.uk. https://missspice.co.uk. https://lovegasm.uk. https://www.lovense.com. https://www.uberkinky.com/. https://www.adameve.com/. https://cloudclimax.co.uk/. https://lacoquette.com/. https://www.selfandmore.co.uk/. https://kandid.com/. https://www.harmonystore.co.uk/. https://www.kinkly.com/. https://lovedepot.com/. https://www.cbdmd.com/cbd-gummies. https://cbdfx.com/collections/cbd-gummies/. https://cbd.market/cbd-gummies. https://hempbombs.com/cbd-gummies/. https://www.charlottesweb.com/all-charlottes-web-hemp-cbd-supplements/cbd-gummies. https://greenroads.com/collections/cbd-edibles-gummies. https://fivecbd.com/products/cbd-gummies?variant=39671891558490. https://www.cornbreadhemp.com/products/full-spectrum-cbd-gummies?selling_plan=772636852. https://cheefbotanicals.com/cbd-gummies/vegan/. https://hempbombsplus.com/. https://www.exhalewell.com/delta-8-gummies/. https://www.3chi.com/product/delta-8-thc-gummies/. https://area52.com/delta-8-gummies/. https://mysticlabsd8.com/delta-8-gummies/. https://purekana.com/products/delta-8-gummies-500mg/. https://www.privatelondonclinic.co.uk. https://www.omniya.co.uk. https://hedoxclinic.co.uk. https://facecliniclondon.com. https://www.londonlipclinic.co.uk. https://skinscienceclinic.co.uk. https://www.harleystreetinjectables.com. https://www.alaesthetics.co.uk. http://www.cosmeticskinclinic.com. https://www.drdandhunna.com. https://www.juveaaesthetics.com. http://www.surgicareaesthetics.uk. https://botoxnearme.uk. http://www.se1medicalaesthetics.com. http://prettygirlsaesthetics.co.uk. http://www.matacourses.com. https://www.meliorclinics.co.uk. https://nmlondon.com. https://www.cosmedocs.com. https://www.claphamskinclinic.co.uk. https://www.clinicbe.com. http://www.regentsparkaesthetics.co.uk. http://www.sheridanfrance.co.uk. https://cityskinclinic.com. http://www.phiclinic.com. http://www.askinology.com. http://www.medicetics.com. http://www.cosmeticfillerslondon.co.uk. http://www.drmendelovici.com. https://www.faceandfillers.com. https://www.artistryclinic.co.uk. http://www.amsaesthetics.com. http://www.drpaulclinics.co.uk. https://www.drinjyghanem.co.uk. https://www.thelondoncosmeticclinic.co.uk. http://drsophie.co.uk. http://www.groveparkaesthetics.com. https://www.vaaesthetics.com. http://www.2glow.co.uk. https://www.harleystreetdermal.co.uk. https://www.cosmedics.co.uk. http://mnkaesthetics.com. https://www.fresha.com. http://www.whiteswanaesthetics.co.uk. https://theharleystreetfillerspecialistslondon.co.uk. http://faaesthetics.com. http://www.revereclinics.com. https://www.teartroughfillerlondon.co.uk. http://mypureaesthetics.com. https://www.mayfaircliniclondon.com. https://drbela.clinic. http://www.dermamina.com. http://www.lumaesthetic.co.uk. http://www.haclinic.co.uk. https://epicdermis.co.uk. http://www.canarywharfaesthetics.co.uk. https://dranitadhunna.com. http://capital-aesthetics.co.uk. https://acquisitionaesthetics.co.uk. https://www.essentialslondonspa.com. http://www.dermisclinics.co.uk. https://www.dermaaestheticslondon.com. https://www.drtatiana.co.uk. https://www.drsebagh.com. https://www.imperialaesthetics.co.uk. http://www.dermadoc.co.uk. http://www.lipfillers.london. http://thelovelyclinic.co.uk. http://www.thelondonfacialcare.co.uk. https://www.drayad.com. https://liniaskinclinic.com. http://dermaplusaesthetics.co.uk. http://dermexgroup.com. https://www.theaestheticcliniclondon.com. http://www.medikaur.com. https://www.medastrum.co.uk. http://www.thewrinkledr.co.uk. http://prettywomancosmeticclinic.co.uk. https://www.drdavidjackclinic.com. http://www.londonlips.co.uk. https://drsophieshotter.com. https://www.refreshlondonmedicalaesthetics.co.uk. https://amaesthetics.clinic. http://asallure.co.uk. http://www.novumaesthetics.co.uk. http://www.lipsandlinesaesthetics.com.https://www.tweakyourface.com. http://www.dremmaaesthetics.co.uk. https://facialaestheticsinthecity.co.uk. https://aestheticsdoc.co.uk. https://www.intoskinmedical.com. http://www.lucybanks.co.uk. http://www.thebab.co.uk. https://www.antiwrinkleclinic.co.uk. http://harleystreetskinclinic.com. https://theskinsuite.co.uk. http://drcindyaesthetics.square.site. http://www.essclinic.co.uk. http://www.woodfordmedical.com. https://dermamedicalclinics.co.uk. https://drnandra.com. https://www.skinoza.co.uk. https://www.eshoclinic.co.uk. http://aestha.co.uk. http://drmarconicoloso.com. http://www.drsabina.co.uk. http://www.bijoux-medispa.co.uk. https://youthtopiaskin.co.uk. https://santanaaesthetics.simplybook.it. http://www.jfressex.squarespace.com. http://bootifulaesthetic.com. http://www.kbaestheticslondon.com. https://www.abskinclinic.uk. https://yollysaesthetics.co.uk. https://61dd9e54f26f8.site123.me. http://www.lieselholler.com. http://www.flawlessaestheticsbyeb.co.uk. http://silkaesthetics.co.uk. http://www.thelondonaestheticscompany.com. https://www.kumushaesthetic.co.uk. http://www.soyouaesthetics.com. https://theaestheticline.co.uk. http://www.malminskin.co.uk. http://www.thebloomclinic.co.uk. http://www.thewhiteclinicdermomedica.com. https://seanwhiteaesthetics.com. https://www.skynnlondon.co.uk. https://www.vivaskinclinics.com. https://www.purehealthaesthetics.com. http://www.fillandfreeze.co.uk. https://www.facebook.com. https://dermbeau.co.uk. http://www.harleystreettreatments.com. https://www.viso-aesthetics.com. http://www.vie-aesthetics.com. http://vanessacharest.com. http://nataliefaccini.co.uk. https://www.therapieclinic.com. http://www.dna-aesthetics.co.uk. https://www.glowfaceaesthetic.co.uk. http://emelkucuk.co.uk. https://www.rjaesthetic.co.uk. http://lpa.london. http://www.simone.co.uk. https://novaclinic.co.uk. https://instagram.com. http://www.skinandsanctuary.com. http://www.mesoclinic.co.uk. https://www.drleah.co.uk/. https://www.sknclinics.co.uk/. https://www.beautyempireclinic.com/. https://www.annsummers.com. https://www.nastygal.com. https://sextoysaffair.co.uk. https://www.bedroompleasures.co.uk. https://www.theadulttoyshop.com. https://lovewoo.co.uk. https://www.fetshop.co.uk. https://www.extremerestraints.com. https://www.adultshopit.co.uk. https://www.skintwo.com. https://www.megapleasure.co.uk. https://www.sinfulthrills.co.uk. https://delightoys.co.uk. https://nicennaughty.co.uk. https://www.loveandvibes.co.uk. https://luvero.co.uk.

My blog :: Bowling Centres
Ответить | Ответить с цитатой | Цитировать
leonidze-magnati.ge
0 # leonidze-magnati.ge 24.11.2022 11:38
I сouldn't resist commenting. Exceptionally ᴡell written!

Feel free to visit my page: http://leonidze-magnati.ge/user/DEIYoung1062/ (leonidze-magnati.ge)
Ответить | Ответить с цитатой | Цитировать
seo pricing
0 # seo pricing 26.11.2022 09:42
%%

my website; seo pricing
Ответить | Ответить с цитатой | Цитировать

Добавить комментарий


Работая с этим сайтом, вы даете свое согласие на использование файлов cookie, необходимых для сохранения выбранных вами настроек, а также для нормального функционирования сервисов Google.