Стандартный тип поля Joomla XML - Color
Поле color в XML-формах Joomla добавляет элемент выбора цвета с поддержкой ручного ввода кода и визуальной палитры. Значение можно указать вручную в форматах HEX, RGB или RGBA, либо подобрать через встроенный интерфейс. Формат возвращаемых данных и поддержка прозрачности зависят от версии Joomla и настройки атрибута alpha.
Атрибуты поля
Ниже приведены основные атрибуты, поддерживаемые типом поля . Используйте их внутри тега <field> вашего XML-манифеста.
| Атрибут | Тип | Описание |
|---|---|---|
name
|
string | Обязательно. Уникальный системный идентификатор поля. Используется для получения значения в PHP ($input->get('name')). |
type
|
string | Обязательно. Должно быть равно color. Определяет тип поля и его поведение. |
label
|
string | Заголовок поля, видимый пользователю в админке. Может быть языковой константой (например, COM_EXAMPLE_COLOR_LABEL). |
description
|
string | Текст подсказки. В Joomla 3 отображается при наведении на заголовок (tooltip), в J4/5/6 выводится под полем или во всплывающем окне. |
default
|
string | Значение по умолчанию. Рекомендуется указывать в формате HEX (#RRGGBB) или RGBA. При некорректном формате поле автоматически сбросится на #000000. |
alpha
|
boolean | Включает поддержку прозрачности (true/false). При true поле возвращает значение в формате RGBA. В Joomla 3 полностью игнорируется. По умолчанию false. |
format
|
string | Формат сохраняемого значения: hex, rgb, rgba или auto (по умолчанию). В Joomla 4+ приоритет имеет атрибут alpha. |
validate
|
string | Подключает валидатор. Рекомендуется validate="color", который проверяет корректность формата HEX или RGBA на уровне сервера и клиента. |
filter
|
string | Фильтр обработки входных данных. Доступные варианты: string (по умолчанию) является базовой очисткой от опасных символов; color делает строгую проверку формата цвета, отклоняет недопустимые значения; raw работает без фильтрации (не рекомендуется); unset поле игнорируется при обработке формы. |
class
|
string | Дополнительные CSS-классы для обёртки поля. Например, class="my-color-field" для кастомной стилизации. |
required
|
boolean | Делает поле обязательным для заполнения (true/false). По умолчанию false. |
readonly
|
boolean | Запрещает редактирование значения. Поле отображается, но пользователь не может изменить цвет. По умолчанию false. |
disabled
|
boolean | Полностью отключает поле. Значение не отправляется в форме и не сохраняется. По умолчанию false. |
showon
|
string | Условное отображение поля в зависимости от значений других полей. Например, showon="enable_color:1". Доступно в Joomla 3.3+ и J4/5/6. |
Визуальные примеры
Ниже представлены скриншоты отображения поля в разных версиях Joomla и темах административной панели.
Пример использования в XML
Добавьте этот код внутрь тега вашего XML-манифеста. Атрибут type="color" автоматически добавляет палитру для выбора цвета и проверяет корректность значения в форматах HEX и RGBA.
<field
name="my_color"
type="color"
label="Выберите цвет"
description="Используйте палитру или введите значение вручную"/>
Получение значения в PHP
Для получения выбранного цвета в PHP-коде необходимо обратиться к объекту ввода приложения. В современных версиях Joomla используется подход через класс Factory, а в Joomla 3.x применяются устаревшие префиксы J. Независимо от версии, всегда применяйте фильтрацию входных данных, чтобы гарантировать безопасность и корректность значения перед использованием в шаблонах.
// --- ВАРИАНТ ДЛЯ JOOMLA 4 / 5 / 6 (Современный) ---
use Joomla\CMS\Factory;
// Получаем объект ввода через Factory (рекомендуемый способ в MVC)
$input = Factory::getApplication()->input;
// getString() возвращает значение как строку, фильтр очистит недопустимые символы
$myColor = $input->getString('my_color', '#000000');
// Опционально: валидация формата цвета (защита от некорректных данных)
$myColor = preg_match('/^#([0-9A-F]{3}){1,2}$|^rgba?\([^)]+\)$/i', $myColor)
? $myColor
: '#000000';
// --- ВАРИАНТ ДЛЯ JOOMLA 3.x (Устаревший) ---
// В J3 использовался JFactory или JRequest
$input = JFactory::getApplication()->input;
$myColor = $input->get('my_color', '#000000', 'string');
// ИЛИ старым способом (не рекомендуется, но для полноты картины):
$myColor = JRequest::getVar('my_color', '#000000', 'get', 'string');
// --- ПОДГОТОВКА К ВЫВОДУ В HTML / CSS ---
// Значение цвета безопасно для вставки в атрибуты style="" после экранирования
// Для inline-стилей:
echo '<div style="background-color: ' . htmlspecialchars($myColor, ENT_COMPAT, 'UTF-8') . ';">Контент</div>';
// Для передачи в JS или data-атрибуты:
echo '<div data-color="' . htmlspecialchars($myColor, ENT_QUOTES, 'UTF-8') . '">Контент</div>';
// Если цвет может содержать RGBA и используется в CSS-переменной:
$cssColor = htmlspecialchars($myColor, ENT_NOQUOTES, 'UTF-8');
echo '<style>:root { --main-color: ' . $cssColor . '; }</style>';
Приведённый код демонстрирует два способа получения данных: современный для Joomla 4/5/6 и обратно совместимый с Joomla 3. В обоих случаях используется строковый фильтр, который очищает ввод от потенциально опасных символов. Дополнительно в примере для новых версий показана проверка формата через регулярное выражение, которая гарантирует, что переменная будет содержать только допустимое значение HEX или RGBA. После получения данные безопасно экранируются перед вставкой в HTML-атрибуты и CSS-переменные.
Совет: Никогда не выводите значение цвета напрямую в атрибут style="" без предварительного экранирования. Валидация на стороне формы защищает от случайных ошибок, но не гарантирует защиту от подменённых HTTP-запросов. Всегда используйте htmlspecialchars() при вставке в CSS или data-атрибуты. При работе с альфа-каналом (RGBA) в Joomla 4+ учитывайте, что старые браузеры могут игнорировать прозрачность — предусмотрите резервный HEX-фон в CSS для корректного отображения во всех средах.
Подводные камни
-
Отсутствие поддержки прозрачности в Joomla 3: Атрибут alpha="true" полностью игнорируется в J3, поле всегда возвращает HEX-значение. При обновлении кода под J4+ необходимо явно проверять формат ответа, чтобы избежать ошибок парсинга.
-
Ограничения нативного HTML5-пикера: Спецификация <input type="color"> не поддерживает альфа-канал. В Joomla 4/5/6 прозрачность эмулируется JavaScript-оверлеем, который может работать нестабильно при отключённом JS или в устаревших версиях Safari.
-
Недостаточность фильтра JInput: Метод getString() или фильтр string лишь удаляет HTML-теги, но не проверяет синтаксис цвета. Без дополнительной серверной валидации в базу могут попасть произвольные строки, ломающие CSS-правила.
-
Сброс значения по умолчанию при ошибке формата: Если в атрибуте default указано недопустимое значение (например, red, transparent или пустая строка), поле автоматически сбросится на #000000. В XML-манифесте всегда используйте валидный HEX или RGBA.
-
Конфликт форматов при добавлении альфа-канала: Если в уже установленном расширении включить alpha="true", ранее сохранённые HEX-значения не конвертируются в RGBA автоматически. Интерфейс покажет цвет без прозрачности, что может нарушить вёрстку, если CSS ожидает формат rgba().