Новости Joomla

👩‍💻 События плагинов и порядок их срабатывания при работе с пользовательскими полями Joomla и использовании FieldsHelper.

👩‍💻 События плагинов и порядок их срабатывания при работе с пользовательскими полями Joomla и использовании FieldsHelper.

В процессе работы с Joomla бывает необходимо работать с пользовательским интерфейсом более тонко, чем обычно. Все формы Joomla состоят из стандартных полей, содержанием, стилем отображения, состоянием (включено/выключено, доступно для редактирования или нет и т.д.) можно управлять с помощью плагинов. Да и для нестандартных проектов хорошей практикой является создание одного системного или нескольких плагинов групп "под проект", в которых храниться весь "нестандарт".

В этой статье описаны все триггеры, которые вызываются через Event Dispatcher из administrator/components/com_fields/src/Helper/FieldsHelper.php, с привязкой к жизненному циклу (порядку этапов работы запроса), аргументам, изменяемым данным и дальнейшему распространению по Joomla. Это поможет вам работать с Joomla свободнее и не опасаясь при этом потерять изменения при очередном обновлении движка.

Подходы, описанные в статье, полезны в тех случаях, когда вы работаете с данными в com_fields - механизме создания и редактирования пользовательских полей ядра Joomla и при использовании FieldsHelper. Многие сторонние компоненты не используют эту возможность, поэтому данная статья будет полезна лишь частично.

🏆 Открыто голосование за Joomla в премии CMS Critic People’s Choice Awards 2025

🏆 Открыто голосование за Joomla в  премии CMS Critic People’s Choice Awards 2025

🗓 Голосование продлится до 27 февраля 2026 года.

👩‍💻 Проголосовать! 👩‍💻

Номинации, в которых можно проголосовать за Joomla:
⭐️ Best Free CMS
⭐️ Best Open Source CMS
⭐️ Best Enterprise CMS

Также в номинации Best e-Commerce Solution участвуют компоненты интернет-магазинов для Joomla:
⭐️ HikaShop
⭐️ Virtuemart

В номинации Best Website Builder оказались:
⭐️ YooTheme
⭐️ SP Page Builder

Что такое CMS Critic Awards?
С 2012 года премия CMS Critic Awards занимает особое место в сообществе систем управления контентом (CMS). Это единственный в своем роде сайт, который составляет рейтинг системы управления контентом и связанных с ними решений на рынке — от малого до крупного и подчеркивает их инновации и услуги.

Каждый год награда CMS Critic Awards присуждается одному победителю в различных отраслевых категориях, таких как: «Лучшая облачная CMS», «Лучший DXP», «Лучшая Headless CMS и других. Затем результаты оглашаются через СМИ вместе с выбором редакции CMS Critic.
В этом году премия вернулась к своим традициям и только TOP-5 движков по количеству номинаций попали в 2-й этап - голосование.

@joomlafeed

0 Пользователей и 1 Гость просматривают эту тему.
  • 24 Ответов
  • 1753 Просмотров
*

Ongi

  • Захожу иногда
  • 273
  • 15 / 0
Для VirtueMart есть бесплатный модуль категорий с эффектом аккордиона.
Проблема в том, что он неправильно определяет активную категорию. На какую страницу не заходишь, хоть на главную - он всегда показывает активной категорию с id=4.
Вот конструкция, которая делает запрос в бд, почему-то переменной catid присваивается значение 4, в чем тут ошибка?

Код
//Get catid level 1
while (1) {
$sql = 'SELECT m.virtuemart_category_id FROM #__virtuemart_categories AS m'
. ' INNER JOIN #__virtuemart_category_categories AS m1 ON m1.category_child_id = m.virtuemart_category_id'
. ' INNER JOIN #__virtuemart_category_categories AS m2 ON (m1.category_child_id = m2.category_parent_id AND m2.category_child_id ='.$catid.')'
. ' WHERE m.published = 1'
. ' ORDER BY m.ordering';
//echo $catid;
$db->setQuery($sql);
//echo $db->setQuery($sql);

if ($temp = (int)$db->loadResult()) {

$catid = $temp;

} else {
break;
}
}
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
catid присваивается значение 4, так и есть значит у вас, это результат первой записи запроса
Здесь (в приведенном коде нет привязки к активной категории)
*

Ongi

  • Захожу иногда
  • 273
  • 15 / 0
Тогда может тут?

Код
if ($n = count($rows)) {
for ($i = 0; $i < $n; $i++) {

$rows[$i]->products = $this->products[$i];
$this->makecorrectlink($rows[$i]);
$rows[$i]->subs = $this->getSublevel($rows[$i]->virtuemart_category_id); //Get the first sublevel of main item i
$rows[$i]->active = $rows[$i]->virtuemart_category_id==$catid?1:0;

//If link is click
$rows[$i]->haslink = count($rows[$i]->subs)?0:1;
if ($parentlink) $rows[$i]->haslink = 1;
}
}
*

Ongi

  • Захожу иногда
  • 273
  • 15 / 0
Ранее только такая строка
$catid = JRequest::getInt('category_id')?JRequest::getInt('category_id'):0;
*

Ongi

  • Захожу иногда
  • 273
  • 15 / 0
4 - я об этом и говорю
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
так текущая значит 4
а какую надо
//$catid = JRequest::getInt('category_id')?JRequest::getInt('category_id'):0;
$catid =5;
*

Ongi

  • Захожу иногда
  • 273
  • 15 / 0
когда идет начальное определение переменной
$catid = JRequest::getInt('category_id')?JRequest::getInt('category_id'):0;
выводится catid=0
а в коде дальше, который я первый выкладывала, там где echo $catid;
catid=4 - на любой странице сайта, оно ведь меняться должно в зависимости от категории, в которую вы заходите?
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Код: php-brief
if ($temp = (int)$db->loadResult()) {

//$catid = $temp;
$catid = JRequest::getInt('category_id')?JRequest::getInt('category_id'):0;

} else {
break;
}
выводится catid=0 полная не SEF ссылка как выглядит. Там есть catid. Версия Joomla какая
*

Ongi

  • Захожу иногда
  • 273
  • 15 / 0
Joomla 2.5
VirtueMart 2.0.14

/index.php?option=com_virtuemart&view=category&virtuemart_category_id=34
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
*

Ongi

  • Захожу иногда
  • 273
  • 15 / 0
не помогло, все осталось по прежнему
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
показывает активной категорию с id=4.
показывает, класс active добавляет?
здесь нет кода формирования списка ссылок
и код мой все таки оставьте
*

Ongi

  • Захожу иногда
  • 273
  • 15 / 0
еще раз все проверила - код ваш работает на всех страницах с категориями, но на главной странице (которая вообще к VirtueMart не относится, там избранные материалы com_content) у меня все равно активна категория с id=4
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Код: php-brief
$catid =JFactory::getApplication()->input->getCmd('virtuemart_category_id',  5);
или так
Код: php-brief
if ($temp = (int)$db->loadResult()) {
$catid =JFactory::getApplication()->input->getCmd('virtuemart_category_id', '')?  $temp: 5;
//Вставьте вместо 5 нужную для активной на тех страницах где нет virtuemart_category_id
} else {
break;
}
*

Ongi

  • Захожу иногда
  • 273
  • 15 / 0
а если на главной они вообще не должны быть активными?
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
*

Ongi

  • Захожу иногда
  • 273
  • 15 / 0
Код
<div id="<?php echo $type; ?>" class="menu_list">
<?php foreach ($menus as $menu) {
$link = ($menu->haslink)? ('<a href="'.$menu->link.'">'.$menu->name.'</a>'):($menu->name);
$active = $menu->active?"active":"";
?>
<p class="menu_head <?php echo $active; ?>"><?php echo $link; ?></p>
<?php if(count($menu->subs)) {  ?>
<div class="menu_body"<?php if ($remind) echo $menu->active?'style="display:block;"':''; ?>>
<?php foreach ($menu->subs as $sub) {
$active = $sub->active?'class="sub_active"':'';
?>
<li class="oj-accord_li">
<a <?php echo $active; ?> href="<?php echo $sub->link; ?>"><?php echo $sub->name; ?></a>
<?php if(count($sub->subs)) {  $this->ShowMoreThan2Levels($sub); } ?>
</li>
<?php
}
?>
</div>
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
$active = $menu->active?"active":"";
на
$active = ($menu->active && JFactory::getApplication()->input->getCmd('virtuemart_category_id', ''))?"active":"";
*

Ongi

  • Захожу иногда
  • 273
  • 15 / 0
Эти строки не решают проблему, потому что эта категория с Id=4 имеет подкатегории, модуль считает эту категорию активной и подкатегории раскрыты, а последние строки только CSS стили меняют на не активный вариант.
Мне уже как-то неловко вас мучать... Спасибо большое за помощь, взяла ваш предыдущий вариант с переменной temp и присвоила ей 999 - не очень красиво, но работает
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Это для под категорий
$active = $sub->active?'class="sub_active"':'';
на
$active = ($sub->active && JFactory::getApplication()->input->getCmd('virtuemart_category_id', ''))?'class="sub_active"':'';
*

Ongi

  • Захожу иногда
  • 273
  • 15 / 0
подкатегории все равно открыты
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
<?php if ($remind) echo $menu->active?'style="display:block;"':''; ?> на
<?php if ($remind && JFactory::getApplication()->input->getCmd('virtuemart_category_id', '')) echo $menu->active?'style="display:block;"':''; ?>
*

Ongi

  • Захожу иногда
  • 273
  • 15 / 0
Работает! Вашему упорству можно только позавидовать, еще раз огромное спасибо :)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Проблемы с модулем JUX Mega Menu

Автор spdx15

Ответов: 16
Просмотров: 2172
Последний ответ 10.07.2019, 14:38:49
от sivers
При загрузке Google Карт на этой странице возникла проблема

Автор amor

Ответов: 10
Просмотров: 9100
Последний ответ 24.03.2019, 22:51:24
от amor
Нужна помощь с переносом модуля меню с джумы 1.5 на Joomla 2.5

Автор plen

Ответов: 2
Просмотров: 1364
Последний ответ 20.03.2018, 22:28:33
от SeBun
Проблема со строкой в колонке (шорткод)

Автор bayersoff

Ответов: 0
Просмотров: 1626
Последний ответ 27.09.2017, 15:53:12
от bayersoff
Проблема после установки jch optimize

Автор Sasha25Sh

Ответов: 13
Просмотров: 4800
Последний ответ 30.06.2017, 19:53:31
от Alex_Vazovski