Создание файла обработчика формы
В любом компоненте обработчик формы является одним из важнейших элементов, в задачу которого входит принять полученные данные, проверить их на безопасность, обработать соответствующим образом (произвести какие-либо расчёты, сохранить в базе данных и так далее) и вывести на экран при помощи файла-шаблона какую-либо определённую информацию.
Иногда бывает более целесообразно не создавать отдельный файл-обработчик, а код для обработки формы прописать прямо в файле шаблона страницы, где находится и сама форма. Это особенно удобно в том случае, если после обработки полученных данных снова открывается эта же страница, т.е. фактически получается, что обработка происходит во время перезагрузки. Например, это очень удобно сделать на странице настроек компонента; в этом случае если пользователь вводит или изменяет какие-либо параметры и нажимает кнопку "Сохранить", происходит полная перезагрузка страницы, в результате чего данные сохраняются и тут же выводятся в обновлённом виде. Об этом подробно будет рассказано в главе 20.
Создание файла обработчика формы и метода в контроллере
Подобного типа файлы, как это уже было сказано в главе 2, должны располагаться в папке model . Откройте редактор Notepad++, создайте и сохраните в указанной папке пустой файл new_mess.php, но не закрывайте его после создания - он ещё чуть позже пригодится. Теперь откройте файл контроллера controller.php (не забудьте, что всё это делается в основной папке компонента com_feefback_form , расположенной в components , административную часть в папке administrator пока не рассматриваем).
В контроллере уже есть один метод, теперь пришло время добавить другой, который будет запускать файл обработчика. Для этого припишите простой код:
24 /**
25 * Метод для запуска обработчика формы
26 * @access public
27 */
28 function process_new_mess()
29 {
30 require(JPATH_COMPONENT .'/model/new_mess.php');
31 }
Обратите внимание на возможную ошибку: этот код должен быть прописан внутри класса контроллера, поэтому проверьте наличие закрывающей класс фигурной скобки!
Почему метод назван process_new_mess, а не как-то по-другому? Обратите внимание на главу 8, строку 30 кода файла шаблона формы обратной связи (tpl_new_mess.php): там в атрибуте action указан адрес:
/index.php?option=com_feedback_form&task=process_new_mess
Обратите внимание на значение переменной task - это и есть название метода, к которому обратиться система при переадресации запроса. А функция require в указанном методе запускает файл обработчика формы, всё просто!
Проверка выполнения кода
Теперь можно попробовать, всё ли сделано правильно.
Для начала снова откройте в редакторе файл обработчика (new_mess.php) и пропишите простейший код:
1 <pre>
2 <?php
3 /**
4 * @Author WDS
5 * @subpackage Components
6 * @link Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
7 * @license GNU/GPL
8 * @copyright Copyright (C) 2019
9 */
10 // ЗАЩИТА ОТ НЕСАНКЦИОНИРОВАННОГО ДОСТУПА
11 defined( '_JEXEC' ) or die( 'Доступ запрещен...' );
12 print_r($_POST);
13 print_r($_POST);
14 ?>
15 </pre>
В начале и в конце кода установлены временные теги <pre> и </pre>. Это нужно для более удобного вывода информации на экран (см. ниже).
Далее, как обычно, следует открывающий тег, сопроводительная информация и защита от несанкционированного доступа. А вот в строках 11-12 временно прописаны две функции print_r, выводящие удобочитаемую информацию, содержащуюся в переменных $_POST и $_POST.
Теперь запустите локальный сервер, откройте сайт и страницу "Обратная связь". Выберите тип сообщения из предложенного списка, введите какой-либо небольшой текст, например, "этот текст создан для проверки работы формы обратной связи", выберите какое-либо изображение (не важно какое, главное что бы было) и нажмите "Отправить!". В результате вы получите на экране распечатку содержимого указанных выше переменных в виде двух массивов - как именно это и описано в главе 14.
Закройте сайт, вернитесь в редактор и удалите в коде временные элементы - теги <pre> и </pre>, а так же строки 12 и 13 (функции print_r) и переходите к следующей главе.