Joomla: Фильтруем контент по материалам, категориям и компонентамОпубликовано: 16.06.2014 16:20 Автор: Ogri Просмотров: 12378
Внутренние ссылки Joomla и примеры их применения :: ОГЛАВЛЕНИЕ
Структура внутренних ссылок сайта на Joomla
Фильтруем контент по материалам, категориям и компонентам
Единая фильтрация вывода модуля mod_jcomments_latest
end faq
В статьях о привязке соцкнопок и хлебных крошек к определенным страницам Joomla-сайта рассматривалась фильтрация только по материалам. Единственное исключение - во второй из них было также указано, как скрыть навигатор на странице избранных материалов. Но что если нужно привязать модуль либо другое расширение, а в общем случае - любой кусок кода к выбранным категориям, компонентам, определенным страницам компонентов, а то и ко всему перечисленному одновременно? Вы скажете, что модули и так привязываются к пунктам меню, а при использовании более продвинутого менеджера модулей (например, Advanced Module Manager) - и к категориям, статьям, пользователям, компонентам и т. д. Это так; но, чтобы выводить модуль с разными настройками вывода на соответствующих страницах, придется создать несколько его копий, привязанных к этим страницам. Например, на этом сайте модуль последних комментариев выводит список комментариев к материалам тех категорий и компонентов, на странице которых он высвечивается. Поскольку структура сайта достаточно разветвленная, да к тому же он еще и мультиязычный, количество копий модуля - целых 8 (восемь!) только для русской части сайта. Неудобно.
Предлагаемое решение обеспечит гибкость и контекстность вывода контента по заданным критериям. Знание кода желательно, но я постараюсь дать точные рекомендации по его внедрению, что позволит и менее квалифицированным джумловодам его использовать при условии точного выполнения процедуры. К тому же, я попытался в отдельной статье подробно описать структуру внутренних ссылок сайта на Joomla, что призвано облегчить понимание алгоритма. Ну что, по коням?
Я написал функцию и назвал ее content_filter
. Код функции - чуть ниже под катом.
Описание и код функции content_filter
Определение функции имеет следующий вид:
function content_filter($exception_articles, $exception_categories = null, $exception_category_views = null, $exception_components = null)
Аргументы:
Первые три - простые одномерные массивы вида:
array($value1, $value2, ...)
Элементы массивов:
$exception_articles
- идентификаторы отдельных материалов;$exception_categories
- идентификаторы категорий для страниц вывода материалов;$exception_category_views
- идентификаторы категорий для страниц списков или блогов материалов, к этим категориям относящихся.
Эти три массива оперируют материалами и категориями, за вывод которых отвечает базовый компонент Джумлы com_content
. Имя компонента - ключ option
, а также вид (представление) - ключ view
не входят в массивы в явном виде. Значение первого ключа - подразумевается, а вид определяется автоматически.
А вот четвертый массив $exception_components
может быть использован для управления выводом страниц других компонентов, имеющих те же ключи, что и com_content
. И ключи эти задаются в явном виде:
array( array(name => $name1 [, view => $view1][, catid => $catid1][, $id => $id1]), array(name => $name2 [, view => $view2][, catid => $catid2][, $id => $id2]), ... )
Элементами являются массивы типа ключ => значение
, соответствующие данным отдельного компонента. Ключи внутреннего массива соответствуют параметрам в строке запроса внутренней ссылки на определенную страницу компонента.
Каждый аргумент-массив может получать значение null
, означающее, что функция не будет фильтровать содержимое на соответствующих страницах. То же относится и к элементам четвертого массива.
Заполнение аргументов при вызове функции content_filter
будет ниже подробно проиллюстрировано примерами.
Возвращаемое функцией значение - true
в случае, если выводимая страница сайта соответствует значению хотя бы одного элемента какого-либо из четырех массивов-аргументов.
Код функции content_filter
function content_filter($exception_articles, $exception_categories = null, $exception_category_views = null, $exception_components = null) { global $cf_option, $cf_view, $cf_art_cat_id, $cf_cat_id; //1. if current page is category or article in com_content if ($cf_option == 'com_content') { if ($cf_view == 'article') { // $cf_cat_id is category ID; $cf_art_cat_id is article ID //1.1 check article exceptions if (isset($exception_articles)) { for ($i=0, $n=sizeof($exception_articles); $i<$n; $i++) { if ($cf_art_cat_id == $exception_articles[$i]) return true; } } //1.2 check category exceptions for article view if (isset($exception_categories)) { for ($i=0, $n=sizeof($exception_categories); $i<$n; $i++) { if ($cf_cat_id == $exception_categories[$i]) return true; } } } //1.3 check category exceptions for category view // $cf_art_cat_id is category ID elseif ($cf_view == 'category' && isset($exception_category_views)) { for ($i=0, $n=sizeof($exception_category_views); $i<$n; $i++) { if ($cf_art_cat_id == $exception_category_views[$i]) return true; } } } //2. check components // $cf_cat_id is component category ID; $cf_art_cat_id is component ID if (isset($exception_components)) { for ($i=0, $n=sizeof($exception_components); $i<$n; $i++) { if ($cf_option == $exception_components[$i][name] && (!isset($exception_components[$i][view]) || $cf_view == $exception_components[$i][view]) && (!isset($exception_components[$i][catid]) || $cf_cat_id == $exception_components[$i][catid]) && (!isset($exception_components[$i][id]) || $cf_art_cat_id == $exception_components[$i][id])) return true; } } return false; }
end faq
Помещение функции content_filter
в библиотеку и инициализация глобальных переменных
Куда поместить сию дивную функцию? Можно просто в отдельный файл, а можно добавить в одну из существующих библиотек. Желательно, чтобы это не была библиотека ядра, в этом случае при обновлениях Джумлы функцию придется восстанавливать вручную. В папке моего шаблона, сделанном изначально в Artisteer, нашелся файл functions.php, включенный в самом начале файла индекса шаблона:
<?php defined('_JEXEC') or die; require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'functions.php';
В functions.php я и добавил вышеприведенный код функции content_filter.
Из того самого кода видно также, что функция использует 4 глобальные переменные, соответствующие как раз параметрам выводимой страницы. Сделано так для того, чтобы не инициализировать их каждый раз в случае нескольких вызовов функции с одной и той же страницы. Поэтому инициализация их вынесена в файл индекса активного шаблона. Откройте на редактирование файл templates\[active_template]\index.php, заменив [active_template] на имя вашей папки. Сразу после строки подключения библиотеки, содержащей нашу функцию, вставьте код инициализации глобальных переменных. В результате начало кода в файле index.php приняло такой вид:
<?php defined('_JEXEC') or die; require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'functions.php'; //initialize global variables for content_filter() global $cf_option, $cf_view, $cf_art_cat_id, $cf_cat_id; $jinput = JFactory::getApplication()->input; $cf_option = $jinput->getCmd('option'); $cf_view = $jinput->getCmd('view'); $temp = explode(':', $jinput->getCmd('id')); $cf_art_cat_id = $temp[0] + 0; $temp = $jinput->getInt('catid'); $cf_cat_id = $temp[0] + 0;
(Подробно о формировании кода инициализации переменных, соответствующих ключам запроса, а также о необходимости отсекать от значений некоторых из них хвосты в виде алиасов (псевдонимов), интересующиеся могут почитать все в том же ликбезе о структуре внутренних ссылок.)
Вот теперь функция content_filter
включена в код страницы сайта. Самое время перейти к примерам ее вызова.
Примеры использования функции content_filter
-
Пример 1.
Отключение хлебных крошек на страницах ошибки 404 для двух языков, а также на страницах компонентов поиска и авторизации. (По сути это - усовершенствованная версия кода фильтрации навигатора из соответствующей статьи.)
if ($view->containsModules('breadcrumb') && !content_filter( array(80, 448), //$exception_articles null, //$exception_categories null, //$exception_category_views array( array(name => 'com_users'), array(name => 'com_search') ) //$exception_components ) //!content_filter ) //if echo artxPost($view->position('breadcrumb'));
-
Пример 2.
Отключение панели социальных кнопок на страницах материалов, относящихся к категории 1, а также на страницах вывода категорий 1, 3 и 6 в виде списка или блога.
<?php if ( !content_filter( null, //$exception_articles array(1), //$exception_categories array(1, 3, 6) //$exception_category_views //$exception_components is null by default ) //!content_filter ) //if ?> <!-- скрипт вывода кнопок --> <?php } ?>
-
Пример 3.
Вывод баннера только на страницах категорий 6 и 7 компонента JoomGallery, а также на карте сайта, имеющей id=4.
<?php if ( content_filter( null, //$exception_articles null, //$exception_categories null, //$exception_category_views array( array(name => 'com_joomgallery', view => 'category', catid => 6), array(name => 'com_joomgallery', view => 'category', catid => 7), array(name => 'com_xmap', id => 4) ) //$exception_components ) //content_filter ) { //if ?> <!-- скрипт вывода баннера --> <?php } ?>
В заключение перечислю несколько ограничений при использовании предложенной версии функции content_filter
.
- Не включен фильтр по избранным материалам.
- Для представления материалов категории (массив
$exception_category_views
) не введено условие по дополнительному ключуlayout
, отвечающему за вывод материалов в одной из двух возможных компоновок - списка или блога. - Функция не обрабатывает страницы компонентов, в которых имеются параметры, отличные от четырех основных. Как, например, в VitrueMart -
controller
иtask
. Для таких компонентов можно ввести отдельные функции обработки вывода. В случае с тем же VitrueMart пример кода дан в ответе на вопрос, заданный в обсуждении статьи об избирательном выводе хлебных крошек.
Функцию я писал под себя, и все виды фильтров, в нее включенные, удовлетворяют требованиям по избирательному выводу контента на этом сайте к моменту написания статьи. В дальнейшем, по мере возникновения подобных задач в моей практике, равно как и поступления вопросов от любознательных читателей этой площадки, будут писаться статьи с детальным рассмотрением частных случаев применения описанной методики.
Новые
-
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-теги
Популярные
-
101053
Миграция с Joomla 1.5 на Joomla 2.5. Ч.2-1. Перенос jDownloads и jComments -
73220
Joomla: Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JComments -
61585
Редактирование анимированных GIF-имиджей в Photoshop CS3 -
38080
Joomla: как добавить свои языковые константы или переопределить существующие -
34381
Единая фильтрация вывода модуля mod_jcomments_latest
Авторизация
Гитара
Гостевая колонка
Последние комментарии
-
Joomla: Сливаем два сайта в один при помощи компонента J2XML
-
보증된카지노사이트 01.06.2023 18:05
When you gamble on the net, you’ll want nothing much less than all the bells and whistles. Also visit ...
-
-
Цифровые коды WEB (веб) цветов для сайта
-
https://Daywel.com/ 02.06.2023 01:01
If you want to grow your know-how simply keep visiting this site and be updated with the most recent ...
-
slot zeus 01.06.2023 23:32
An impressive share! I have just forwarded this onto a co-worker who was doing a little research ...
-
Wow Class Guides 01.06.2023 22:07
I'm gone to inform my little brother, that he should also visit this web site on regular basis to ...
-
https://cliq.page/ 01.06.2023 20:45
My coder is trying to convince me to move to .net from PHP. I have always disliked the idea because of ...
-
path of exile builds 01.06.2023 20:21
My partner and I stumbled over here by a different website and thought I may as well check things ...
-
utahsyardsale.com 01.06.2023 19:30
What's Happening i'm new to this, I stumbled upon this I've found It positively helpful and it has ...
-
elearnportal.science 01.06.2023 18:44
Thanks for the auspicious writeup. It in truth was a amusement account it. Look complicated to far ...
-
Path Of Exile Guides 01.06.2023 18:20
Hi there! Would you mind if I share your blog with my zynga group? There's a lot of folks that I think ...
-
Zaca.vn 01.06.2023 18:12
This blog was... how do I say it? Relevant!! Finally I've found something which helped me. Thank you!
-
Комментарии
present here at this wеbpage, thanks aԁmin of this web page.
Take a look at my ѡeb bⅼog; all bitcoin online casino play free (shckp.ru)
оf cultureand fully defined, keep it uup alⅼ the tіme.
А также реклама для бизнеса в телеграм канале.
Делимся новостями бизнеса в России.
Подпишись, чтобы не потерять!!!
https://t.me/s/businessfor_life
information.
I really like all the points you've made.
Feel free to visit my web page :: avodart without rx
the web and on web I found thiѕ site as a most excelⅼent ѕitе for most up-to-date սpdates.
Aⅼso visit my blog ... кето диета для начинающих купить (һeungbumall.co.kr)
you've got heгe on this post. I'll be returning to your site for
more soon.
Feeⅼ free tо ѕurf to my page: seroquel
tablets
That іs the first time I frequented your websitе pɑge and so far?
I amazed with thе analysis you made to make this particular submit incrеdible.
Excellent process!
Stop by my website: капсулы кето диета купить
- keto-food.ru -
somewhat of off topic but I was wondering if blogs uѕe WYSIWYG editors oг if
you have to mɑnuaⅼly code with НTMᒪ. I'm
starting a blog soon Ьut have no coding know-how so I wanted to ɡet advice from someone with
experience. Any help wouⅼd be greatly appreciated!
the nice work.
my blog post; coѕt mobic price
site with uѕ so I came to give it a look. I'm definitely loving the information. I'm book-marking
and will be tweeting this to mу foll᧐wers! Wonderful bloց and excellent design.
my web site монтаж медной кровли - praktik-spb.ru,
It's good to come across a blog every once in a while that isn't thе same outdated rehɑshed information. Fantastiϲ read!
I've saved yoᥙr site and I'm adding your RSS feeds to my Google account.
Alѕo visit mʏ web-sitе; zofran4ѡorld.top
I have got much clеar idea about from this pɑraɡraph.
My site :: можно ли кето диета (0831ly.com)
net the easiest thіng to remembeг of. I say to
you, I certainly get annoyed even as other folks consider іssսes that they juѕt don't
recognize about. You managed to hit the nail upon the top
as neatly as outlined out the whole thing without
havіng side effect , other folks can take a signal.
Will likely be back to get more. Thanks
My blog post ... cytotec
Also visit my web page benazеpril
credit and sources back to your blog? My websіte is in the
eҳact same niche as yours аnd my users would really benefit
from a lot of the information you provide here.
Please let me knoԝ if this alright with you. Thank you!
a not on target fidelity program and plain conditions for receiving winnings in pin up
online-up-casino-bet.com/]
Pinupcasino ( Pin Up Casino 634
).
whoah this blog is great i really like reading your posts.
Stay up the great work! You understand, a lot of people are hunting round for this info, you could help them
greatly.
aware of. I say to you, I definitely get irked while people consider worries that they plainly
don't know about. You managed to hit the nail upon the top
and also defined out the whole thing without having side-effects , people can take a signal.
Will likely be back to get more. Thanks
сильно необходимых документов и доставим авто из ОАЭ под источник
авто сша
видео
Покупка авто из Арабских Эмиратов – это правильное приговор которое становится все благо популярным между граждан России и СНГ.
что на то, что эта край не является производителем автомобилей,
стоимость транспортных средств здесь очень выгодна.
Это обусловлено низкой ценой пошлины на авто и выгодной стоимостью новых машин.
https://america-dubai-auto.com
Транспортировка автомобиля из
Арабских Эмиратов обходится
гораздо дешевый по соглашаться нежели доставка и покупка из США или Канады.
данный Разновидность выгоден не только вследствие лояльной изначальной
стоимости, но и за не в счет существенного снижения
на цены доставки желаемой машины.
авто из сша под ключ
Специалисты компании GTK Leasing предлагают тем не менее
желающим совершить покупку автомобилей из ОАЭ под источник авто из ОАЭ осуществляется в несколько этапов.
Для начала вам надо связаться с сотрудниками нашей
компании. Вы расскажите о никогда пожеланиях, а
они подберут наиболее выгодный вариация по соглашаться и качеству.
Мы обеспечиваем вам абсолютную
безопасность сделки.
Мы реализуем автомобили под ключ Наши специалисты не
чуть привезут вашу совершить покупку практически в РФ и СНГ,
но и предоставят предлагать услуги страхования, оформят всю необходимую документацию, будут сопровождать ваш багаж в беспричинно
Популярные марки и модели авто в одним
разом из самых востребованных типов автомобилей в Эмиратах традиционно являются современные джипы.
Огромное предложение от ведущих производителей:
Toyota, Jeep, Land Rover, Nissan, Cadillac, Lexus, Kia, Hyundai,
Mercedes и отдельно можно выделить американские пикапы
Dodge, Ford, а и Mitsubishi, VW и другие марки.
Рамные джипы, кроссоверы, паркетники SUV, пикапы различной
комплектации и для разного кошелька!
В ОАЭ большое меморандум и по седанам,
и набирающим репутация электрокарам.
Авто поставляются как напрямую с фабрик Японии, Америки и Европы,
так и с крупнейших торговых площадок.
впопыхах растет туземный
беспорядок автомобилей с пробегом.
Автомобили премиум класса,
спорткары – бог велел рассмотреть в одиночку что чтоб купить авто из ОАЭ, достаточно довольно
связаться с над нами не каплет и
изложить свои ухаживать связанные с
покупкой конкретной модели автомобиля.
если вы затрудняетесь в своём выборе,
мы поможем вам подобрать машину с учётом ваших индивидуальных
пожеланий, требованиям к функционалу и располагаемой сумме.
С над нами не каплет покупать авто из ОАЭ вам не составит труда.
Мы подбираем грамотные маршрутные направления, предоставляем оптимальный вид транспорта для доставки.
Во в то время пуще всего напрасно следования возражение
инструмент будет находиться
под присмотром экспедитора. Мы предоставляем а также вызываться страхования вашего груза.
I'll bookmark your weblog аnd take a look at again here regularly.
I am rather suгe I'll be informed a lot of new stuff
right right here! Beѕt of luck for the next!
Alsο visit my website where to get generic celebrex without prescription [celebrex2us.top]
официальный предлагает массу товаров и услуг на любой вкус.
Здесь можно найти абсолютно все, о чем только можно подумать.
А главное, проект не является простым магазином, а предоставляет посреднические услуги, работая в формате доски объявлений.
Потому здесь можно найти большое количество продавцов,
сравнить цены, посмотреть отзывы, оценить конкуренцию и подобрать наиболее подходящий для себя вариант.
Остается только перейти на сайт Кракен по адресу
https://xn--2rn-7ua.com. Сама площадка обеспечит вам
безопасное пребывание, и поможет сохранить анонимность,
даже без использования средства браузера Tor
или VPN. Потому вы можете не беспокоится,
и смело переходить на активное зеркало
Kraken, ссылка которого указана выше.
::
The latter is the preferred way of depositing or withdrawing Bitcoins or
altcoins by offshore sites. Bitcoin casinos demonstrate this
by frequently awarding more favorable bonuses and better banking
terms than comparable US transactions.
Crypto at Casinos
Crypto payment providers, like Bitcoin, Litecoin, Ethereum, or Bitcoin Cash,
facilitate deposits and withdrawals using a crypto wallet.
These have a whole set of benefits. They’re fast, safe, discrete,
inexpensive, and secure. Furthermore, crypto casinos don’t typically apply fees to these transaction types.
Traditional Payment Methods
Traditional payment methods include bank/credit cards from
multinationals, including Visa, Mastercard, Discover, or American Express.
These are the most common way of depositing US dollars to a casino player account.
Typically, casinos don’t apply fees to player deposits.
Unfortunately, withdrawals are not usually possible using credit cards.
Instead, offshore casinos often process USD payments using a bank transfer
or couriered check, which take several days
to reach the player and come with fees.
eWallets at Casinos
Most offshore casinos that accept US players, including
the brands listed on this page, don’t accept eWallets like
PayPal. Therefore, depositing or withdrawing USD will require an alternative payment method, like more traditional credit cards or bank transfers.
Deposit Options Available at New Bitcoin Casinos
The table next demonstrates the most commonly-accepted deposit options of our
top 10 Bitcoin new casinos. Note that offshore brands don’t generally accept PayPal deposits.