Стандартный тип поля Joomla XML - Password
Тип поля password создает защищенное поле ввода, в котором символы маскируются (скрываются точками) для предотвращения подглядывания. В Joomla 4.x, 5.x и 6.x поле автоматически интегрируется с системой Password Policy, предоставляя встроенную проверку сложности пароля и визуальный индикатор надежности (Strength Meter).
Важно: Это поле отвечает только за визуальное скрытие ввода при наборе. Оно не шифрует данные при сохранении. Если значение сохраняется в параметрах (params) или базе данных, оно может храниться в открытом виде, если не реализовано дополнительное хэширование на уровне PHP-кода расширения.
Атрибуты поля
Ниже приведены основные атрибуты, поддерживаемые типом поля . Используйте их внутри тега <field> вашего XML-манифеста.
| Атрибут | Тип | Описание |
|---|---|---|
name
|
string | Обязательно. Уникальный системный идентификатор поля. Используется для получения значения в PHP ($input->get('name')). |
type
|
string | Обязательно. Должно быть равно "password". Определяет тип поля и его поведение (маскировка ввода). |
label
|
string | Заголовок поля, видимый пользователю. Может быть языковой константой (например, JGLOBAL_PASSWORD) или текстом. |
description
|
string | Текст подсказки или описания. В Joomla 3 отображался как tooltip при наведении. В Joomla 4/5/6 обычно выводится под полем или в зависимости от макета формы. |
required
|
boolean | Делает поле обязательным для заполнения. Если true, форма не отправится без значения. Возможные значения: true, false. |
validate
|
string | Правило валидации данных. Для паролей часто используется validate="password" (проверка сложности) или validate="equals" (для подтверждения пароля). В J4+ интегрировано с политикой паролей ядра. |
strengthmeter
|
boolean | Включает отображение индикатора сложности пароля (Strength Meter). Работает "из коробки" в Joomla 4/5/6. В Joomla 3.x игнорируется. Значения: true, false. |
filter
|
string | Фильтр очистки входных данных перед сохранением. Для паролей рекомендуется использовать filter="string", чтобы сохранить спецсимволы, но убрать управляющие байты. Не используйте alnum или cmd. |
default
|
string | Значение по умолчанию. Внимание: Никогда не указывайте реальный пароль в этом атрибуте в открытом виде в XML-файлах. Обычно оставляется пустым. |
showon
|
string | Позволяет показывать или скрывать поле динамически в зависимости от значений других полей формы. Пример: showon="enable_password:1". Работает через JavaScript. |
maxlength
|
integer | Максимальное количество символов, которое можно ввести в поле. Ограничение на уровне HTML. |
min_length
|
integer | Минимальная длина пароля для валидации. Используется совместно с validate. В J4+ может переопределять глобальные настройки политики паролей. |
size
|
integer | Визуальная ширина поля ввода в символах. Не ограничивает количество вводимых символов, только отображаемую область. |
hint
|
string | Текст-подсказка (placeholder), который отображается внутри пустого поля до начала ввода. |
autocomplete
|
string | Управление автозаполнением браузера. Для полей смены пароля рекомендуется autocomplete="new-password", чтобы браузер предложил сгенерировать новый, а не подставил старый. Для отключения: off. |
readonly
|
boolean | Режим «только для чтения». Пользователь видит значение, но не может его изменить. Значения: true, false. |
disabled
|
boolean | Делает поле недоступным. Значение не отправляется на сервер и не сохраняется. Значения: true, false. |
class
|
string | Дополнительные CSS-классы для стилизации поля. Например, class="form-control input-xlarge". |
lock
|
boolean | Специфичный атрибут для админ-форм Joomla. Если true, поле заблокировано, но рядом появляется кнопка «Изменить» для разблокировки. Значения: true, false. |
autofocus
|
boolean | Устанавливает фокус на поле автоматически после загрузки страницы. Значения: true, false. |
onchange
|
string | Устанавливает фокус на поле автоматически после загрузки страницы. Значения: true, false. |
spellcheck
|
boolean | Включает или отключает проверку орфографии браузером. Для паролей рекомендуется false. Значения: true, false. |
pattern
|
string | Регулярное выражение (Regex) для валидации формата пароля на стороне клиента (HTML5). Например, pattern=".{8,}" требует минимум 8 символов. |
title
|
string | Текст подсказки, который появляется при нарушении правила pattern. Полезно для объяснения требований к паролю. |
Визуальные примеры
Ниже представлены скриншоты отображения поля в разных версиях Joomla и темах административной панели.
Пример использования в XML
Добавьте этот код внутрь формы вашего XML-манифеста. Атрибут type="password" указывает браузеру маскировать вводимые символы, а в Joomla 4+ автоматически активирует встроенную проверку сложности пароля.
<field
name="my_password"
type="password"
label="Пароль"
description="Введите ваш пароль" />
Получение значения в PHP
Значение поля извлекается через объект JInput. Примеры ниже демонстрируют различия в синтаксисе для Joomla 3.x и J4/J5/J6. Для корректной обработки паролей применяется фильтр string, позволяющий использовать спецсимволы без риска инъекций управляющих символов.
// --- ВАРИАНТ ДЛЯ JOOMLA 4 / 5 / 6 (Современный) ---
use Joomla\CMS\Factory;
// Получаем объект ввода через Factory
$input = Factory::getApplication()->input;
// getString() очищает ввод от управляющих символов, но сохраняет спецсимволы пароля (!@#$%)
$myPassword = $input->getString('my_password_field', '');
// --- ВАРИАНТ ДЛЯ JOOMLA 3.x (Устаревший) ---
// В J3 использовался JFactory
$input = JFactory::getApplication()->input;
$myPassword = $input->get('my_password_field', '', 'string');
// ИЛИ старым способом (не рекомендуется к использованию в новом коде):
// $myPassword = JRequest::getVar('my_password_field', '', 'post', 'string');
// --- ВАЖНОЕ ПРИМЕЧАНИЕ ---
// Переменная $myPassword теперь содержит "сырой" пароль, введенный пользователем.
// 1. Никогда не выводите это значение на экран (echo, print_r) даже в режиме отладки.
// 2. Используйте эту переменную только для сравнения (password_verify)
// или передачи в защищенные методы аутентификации.
Полученная переменная содержит «сырое» значение, введенное пользователем. Используйте её только для безопасной проверки (например, сравнения хэшей) или передачи в защищенные API. Категорически не рекомендуется выводить это значение в лог-файлы, ответы JSON или на экран, даже в режиме отладки.
Совет: Если вы используете это поле для ввода API-ключей или токенов, которые должны храниться в открытом виде (для последующего использования в запросах), убедитесь, что ваше расширение шифрует эти данные перед записью в базу данных или конфигурационный файл. Стандартное поле password не обеспечивает шифрование при сохранении — оно лишь скрывает символы при визуальном вводе.
Подводные камни
-
Хранение в открытом виде: Поле type="password" маскирует ввод только в браузере. Если вы сохраните полученное значение напрямую в базу данных или params.ini без предварительного хэширования или шифрования, пароль будет доступен любому, кто имеет доступ к файлам или БД сайта.
-
Исчезновение значения при ошибке валидации: В Joomla 4/5/6 из соображений безопасности поле пароля не заполняется автоматически предыдущим значением, если форма не прошла валидацию (например, пользователь забыл заполнить другое обязательное поле). Пользователю придется вводить пароль заново. Это стандартное поведение HTML5 и Joomla, а не ошибка.
-
Различия в валидации J3 и J4+: В Joomla 3.x атрибут validate="password" часто требовал наличия отдельного JS-скрипта или плагина для проверки сложности. В Joomla 4/5/6 валидация и индикатор сложности (Strength Meter) встроены в ядро и работают автоматически, если включена политика паролей. Старые скрипты валидации из J3 могут конфликтовать с новыми веб-компонентами.
-
Автозаполнение браузером: Браузеры могут игнорировать маскировку или предлагать сохранить пароль даже в административной части. Для полей с API-ключами или токенами рекомендуется использовать атрибут autocomplete="off" или autocomplete="new-password", чтобы избежать случайной подстановки личных паролей пользователя вместо служебных ключей.
-
Регистрозависимость и пробелы: Фильтр string (используемый по умолчанию при получении через $input->getString()) может обрезывать пробелы в начале и конце строки (trim). Если ваш сервис требует точного совпадения с пробелами внутри пароля, убедитесь, что они не теряются при обработке, хотя большинство стандартов безопасности рекомендуют запрещать пробелы по краям.