Стандартный тип поля Joomla XML - Text
Тип поля text является стандартным элементом форм в Joomla. Он отображает однострочное поле ввода для получения произвольных строковых данных от пользователя. Это базовый тип поля, который поддерживается во всех версиях Joomla, начиная с 1.5 и заканчивая новейшими релизами 4.x, 5.x и 6.x.
Атрибуты поля
Ниже приведены основные атрибуты, поддерживаемые типом поля . Используйте их внутри тега <field> вашего XML-манифеста.
| Атрибут | Тип | Описание |
|---|---|---|
name
|
string | Обязательно. Уникальный системный идентификатор поля. Используется для сохранения данных в БД и получения значения в PHP ($input->get('name')). |
type
|
string | Обязательно. Должно быть равно "text". Определяет тип поля как стандартное однострочное текстовое поле. |
label
|
string | Заголовок поля, видимый пользователю. Рекомендуется использовать языковые константы (например, COM_EXAMPLE_FIELD_LABEL). |
description
|
string | Текст подсказки или описания. В Joomla 3 отображался как tooltip при наведении. В J4/5/6 часто выводится как небольшой текст под полем. |
default
|
string | Значение по умолчанию, которое будет установлено в поле при создании новой записи или если значение не сохранено. |
filter
|
string | Критически важно. Определяет правило очистки данных перед сохранением. Стандарт: filter="string" (удаляет HTML-теги). Другие варианты: raw, safehtml, int, email. |
required
|
boolean | Если true, поле становится обязательным для заполнения. Браузер не позволит отправить форму без значения. Добавляет визуальный маркер (звездочку) в J4/5/6. |
hint
|
string | Текст-подсказка внутри пустого поля (реализует HTML5 атрибут placeholder). Например: "Введите ваше имя". |
maxlength
|
integer | Максимальное количество символов, которое можно ввести. Работает на стороне клиента (в браузере). Не заменяет серверную проверку длины. |
size
|
integer | Визуальная ширина поля в символах (HTML-атрибут size). Не ограничивает ввод, только влияет на отображение. |
readonly
|
boolean | Если true, пользователь видит значение, но не может его изменить. Данные из такого поля отправляются на сервер. |
disabled
|
boolean | Если true, поле заблокировано (серое). Данные из такого поля НЕ отправляются на сервер при сабмите формы. |
pattern
|
string | Регулярное выражение (Regex) для валидации ввода на стороне клиента. Например: pattern="[0-9]+" разрешит только цифры. |
autocomplete
|
string | Управление автозаполнением браузера. off — отключить, on — включить. Также поддерживает значения типа email, username, new-password. |
inputmode
|
string | (Joomla 4/5/6) Подсказывает мобильным браузерам, какую клавиатуру показать. Значения: numeric, tel, email, url, search. |
showon
|
string | Позволяет показывать/скрывать поле динамически в зависимости от значений других полей. Пример: showon="other_field:1". |
class
|
string | Дополнительные CSS-классы для тега . Позволяет кастомизировать стилизацию конкретного поля. |
autofocus
|
boolean | Если true, фокус автоматически устанавливается на это поле при загрузке страницы. |
spellcheck
|
boolean | Включает (true) или выключает (false) проверку орфографии браузером. |
message
|
string | Пользовательское сообщение об ошибке, которое заменит стандартное, если валидация (через pattern или validate) не пройдена. |
Визуальные примеры
Ниже представлены скриншоты отображения поля в разных версиях Joomla и темах административной панели.
Пример использования в XML
Добавьте этот фрагмент в структуру вашей XML-формы. Поле с типом text является универсальным элементом для ввода коротких строковых значений и поддерживает все стандартные атрибуты HTML5.
<field
name="my_text_field"
type="text"
label="Текстовое поле"
description="Введите произвольный текст"/>
Получение значения в PHP
Для получения значения поля в PHP-коде используйте объект Input. Метод getString() автоматически применяет фильтр безопасности, удаляя потенциально опасные HTML-теги из введенных данных. Это стандартный и наиболее безопасный способ работы с текстовыми полями в Joomla.
// --- ВАРИАНТ ДЛЯ JOOMLA 4 / 5 / 6 (Современный) ---
use Joomla\CMS\Factory;
$input = Factory::getApplication()->input;
$myText = $input->getString('my_text_field', '');
// --- ВАРИАНТ ДЛЯ JOOMLA 3.x (Устаревший) ---
$input = JFactory::getApplication()->input;
$myText = $input->get('my_text_field', '', 'string');
// --- ПОДГОТОВКА ДАННЫХ ДЛЯ ВЫВОДА ---
// Сохраняем безопасное значение в отдельную переменную.
// Это удобно, если значение нужно использовать в коде несколько раз.
$safeText = htmlspecialchars($myText, ENT_QUOTES, 'UTF-8');
// HTML-ВЕРСТКА (VIEW)
echo '<div class="my-text-container">';
echo '<h3>Введенный текст:</h3>';
echo '<p>'.$safeText.'</p>';
echo '</div>';
Обратите внимание: использование htmlspecialchars() при выводе данных является критически важным шагом для защиты вашего сайта от XSS-атак (межсайтового скриптинга). Даже если вы применили фильтр string при получении данных, экранирование специальных символов гарантирует, что пользовательский ввод будет отображен как обычный текст, а не исполнен браузером как код.
Совет: Всегда используйте атрибут filter="string" в XML-разметке или метод $input->getString() в PHP-коде. Это автоматически удалит HTML-теги и скрипты из пользовательского ввода, предотвращая сохранение вредоносного кода в базе данных. Для полей, где теги нужны (например, краткое описание), используйте filter="raw", но будьте предельно осторожны с выводом таких данных.
Подводные камни
-
Фильтр string не заменяет экранирование при выводе: Атрибут filter="string" или метод getString() удаляют HTML-теги, но не экранируют специальные символы. Для защиты от XSS-атак при выводе значения в HTML всегда необходимо использовать функцию htmlspecialchars().
-
Атрибут maxlength работает только на стороне клиента: Ограничение длины ввода через maxlength легко обходится злоумышленниками. Если размер поля в базе данных ограничен (например, VARCHAR(50)), обязательно добавляйте серверную проверку длины строки в PHP перед сохранением, чтобы избежать ошибок базы данных.
-
Риск обрезки многобайтных символов: При программной обрезке текста из этого поля стандартными функциями PHP (например, substr) кириллица или эмодзи могут повреждаться. Используйте мультибайтные функции (mb_substr) или хелперы Joomla StringHelper для корректной работы с UTF-8.