Новости 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 Гость просматривают эту тему.
  • 19 Ответов
  • 3736 Просмотров
*

AlexP750

  • Захожу иногда
  • 195
  • 2 / 0
Всем привет!
Поставил ChronoForms, настроил простенькую форму и получил такую ошибку:
Код
Warning: nl2br() expects parameter 1 to be string, array given in /administrator/components/com_chronoforms7/chronoforms/helpers/parser2.php on line 665
А после текста, что все замечательно
Цитировать
Thanks for being awesome! We have received your message and would like to thank you for writing to us. We will reply by email as soon as possible.
, идёт еще сообщение об ошибке:
Код
Warning: strlen() expects parameter 1 to be string, array given in administrator/components/com_chronoforms7/chronoforms/functions/validation/validation_output.php on line 90
Версия РНР на хостинге 7.4.14 (если это важно)
Кто-нибудь сталкивался?
« Последнее редактирование: 08.08.2021, 19:20:39 от AlexP750 »
*

ShopES

  • Захожу иногда
  • 426
  • 11 / 0
просто предупреждение
скорее всего из за версии PHP
попробуйте понизьте
*

AlexP750

  • Захожу иногда
  • 195
  • 2 / 0
Странно.
Письма-то тоже нет. Видимо, что-то еще не включил. Саму форму создал и настроил, там всего три поля: имя, почта и текст сообщения, а вот писем нет. Хотя, в Settings-ах стоят действующие адреса.
И да, попробую понизить ))))
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Поставил ChronoForms, настроил простенькую форму и получил такую ошибку:
А почитать какую версию PHP поддерживает расширение ?
*

AlexP750

  • Захожу иногда
  • 195
  • 2 / 0
Понижал РНР до 7.3 - изменений не было.
А почитать какую версию PHP поддерживает расширение ?
Даже в голову не пришло, честно. Загрузил ChronoForms через JED, а учитывая, что на РНР 7.2 уже начинает ругаться и сама Joomla, и, насколько я помню, Akeeba, то я никак не ожидал, что ChronoForms потребует другой версии.
К слову, я понижал, но так и не добился успеха.
Если же надо повышать, то на хостинге есть восьмая версия, но тогда что-то отваливается... JComments, если не ошибаюсь.
Да, я попытался найти инфу о требуемых характеристиках, но пока так и не нашел
UP: Пробовал поднять до 8.0, но перестают работать комментарии, да и сама страница с формой не загружается.
« Последнее редактирование: 08.08.2021, 20:31:33 от AlexP750 »
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Да, я попытался найти инфу о требуемых характеристиках, но пока так и не нашел
И народ на JED тоже ругается на отсутствие документации. Если даете ошибку, давайте и код. не у всех же есть ChronoForms, да еще и разные версии .
*

AlexP750

  • Захожу иногда
  • 195
  • 2 / 0
Содержимое файла parser2.php, на который ссылается ошибка:
Код
foreach($value as $val){
$output .= '<li><a href="'.r3('index.php?ext=chronoforms&cont=logs&act=file&fname='.$val.'&form_id='.$this->data('form_id')).'">'.$val.'</a></li>';
}
$output .= '</ul>';
}else{
$output = '<a href="'.r3('index.php?ext=chronoforms&cont=logs&act=file&fname='.$value.'&form_id='.$this->data('form_id')).'">'.$value.'</a>';
}

}else if($unit['type'] == 'field_textarea'){
$output = nl2br($value);

}else if(!empty($unit['options'])){
$options = $this->options($unit['options']);
Строка 665, о которой говорится в ошибке:
Код
			$output = nl2br($value);
Если честно, то я не знаю, какую часть кода выделить. Я выбрал ту часть, которую можно свернуть/развернуть в Notepad++, что как мне кажется, сигнализирует о том, что это какие-то общии куски кода.
И да, письма, таки дошли, сорри. То есть, сообщения отправляются, только с этими неприглядными ошибками:

То, что внизу ошибка - это вторая часть формы, которая, как я решил, должна выводиться после успешной отправки.
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Проверьте какой тип данных
Код
else if($unit['type'] == 'field_textarea'){
var_dump($value);
$output = nl2br($value);

}
А можно сразу попробовать
Код
else if($unit['type'] == 'field_textarea'){
$output = nl2br($value[0]);

}
*

AlexP750

  • Захожу иногда
  • 195
  • 2 / 0
Большое спасибо!
А можно сразу попробовать
Это сработало!
Осталась вторая ошибка, но с ней я либо попробую сделать по аналогии, либо уберу вторую часть формы.
UP: не решился действовать самостоятельно, ибо ни бельмеса в коде.
Строка 90, на которую ссылается ошибка:
Цитировать
Warning: strlen() expects parameter 1 to be string, array given in /administrator/components/com_chronoforms7/chronoforms/functions/validation/validation_output.php on line 90
начинается с оператора if:
Код
	foreach($field['datapath'] as $keysData => $dataname){
if(!empty($vsettings['optional']) AND strlen(\G3\L\Arr::getVal($data, $dataname)) == 0){
continue;
}

Есть еще вопрос по поводу содержания сообщения, которое показывается пользователю после отправки. Я нашел сам файл, где лежит это
Цитировать
Thanks for being awesome! И весь остальной текст
, заменил его на нужный мне текст, но изменений не заметил. Можете подсказать, как поправить, или лучше новую тему создать?
« Последнее редактирование: 09.08.2021, 10:29:33 от AlexP750 »
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Осталась вторая ошибка, но с ней я либо попробую сделать по аналогии,
Судя по ошибке- получают массив вместо строки, должно сработать.
Можете подсказать, как поправить, или лучше новую тему создать?
Лучше новую.
А тип файла -языковый или в коде ?
*

AlexP750

  • Захожу иногда
  • 195
  • 2 / 0
Судя по ошибке- получают массив вместо строки, должно сработать.
Я обновил предыдущую тему, но и сюда скопирую
не решился действовать самостоятельно, ибо ни бельмеса в коде.
Строка 90, на которую ссылается ошибка:
Цитировать
Warning: strlen() expects parameter 1 to be string, array given in /administrator/components/com_chronoforms7/chronoforms/functions/validation/validation_output.php on line 90
начинается с оператора if:
Код
	foreach($field['datapath'] as $keysData => $dataname){
if(!empty($vsettings['optional']) AND strlen(\G3\L\Arr::getVal($data, $dataname)) == 0){
continue;
}
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Код
	foreach($field['datapath'] as $keysData => $dataname){
if(!empty($vsettings['optional']) AND strlen(\G3\L\Arr::getVal($data, $dataname)[0]) == 0){
continue;
}
Код
	foreach($field['datapath'] as $keysData => $dataname){
if(!empty($vsettings['optional']) AND (!is_array(\G3\L\Arr::getVal($data, $dataname)) && strlen(\G3\L\Arr::getVal($data, $dataname)) == 0) ){
continue;
}
Но лучше смотреть что в методе getVal
*

AlexP750

  • Захожу иногда
  • 195
  • 2 / 0
К сожалению, этот вариант приводит к двум новым ошибкам, в других строчках.
Что касается getVal, то вот, что удалось найти в файле:
Цитировать
if(!empty($ruledata['name']) AND !empty($ruledata['phpdef'])){
                     $value = \G3\L\Arr::getVal($data, $dataname);
                     $condition = eval($ruledata['phpdef']);
*

AlexP750

  • Захожу иногда
  • 195
  • 2 / 0
Пересобрал форму, ошибка ушла.  yes!
Но осталась еще одна важная особенность - оказывается, письма приходили пустыми. Т.е. содержимое текстового поля пустое. Видимо, я что-то упустил. Посмотрю внимательней.
*

ShopES

  • Захожу иногда
  • 426
  • 11 / 0
смотрите так же в настройках формы
*

AlexP750

  • Захожу иногда
  • 195
  • 2 / 0
Сорри, я не совсем корректно выразился.
Или совсем некорректно.
В письме, которое приходит при успешной отправке есть поля с данными, которые заполнил пользователь: имя и емейл без вопросов, а "Ваше сообщение" содержит всего один символ. Если текст набирался в латинице, то первая буква первого слова и все. Если на русском языке, то тоже один символ, но, на сей раз, это белый вопросительный знак на фоне чёрного ромба. То есть, тут еще и с кодировкой разбираться надо (
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Похоже трабл при валидации поля сообщения  .
*

ShopES

  • Захожу иногда
  • 426
  • 11 / 0
а может все же отказаться от такого геморроя ради простой формы?
используйте фришную balboa forms
там все просто и вам за глаза хватит
*

AlexP750

  • Захожу иногда
  • 195
  • 2 / 0
а может все же отказаться от такого геморроя ради простой формы?
используйте фришную balboa forms
Да я бы и не против. Я почему-то был уверен, что тут уже все должно работать, как часики... Всё-таки, уже аж седьмая версия. Конструктор, все по взрослому Сам удивился, что код подкручивать пришлось, чтобы заработало из коробки )))) Мне пока простая форма нужна. Да и в дальнейшем, думаю, не сильно сложнее будет. Максимум, с полем телефон, да и то, вряд-ли. Просто об этой давно слышал, вот и вся причина выбора

UP: Поставил ту, о которой говорили - вообще, за пол-часа разобрался! )))) Дольше искал информацию, как добавить форму в материал - искал что-то, вроде: {forms}{/forms}, а оказалось, там кнопка в TinyMCE есть

UP2: Оказалось, что после установки Chronoforms перестали работать Sliders, Tabs и Sourcerer от Regularlabs. Поотключал все от Chronoforms - заработали
« Последнее редактирование: 09.08.2021, 21:32:57 от AlexP750 »
*

ShopES

  • Захожу иногда
  • 426
  • 11 / 0
ну вот и все решилось

Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Ошибка syntax error, unexpected 'Fn' (T_FN), expecting identifier ((t_string))

Автор sergspb

Ответов: 3
Просмотров: 4190
Последний ответ 03.04.2023, 16:28:29
от ArieZ
Ошибка - You didn't select the correct image

Автор cirip

Ответов: 0
Просмотров: 3858
Последний ответ 18.04.2018, 22:42:27
от cirip
Ошибка в chronoform.php ?

Автор warlocksp

Ответов: 1
Просмотров: 1874
Последний ответ 28.08.2017, 19:16:03
от warlocksp
Ошибка 500 и 502 в компоненте

Автор meatrich

Ответов: 0
Просмотров: 2510
Последний ответ 01.05.2016, 23:04:35
от meatrich
Установил ChronoForms ошибка при отправлении

Автор ramil

Ответов: 0
Просмотров: 1438
Последний ответ 30.04.2016, 09:34:54
от ramil