Стандартный тип поля Joomla XML - Email
Тип поля email создает элемент ввода для адреса электронной почты. В отличие от стандартного текстового поля, оно использует HTML5-атрибут type="email", что обеспечивает:
- Нативную валидацию формата email в современных браузерах.
- Оптимизированную клавиатуру на мобильных устройствах (с быстрым доступом к @ и .).
- Серверную проверку данных при отправке формы.
Атрибуты поля
Ниже приведены основные атрибуты, поддерживаемые типом поля . Используйте их внутри тега <field> вашего XML-манифеста.
| Атрибут | Тип | Описание |
|---|---|---|
name
|
string | Обязательный. Уникальный идентификатор поля. Используется для получения данных в PHP ($form->getValue('name')) и генерации HTML-атрибута name. Должен содержать только латинские буквы, цифры и подчеркивания. |
type
|
string | Обязательный. Тип поля. Для данного случая значение всегда email. Определяет рендеринг как , что включает нативную HTML5-валидацию и мобильную клавиатуру. |
label
|
string | Заголовок поля, отображаемый рядом с input. Поддерживает строки перевода (например, JGLOBAL_EMAIL). В Joomla 4-6 автоматически связывается с полем через атрибуты доступности (ARIA). |
required
|
boolean | Если true, поле становится обязательным. Добавляет звездочку (*) к лейблу и атрибут required в HTML. В Joomla 4-6 также добавляет aria-required="true" для скринридеров. |
validate
|
string | Имя правила валидации. Для email используйте validate="email". Обеспечивает проверку формата на сервере и клиенте. |
filter
|
string | Фильтр очистки данных перед сохранением в базу. Критически важно для безопасности. Рекомендуется filter="email", который удалит все недопустимые символы. Если не указан, данные могут сохраниться «как есть», что опасно. |
default
|
string | Значение по умолчанию, которое подставляется в поле при создании новой записи (если поле пустое). Может быть строкой или константой перевода. |
hint
|
string | Текст подсказки внутри поля (HTML5 placeholder). Joomla 4-6: работает нативно. Joomla 3: не поддерживается стандартными макетами (требуется переопределение шаблона или JS-хак). |
description
|
string | Дополнительное описание. Joomla 3: выводилось как всплывающая подсказка (tooltip). Joomla 4-6: поведение зависит от макета формы (часто игнорируется или выводится мелким текстом под полем). Для кратких подсказок лучше использовать hint. |
class
|
string | CSS-классы для тега . В Joomla 4-6 базовые классы (например, form-control) добавляются автоматически, но здесь можно добавить свои кастомные классы. |
labelclass
|
string | CSS-классы для тега |
size
|
integer | Видимая ширина поля в символах (HTML5 атрибут size). В современных адаптивных шаблонах (J4-J6) ширину лучше контролировать через CSS/Bootstrap, а не этот атрибут. |
maxlength
|
integer | Максимальное количество символов, разрешенных для ввода. Браузер блокирует ввод лишнего, сервер также обрезает данные при фильтрации. |
readonly
|
boolean | Если true, поле нельзя редактировать, но его значение отправляется на сервер при отправке формы. Используйте для отображения системных данных, которые нельзя менять, но нужно сохранять. |
disabled
|
boolean | Если true, поле заблокировано и визуально затемнено. Его значение НЕ отправляется на сервер. |
autocomplete
|
string | Управление автозаполнением браузера. Значения: off, on, email, new-email. В Joomla 6 рекомендуется явно указывать autocomplete="email" для улучшения UX и работы менеджеров паролей. |
autofocus
|
boolean | Если true, фокус ввода устанавливается на поле сразу после загрузки страницы. Только одно поле на странице может иметь этот атрибут. |
showon
|
string | Условие динамического отображения поля. Пример: showon="send_copy:1" (показать, если поле send_copy равно 1). Работает в J3 (через JS) и нативно в J4-J6. Очень мощный инструмент для сложных форм. |
spellcheck
|
boolean | Включает (true) или выключает (false) проверку орфографии. Для email рекомендуется false, чтобы браузер не подчеркивал адреса красным. |
pattern
|
string | Регулярное выражение (Regex) для дополнительной клиентской валидации (HTML5). Дополняет validate, но не заменяет серверную проверку. |
Визуальные примеры
Ниже представлены скриншоты отображения поля в разных версиях Joomla и темах административной панели.
Пример использования в XML
Добавьте этот код внутрь тега вашего XML-манифеста. Атрибут type="email" автоматически активирует проверку формата адреса электронной почты браузером и адаптирует клавиатуру на мобильных устройствах.
<field
name="email"
type="email"
label="Электронная почта"
description="Введите вашу электронную почту"/>
Получение значения в PHP
Для получения данных из полей формы в Joomla используется объект JInput. Он обеспечивает безопасную фильтрацию входных данных. Ниже приведены примеры получения адреса электронной почты для современных версий (J4/J5/J6) и устаревших (J3). Обратите внимание на использование метода get() с фильтром 'email'. Этот фильтр автоматически удаляет недопустимые символы и проверяет базовый формат адреса.
// --- ВАРИАНТ ДЛЯ JOOMLA 4/5/6 (Современный) ---
use Joomla\CMS\Factory;
// Получаем объект ввода через Factory
$input = Factory::getApplication()->input;
// Получаем email.
// Третий аргумент 'email' применяет встроенный фильтр очистки
$myEmail = $input->get('my_email_field', '', 'email');
// --- ВАРИАНТ ДЛЯ JOOMLA 3 (Устаревший) ---
// В J3 использовался JFactory
$input = JFactory::getApplication()->input;
$myEmail = $input->get('my_email_field', '', 'email');
// ИЛИ старым способом (не рекомендуется, но встречается в легаси):
$myEmail = JRequest::getVar('my_email_field', '', 'get', 'email');
// --- БЕЗОПАСНЫЙ ВЫВОД ---
// Всегда экранируйте вывод для защиты от XSS
echo htmlspecialchars($myEmail, ENT_QUOTES, 'UTF-8');
// Пример использования в ссылке mailto:
if (!empty($myEmail)) {
echo '<a href="mailto:' . htmlspecialchars($myEmail, ENT_QUOTES, 'UTF-8') . '">'
. htmlspecialchars($myEmail, ENT_QUOTES, 'UTF-8') . '</a>';
}
В приведенных примерах используется фильтр 'email' в качестве третьего аргумента метода get(). Это критически важно для безопасности: фильтр автоматически удаляет любые символы, не соответствующие стандарту адреса электронной почты, предотвращая попытки инъекций. Для вывода данных на странице всегда используйте функцию htmlspecialchars(), чтобы избежать XSS-атак. Если поле может быть пустым, рекомендуется добавить проверку !empty($myEmail) перед использованием значения.
Совет: Всегда явно указывайте атрибут filter="email" в XML-разметке. Хотя тип поля type="email" обеспечивает проверку формата на стороне клиента (в браузере), серверный фильтр необходим для очистки данных перед сохранением в базу, что защищает ваш сайт от некорректных записей и потенциальных уязвимостей.
Подводные камни
-
Отсутствие метода getEmail(): В объекте JInput нет специального метода $input->getEmail(), в отличие от $input->getUrl() или $input->getInt(). Разработчики часто тратят время на его поиск. Правильный способ получения данных, это использовать универсальный метод с указанием фильтра: $input->get('field_name', '', 'email').
-
Разница между readonly и disabled: Если вы установите атрибут disabled="true", значение поля не будет отправлено на сервер при сабмите формы, и данные не сохранятся. Если ваша цель запретить редактирование, но сохранить значение в базе, обязательно используйте readonly="true". Это частая ошибка при настройке форм профиля.
-
Особенности hint в Joomla 3: Атрибут hint (текст-подсказка внутри поля) работает нативно только в Joomla 4 и выше. В Joomla 3 стандартные макеты игнорируют этот атрибут. Если поддержка J3 критична, подсказку придется реализовывать через переопределение макета (layout override) или JavaScript, иначе пользователь её не увидит.