Новости Joomla

Новый способ добавления и рендера полей в Joomla Form - метод renderControlFields() (Joomla 5.3+)

Новый способ добавления и рендера полей в Joomla Form - метод renderControlFields() (Joomla 5.3+)

При отображении форм компонента в админке раньше разработчикам нужно было описывать скрытые поля в лейаутах. И выглядело это так:

<?php // Это файл в /layouts/components/com_component/your_layout.php ?> <input type="hidden" name="task" value=""> <input type="hidden" name="return" value="<?php echo $input->getBase64('return'); ?>"> <input type="hidden" name="forcedLanguage" value="<?php echo $input->get('forcedLanguage', '', 'cmd'); ?>"> <?php echo HTMLHelper::_('form.token'); ?>

Начиная с Joomla 5.3 добавлен новый способ добавления таких полей (их называют control fields) - программно. И теперь это можно сделать просто в Controller / View.

<?php // В Controller/View добавляем поля $this->form ->addControlField('task', '') ->addControlField('return', $input->getBase64('return', '')) ->addControlField('forcedLanguage', $forcedLanguage);

А в layout'е просто используем метод

renderControlFields()

<?php // В layout формы echo $this->form->renderControlFields();

Многие компоненты ядра уже используют этот подход. Соответствующий PR был принят в Joomla 5.3 осенью 2024г.

Смотреть Pull Request

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

A_nsy

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Добрый день, очень прошу совета. Пытаюсь добавить еще одну форму обратной связи на сайт. (одна уже на нем есть и работает).
Создала модуль с шаблоном и обработчиком.  выглядит нормально, но при попытке отправки данных выдает ошибку 500.

Форма, которая рабочая - на той же странице в футере.

Не пойму пока даже где искать. Вообще же, не проблема, когда на странице две формы обратной связи?
Очень прошу советов. Зараннее спасибо
« Последнее редактирование: 04.09.2019, 09:46:03 от A_nsy »
*

A_nsy

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Да, и я не понимаю как тут можно добавить ссылку или код. Во "вложениях и других параметрах" только три галочки о новых ответах, смайлах и вернуться в тему..
*

voland

  • Легенда
  • 11028
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
А в переводе на технический язык?
Названия, версии, действия? Вот это вот всё
*

A_nsy

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Версия:    Joomla! 3.6.5.
Действия:  Создала модуль, (xml, php, tmpl), встроила в Joomla. Визуально форма выводится нормальн, но при отсыке данных - ошибка 500.
Могла бы прикрепить коды, но не могу понять, как это делается.
Сайт вот он {....}
нижняя (в футере) форма работает. центральная - нет. Создавалась по аналогии с нижней.
« Последнее редактирование: 04.09.2019, 11:13:44 от A_nsy »
*

voland

  • Легенда
  • 11028
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Действия:  Создала
Написали? Установили? Создали модуль в админке?
модуль
Какой? Название?

ну итп
Инспектор показывает запрос и параметры
*

A_nsy

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
модуль mod_innerproject_formback,
написала файлы mod_innerproject_formback.php, mod_innerproject_formback.xml, языковые файлы к ним и папку tmpl для шаблона вывода с файлами default.php, success и error, поместила это все в соответствующую папку в папке modules сайта. Установила расширение в админке, создала модуль, поместила его в материал. Все выводится, ничего не работает
*

A_nsy

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Инспектор... как к нему обратится?
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
500 ошибка это как правило фатальная ошибка в скрипте. Включите показ ошибок в админке.
Или тема белый экран может помочь увидеть что за ошибка.
*

A_nsy

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
500 ошибка это как правило фатальная ошибка в скрипте. Включите показ ошибок в админке.
Или тема белый экран может помочь увидеть что за ошибка.
Большое спасибо за совет, сделала все как в указанной теме  вот что выдал белый экран:

Fatal error: Class 'ReCaptcha' not found in /home/sta/domains/sta.com.ua/public_html/modules/mod_innerproject_formback/mod_innerproject_formback.php on line 13

по указанной строке в коде  вот что:

11.    $secret = "***************************";
12.    $response = null;
13.    $reCaptcha = new ReCaptcha($secret);
14.
15.    if ($_POST["g-recaptcha-response"]) {$response = $reCaptcha->verifyResponse($_SERVER["REMOTE_ADDR"], $_POST["g-recaptcha-response"]);}
16.
17.
18.    $sender = isset($_POST['nameSender'])? htmlspecialchars($_POST['nameSender']) : 'Не указано';
.....
Вместо "***" - соответственно мой код от рекапчи
Но все это взято из файла первой формы обратной связи, которая работает, и я совсем не понимаю, что тут нужно изменит.. На странице не может быть две рекапчи?
*

A_nsy

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Причем сообщение об ошибке точно такое-же даже когда я закомментариваю 11-ю и 13-ю строку.
*

A_nsy

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Переделала капчи с использованием
Код
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
капчи отображаются и работают, н ошибка на белом экране у второй формы, все та же. Надо что-то изменить в PHP, но, что - я не знаю
Помогите, пожалуйста
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
В настройках модуля отключение ReCaptcha есть?
*

A_nsy

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Не совсем поняла, какие настройки имеются в виду. Модуль создавался мной с нуля. НУ... на основе, вернее, файлов модуля существующей (и рабочей) формы обратной связи. Там нет никаких настроек. Я так понимаю в строке 13. создается новый обьект класса reCapcha ... и именно это вызывает баг.. но как без этого организовать проверку второй капчи на PHP я не понимаю.
*

A_nsy

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
А.... прошу прощения, вы наверное имели в виду закоменчена ли строка "JHtml::_('script', 'https://www.google.com/recaptcha/api.js');" в плагине рекапчи Joomla? - да, закоменчена. Без этого капчи вообще не отображались в обеих формах.
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
Модуль создавался мной с нуля
Так должны знать почему он у Вас класс ReCaptcha не находит
*

A_nsy

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Если бы знала не задавала бы вопросов. Другой полностью аналогичный модуль находит класс и работает.
Уже много перечитала и рискну предположить, что дело в том, что средствами PHP проверку второй рекапчи сделать нельзя, потому, что  $_POST[ 'g-recaptcha-response' ] - содержит только один ответ ( для одной капчи).
Так ли это. просто совсем неудобно делать проверку второй капчи на скриптах. Может кто-нибудь знает можно ли как-то средствами PHP проверять капчи, если их на странице 2?
*

A_nsy

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
В настройках модуля отключение ReCaptcha есть?
Прошу прощения, может вы имели ввиду, что перед созданием обьекта recaptcha, надо как-то уничтожить/отключить уже имеющиеся? так?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Сайт перестал нормально грузиться

Автор Leo1986

Ответов: 17
Просмотров: 1207
Последний ответ 11.06.2025, 13:55:08
от zilonitiz
Как конвертировать сайт Joomla в мобильное приложение?

Автор 62411

Ответов: 1
Просмотров: 921
Последний ответ 14.06.2024, 15:31:24
от Olg
После выключения расширения лег сайт

Автор blind

Ответов: 4
Просмотров: 1173
Последний ответ 19.05.2024, 14:13:33
от blind
Google Переводчик не переводит сайт

Автор Aqua

Ответов: 1
Просмотров: 1162
Последний ответ 04.03.2024, 12:50:00
от kovAlexandr78
Администрирую и редактирую сайт на CMS Joomla. Вопросы про настройки CMS

Автор admi5575

Ответов: 4
Просмотров: 945
Последний ответ 10.05.2023, 09:02:29
от admi5575