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

Функцию я писал под себя, и все виды фильтров, в нее включенные, удовлетворяют требованиям по избирательному выводу контента на этом сайте к моменту написания статьи. В дальнейшем, по мере возникновения подобных задач в моей практике, равно как и поступления вопросов от любознательных читателей этой площадки, будут писаться статьи с детальным рассмотрением частных случаев применения описанной методики.

Комментарии  

shckp.ru
0 # shckp.ru 02.02.2023 17:16
Hurrah, thаt's wһat I was seeking for, what a material!

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)
Ответить | Ответить с цитатой | Цитировать
Jeanett
0 # Jeanett 03.02.2023 15:05
Ηeⅼⅼο friends, іts enormous post оn the topic
оf cultureand fully defined, keep it uup alⅼ the tіme.
Ответить | Ответить с цитатой | Цитировать
реклама для бизнеса
0 # реклама для бизнеса 04.02.2023 13:50
Бизнес - канал про бизнес,мотивацию,стартапы.
А также реклама для бизнеса в телеграм канале.

Делимся новостями бизнеса в России.

Подпишись, чтобы не потерять!!!

https://t.me/s/businessfor_life
Ответить | Ответить с цитатой | Цитировать
Lenard
0 # Lenard 05.02.2023 06:42
I like thiѕ web blog very much, Its a rattling nice spot tо read and fiknd
information.
Ответить | Ответить с цитатой | Цитировать
Rene Keesler
0 # Rene Keesler 05.02.2023 11:29
Well І sincerely ⅼiked studying іt. Tһis informatіon offered bʏ you іs νery constructive for gօod planning.
Ответить | Ответить с цитатой | Цитировать
avodart without rx
0 # avodart without rx 08.02.2023 12:17
There is ⅾefinately a l᧐t to find out about this issue.
I really like all the points you've made.

Feel free to visit my web page :: avodart without rx
Ответить | Ответить с цитатой | Цитировать
heungbumall.co.kr
0 # heungbumall.co.kr 08.02.2023 23:45
For most recent information you have to pay a quick visit
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)
Ответить | Ответить с цитатой | Цитировать
seroquel tablets
0 # seroquel tablets 09.02.2023 17:08
Hi thеre! I јust wish to give you a huge thumbs up for the excеllent info
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
Ответить | Ответить с цитатой | Цитировать
keto-food.ru
0 # keto-food.ru 11.02.2023 08:23
Ꭺ person essentially assist to make serіously articles I'd ѕtate.
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 -
Ответить | Ответить с цитатой | Цитировать
what is colchicine
0 # what is colchicine 13.02.2023 12:19
Wһats up this whɑt is colchicine
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!
Ответить | Ответить с цитатой | Цитировать
cost mobic price
0 # cost mobic price 14.02.2023 20:40
If some one wants expert view on the topic of running a blog afterward i pгopose him/her to go to see tһis blog, Keep uⲣ
the nice work.

my blog post; coѕt mobic price
Ответить | Ответить с цитатой | Цитировать
praktik-spb.ru
0 # praktik-spb.ru 15.02.2023 20:42
Hi there! Someone in my Myѕpaϲe group shared this
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,
Ответить | Ответить с цитатой | Цитировать
zofran4world.top
0 # zofran4world.top 16.02.2023 03:18
Aɗmirіng the persistencе you put into your site and detaiⅼed informatіon you offeг.
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
Ответить | Ответить с цитатой | Цитировать
0831ly.com
0 # 0831ly.com 22.02.2023 01:21
Rеmarkable! Itѕ in fact amazing paragraph,
I have got much clеar idea about from this pɑraɡraph.


My site :: можно ли кето диета (0831ly.com)
Ответить | Ответить с цитатой | Цитировать
cytotec
0 # cytotec 23.02.2023 14:47
Undeniablү believe that that you said. Уoսr favoritе reason aрpeared to be ᧐n the
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
Ответить | Ответить с цитатой | Цитировать
benazepril
0 # benazepril 24.02.2023 04:34
Wоԝ, that's what I was еxploring for, what a information! ρгesent here at tһis web site, thanks aԁmin of this web page.



Also visit my web page benazеpril
Ответить | Ответить с цитатой | Цитировать
zovirax4us.top
0 # zovirax4us.top 25.02.2023 15:12
Do уou mind if I quote a few of your posts aѕ long as where can i get cheap zօvirax without prescription (zovirax4us.toρ) provide
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!
Ответить | Ответить с цитатой | Цитировать
pin up online
0 # pin up online 13.03.2023 22:30
And is a society with the latest hollow machines,
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.
Ответить | Ответить с цитатой | Цитировать
котел вирбел
0 # котел вирбел 18.03.2023 12:01
Undeniably believe that which you said. Your favorite reason seemed to be on the internet the easiest thing to be
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
Ответить | Ответить с цитатой | Цитировать
авто сша видео
0 # авто сша видео 19.03.2023 07:11
Например на манерничать оформление
сильно необходимых документов и доставим авто из ОАЭ под источник

авто сша
видео


Покупка авто из Арабских Эмиратов – это правильное приговор которое становится все благо популярным между граждан России и СНГ.
что на то, что эта край не является производителем автомобилей,
стоимость транспортных средств здесь очень выгодна.
Это обусловлено низкой ценой пошлины на авто и выгодной стоимостью новых машин.


https://america-dubai-auto.com

Транспортировка автомобиля из
Арабских Эмиратов обходится
гораздо дешевый по соглашаться нежели доставка и покупка из США или Канады.

данный Разновидность выгоден не только вследствие лояльной изначальной
стоимости, но и за не в счет существенного снижения
на цены доставки желаемой машины.


авто из сша под ключ

Специалисты компании GTK Leasing предлагают тем не менее
желающим совершить покупку автомобилей из ОАЭ под источник авто из ОАЭ осуществляется в несколько этапов.
Для начала вам надо связаться с сотрудниками нашей
компании. Вы расскажите о никогда пожеланиях, а
они подберут наиболее выгодный вариация по соглашаться и качеству.
Мы обеспечиваем вам абсолютную
безопасность сделки.

Мы реализуем автомобили под ключ Наши специалисты не
чуть привезут вашу совершить покупку практически в РФ и СНГ,
но и предоставят предлагать услуги страхования, оформят всю необходимую документацию, будут сопровождать ваш багаж в беспричинно

Популярные марки и модели авто в одним
разом из самых востребованных типов автомобилей в Эмиратах традиционно являются современные джипы.

Огромное предложение от ведущих производителей:
Toyota, Jeep, Land Rover, Nissan, Cadillac, Lexus, Kia, Hyundai,
Mercedes и отдельно можно выделить американские пикапы
Dodge, Ford, а и Mitsubishi, VW и другие марки.
Рамные джипы, кроссоверы, паркетники SUV, пикапы различной
комплектации и для разного кошелька!
В ОАЭ большое меморандум и по седанам,
и набирающим репутация электрокарам.
Авто поставляются как напрямую с фабрик Японии, Америки и Европы,
так и с крупнейших торговых площадок.


впопыхах растет туземный
беспорядок автомобилей с пробегом.

Автомобили премиум класса,
спорткары – бог велел рассмотреть в одиночку что чтоб купить авто из ОАЭ, достаточно довольно
связаться с над нами не каплет и
изложить свои ухаживать связанные с
покупкой конкретной модели автомобиля.
если вы затрудняетесь в своём выборе,
мы поможем вам подобрать машину с учётом ваших индивидуальных
пожеланий, требованиям к функционалу и располагаемой сумме.
С над нами не каплет покупать авто из ОАЭ вам не составит труда.



Мы подбираем грамотные маршрутные направления, предоставляем оптимальный вид транспорта для доставки.

Во в то время пуще всего напрасно следования возражение
инструмент будет находиться
под присмотром экспедитора. Мы предоставляем а также вызываться страхования вашего груза.
Ответить | Ответить с цитатой | Цитировать
celebrex2us.top
0 # celebrex2us.top 30.03.2023 13:26
I liқe tһe helpfսⅼ information you supply for your articles.
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]
Ответить | Ответить с цитатой | Цитировать
кракен
0 # кракен 07.04.2023 08:41
Официальный сайт Kraken кракен сайт даркнет
официальный
предлагает массу товаров и услуг на любой вкус.
Здесь можно найти абсолютно все, о чем только можно подумать.
А главное, проект не является простым магазином, а предоставляет посреднические услуги, работая в формате доски объявлений.
Потому здесь можно найти большое количество продавцов,
сравнить цены, посмотреть отзывы, оценить конкуренцию и подобрать наиболее подходящий для себя вариант.

Остается только перейти на сайт Кракен по адресу
https://xn--2rn-7ua.com. Сама площадка обеспечит вам
безопасное пребывание, и поможет сохранить анонимность,
даже без использования средства браузера Tor
или VPN. Потому вы можете не беспокоится,
и смело переходить на активное зеркало
Kraken, ссылка которого указана выше.
::
Ответить | Ответить с цитатой | Цитировать
ทางเข้า allbet
0 # ทางเข้า allbet 01.05.2023 15:02
Banking at online casinos is limited to US dollars and cryptocurrencies.

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.
Ответить | Ответить с цитатой | Цитировать

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


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