Конфигурирование модуля
Конфигурирование модуля
Создадим административный интерфейс для нашего модуля. Для этого в базовый код добавим:
//в эту переменную будем записывать выводимый в админке текст private $_html = ''; //функция getContent() вызывается при нажатии ссылки "настройки" public function getContent() { //Обработка отправленной формы $this->_postProcess(); //Создаем код формы $this->_displayForm(); //Возвращаем отображаемое содержимое return $this->_html; }
Создадим форму для ввода ссылки:
private function _displayForm() { $this->_html .=' <form action="'.$_SERVER['REQUEST_URI'].'" method="post"> <fieldset> <legend>'.$this->l('Конфигурация тестового модуля').'</legend> <label for="tutorial_url">'.$this->l('Ссылка').'</label> <div class="margin-form"> <input id="tutorial_url" type="text" name="tutorial_url" value="'.Tools::getValue('tutorial_url', Configuration::get('TUTORIAL_URL')).'" /> <p class="clear">'.$this->l('Поле для ввода ссылки').'</p> </div> <p class="center"> <input class="button" type="submit" name="submitTutorial" value="'.$this->l('Сохранить').'"/> </p> </fieldset> </form> '; }
Для отображения в поле ввода ранее введенного текста используем две функции:
- Tools::getValue($key, $defaultValue = false) - возвращает элемент $key массива $_GET или $_POST, если он существует, либо $defaultValue, если не существует;
- Configuration::get($key, $id_lang = NULL) - возвращает сохраненное ранее значение настройки $key, второй параметр $id_lang позволяет задавать настройку для конкретного языка.
Настройки хранятся в базе данных, поэтому конструкция Configuration::get внутри Tools::getValue позволяет уменьшить количество запросов к базе.
Для обработки отправленной формы создадим функцию _postProcess():
private function _postProcess() { //Проверяем отправлена ли форма if(Tools::isSubmit('submitTutorial')) { //Получаем значение поля формы tutorial_url $tutorial_url=Tools::getValue('tutorial_url'); //Проверяем валидность ссылки if(Validate::isUrl($tutorial_url)) { //Сохраняем настройку Configuration::updateValue('TUTORIAL_URL', $tutorial_url); //Выводим сообщение об успешном сохранении $this->_html .= $this->displayConfirmation($this->l('Настройки обновлены.')); } else //Выводим сообщение об ошибке $this->_html .= $this->displayError($this->l('Неверная ссылка.')); } }
- Tools::isSubmit($submit) - проверяет наличие в массиве $_GET или $_POST элемента $submit;
- Validate::isUrl($url) - проверяет на валидность введенное значение;
- Configuration::updateValue($key, $values, $html = false) записывает в настроку $key значения $values. По умолчанию из $values удаляются все html теги, если они нужны, то третьим параметром ф функцию передается true. Для сохранения мультиязыкового значения аргумент $values должен быть массивом, с ключами, соответсвующими идентификатору языка;
- Функции displayConfirmation() и displayError() используются для стандартного оформления сообщений, однако ничего не мешает вместо них использовать собственный код.
Класс Validate предоставляет множество функций для проверки введенных данных. Их использование обеспечивает безопасность сохранения данных и предотвращает XSS. Примеры функций валидации:
- isEmail($email);
- isFloat($float);
- isUnsignedFloat($float);
- isCleanHtml($html);
- isDate($date);
- isBool($bool);
- isPhoneNumber($phoneNumber);
- isPostCode($postcode);
- isInt($int);
- isUnsignedInt($int);
- isUnsignedId($id);
- isNullOrUnsignedId($id);
- isUrl($url);
- isAbsoluteUrl($url);
- isFileName($name);
Представленный код соответсвует стандартам написания модулей для престы, однако никто не запрещает использовать для отображения форм ввода настроек любой другой код. Например при большом количестве вводимых параметров можно использовать smarty для отделения представления от логики.