Новости Joomla

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

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

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

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

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

Читать статью на Хабре.

@joomlafeed

🏆 Открыто голосование за 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 Гость просматривают эту тему.
  • 41 Ответов
  • 4265 Просмотров
*

DimkaJack

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
Проблема все еще является актуальной, помогите кто-нибудь...
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Дима опять забыл?) Ну выложите компонент я посмотрю, и скажите версию J
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Да... Дела житейские + погда хорошая... На выходных не было времени посмотреть =( Буду пробовать на этой неделе.
*

DimkaJack

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
« Последнее редактирование: 15.04.2014, 09:33:34 от DimkaJack »
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Нашел, в чем проблема. В методе populateState() вместо $this->getUserStateFromRequest лучше использовать $app->getUserStateFromRequest или последним параметром передавать false. Ну и соответственно в начале метода инициализировать приложение через $app = JFactory::getApplication();

Дело в том, что метод getUserStateFromRequest модели по умолчанию при его использовании скидывает limitstart на 0. А его использование происходит при установке фильтров, так как их значение мы получаем через $this->getUserStateFromRequest.

Другой вариант, использовать $this->getUserStateFromRequest, но перенести parent::populateState в начало метода, тогда сбрасывания limitstart не будет, так как родительский populateState() его установит до сбрасывания.

Правда я пока не понял, почему в админке все работает с $this->getUserStateFromRequest.
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Дело в том, что метод getUserStateFromRequest модели по умолчанию при его использовании скидывает limitstart на 0. А его использование происходит при установке фильтров, так как их значение мы получаем через $this->getUserStateFromRequest.
я подразумеваю что так и должно быть.
Дело в том что использование фильтров каких-либо на страницах отличных от первой приводит не очень к хорошему результату.
Т.е. допустим вы находитесь на n-ой странице, применяете фильтр, результатов фильтрации естественно будет меньше, допустим 1 страница. В итоге limitstart остается тот же, а результатов соответственно на странице не будет.

По крайне мере такой баг был точно в 1.5, что там дальше не знаю, не смотрел.
*

DimkaJack

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
Круто все варианты работают)) Спасибо!
Разве что при смене фильтра отображается та же страница. хотя по идее должна быть первая.
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Да, SmokerMan скорее всего прав, сбрасываться должно. Похоже, что полагаться на parent::populateState вообще нельзя, нужно реализовывать сортировку, порядок и limit / limitstart самому. По сути как сделано здесь.

Я еще покапаюсь и попробую найти рабочее решение с реализацией запоминания фильтров.
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Вообщем решения я пока не нашел. Дело тут даже не в parent::populateState или использовании фильтров, а в том, что при отправке формы не скидывается limitstart. Я уже пробовал код из стандартных компонентов, но все равно не работает - limitstart не сбрасывается. Если взять любой стандартый компонент, то там даже при простом изменеинии лимита страниц сбрасывается limitstart. А здесь ни в какую не хочет.

Разработчики, где ошибка? Кто решит загадку апреля? :) Чую, что где-то недосмотрел, но я в своем компоненте использую AJAX навигацию и сбрасываю limistart с помощью JS. А тут ступор =)
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Загадку все же решил :D

Первое, что нужно сделать, это добавить в форму скрытое поле:
Код: php-brief
<input type="hidden" name="limitstart" value="" />

Второе, постраничную навигацию нужно выводить вот так:
Код: php-brief
<?php echo $this->pagination->getPagesLinks(); ?>

При таком раскладе все работает - фильтры сохраняют состояние (только использовать нужно $app->getUserStateFromRequest) и происходит сброс страниц при изменении фильтров. parent::populateState тоже работает как надо.

Но если выводить постраничную навигацию вот так:
Код: php-brief
<?php echo $this->pagination->getListFooter(); ?>

То тогда выводится еще одно скрытое поле limitstart, которое обновляется постраничной навигацией. Оно соответственно не пустое и сброса limitstart не происходит.
*

DimkaJack

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
Цитировать
Загадку все же решил
Отлично, спасибо за решение проблемы
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
На самом деле, решено не до конца. Один ворос остался открытым - почему в админке все работает без этих хитрых манипуляций? Там же при использовании фильтров с $this->getUserStateFromRequest все отлично переключается, то есть limitstart работает нормально...
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вывод таблицы, деление на страницы

Автор March Cat

Ответов: 6
Просмотров: 1368
Последний ответ 09.01.2019, 18:49:15
от dmitry_stas
Проблема с модулем после переноса с локалки на хостинг

Автор master-smeta

Ответов: 8
Просмотров: 3051
Последний ответ 15.11.2018, 16:34:46
от master-smeta
Меню схлопывается после перезагрузки страницы

Автор onelawyer

Ответов: 10
Просмотров: 2004
Последний ответ 11.10.2017, 14:50:48
от effrit
Как вставить модуль в код нужной страницы php?

Автор zvi

Ответов: 7
Просмотров: 3940
Последний ответ 12.04.2016, 19:36:55
от AlekVolsk
Модуль. Сообщение о включенном AdBlock. Как отпустить Javascript в низ страницы?

Автор cartgen

Ответов: 2
Просмотров: 1847
Последний ответ 19.08.2015, 23:42:16
от palexa