Функция cot_rc_modify в Cotonti
предназначена для изменения HTML-строки, содержащей атрибуты (например, тегов <input>, <div> и др.), добавляя или изменяя значения атрибутов. Она полезна для динамического изменения resource string (ресурсной строки) в шаблонах и PHP-коде фреймворка
Функция cot_rc_modify — мощный инструмент для управления атрибутами HTML-тегов в рамках Cotonti. Она полезна как для разработчиков, так и для верстальщиков, упрощая обработку шаблонов и HTML.
Функция cot_rc_modify предназначена для изменения HTML-строки, содержащей атрибуты (например, тегов <input>, <div> и др.), добавляя или изменяя значения атрибутов. Она полезна для динамического изменения resource string (ресурсной строки) в шаблонах и PHP-коде фреймворка Cotonti.
/**
* Modifies rc string
*
* Example:
* $R['input_text'] = cot_rc_modify($R['input_text'], ['class' => 'form-control'])
* or in template:
* {PAGEADD_FORM_TITLE|cot_rc_modify($this, 'class="form-control"')}
*
* @param string $resourceString A resource string
* @param array<string, string>|string $attributes A string or associative array
* @return string
*/
function cot_rc_modify($resourceString, $attributes)
{
$resourceString = (string) $resourceString;
if ($resourceString === '' || empty($attributes)) {
return $resourceString;
}
if (!is_array($attributes)) {
preg_match_all("/((?<key>[a-z0-9-_]+)=(['\"])(?<value>.*?)\g{3})/", $attributes, $matches);
$attributes = [];
foreach ($matches['key'] as $num => $key) {
$attributes[$key] = $matches['value'][$num];
}
}
if (empty($attributes)) {
return $resourceString;
}
foreach ($attributes as $key => $value) {
if (mb_stripos($resourceString, " " . $key . "=") !== false) {
$resourceString = preg_replace(
"/" . $key . "=(\"|')(.*?)(\"|')/",
$key . '="' . $value . '"',
$resourceString
);
} else {
$resourceString = preg_replace(
"/<([^\/ ]+)(.+)/",
"<$1 " . $key . '="' . $value . '"$2',
$resourceString
);
}
}
return $resourceString;
}
Разбор функции cot_rc_modify
/**
* Modifies rc string
*
* Example:
* $R['input_text'] = cot_rc_modify($R['input_text'], ['class' => 'form-control'])
* or in template:
* {PAGEADD_FORM_TITLE|cot_rc_modify($this, 'class="form-control"')}
*
* @param string $resourceString A resource string
* @param array<string, string>|string $attributes A string or associative array
* @return string
*/
function cot_rc_modify($resourceString, $attributes)
{
// Приводим ресурсную строку к строковому типу (на случай, если передали не строку)
// Если строка пуста или атрибуты не указаны, возвращаем исходную строку без изменений
$resourceString = (string) $resourceString;
if ($resourceString === '' || empty($attributes)) {
return $resourceString;
}
// Если атрибуты переданы строкой (например, 'class="form-control"'),
// преобразуем их в массив вида ['class' => 'form-control']
if (!is_array($attributes)) {
preg_match_all(
"/((?<key>[a-z0-9-_]+)=(['\"])(?<value>.*?)\g{3})/", // Ищем пары ключ="значение"
$attributes,
$matches
);
$attributes = [];
foreach ($matches['key'] as $num => $key) {
$attributes[$key] = $matches['value'][$num]; // Заполняем массив ключ-значение
}
}
// Если после обработки атрибуты всё равно пусты, возвращаем исходную строку
if (empty($attributes)) {
return $resourceString;
}
// Перебираем массив атрибутов для добавления или изменения их в ресурсной строке
foreach ($attributes as $key => $value) {
// Проверяем, существует ли уже указанный атрибут в строке
if (mb_stripos($resourceString, " " . $key . "=") !== false) {
// Если атрибут существует, заменяем его значение на новое
$resourceString = preg_replace(
"/" . $key . "=(\"|')(.*?)(\"|')/", // Ищем существующий атрибут
$key . '="' . $value . '"', // Заменяем его значение
$resourceString
);
} else {
// Если атрибут отсутствует, добавляем его после имени открывающего тега
$resourceString = preg_replace(
"/<([^\/ ]+)(.+)/", // Находим начало тега и его атрибуты
"<$1 " . $key . '="' . $value . '"$2', // Добавляем новый атрибут
$resourceString
);
}
}
// Возвращаем модифицированную строку с изменёнными или добавленными атрибутами
return $resourceString;
}
Подробные комментарии
Проверка строки и атрибутов:
Преобразуем ресурсную строку к строковому типу.
Если строка пуста или атрибуты отсутствуют, дальнейшая обработка не требуется, возвращается исходная строка.
Обработка строковых атрибутов:
Если атрибуты переданы строкой, используется регулярное выражение для разбора строки в формат массива.
Это позволяет поддерживать оба способа передачи атрибутов: строкой или массивом.
Модификация или добавление атрибутов:
Проверяем существование атрибута в строке.
Если атрибут уже есть, обновляем его значение.
Если атрибут отсутствует, добавляем его после имени тега.
Возврат результата:
После обработки всех атрибутов возвращается модифицированная строка.
Назначение
Функция позволяет:
Динамически добавлять новые атрибуты к HTML-тегу.
Изменять значения существующих атрибутов в строке HTML.
Работать как в PHP-коде, так и через шаблоны Cotonti.
Параметры
$resourceString (строка): Исходная HTML-строка, которую нужно изменить. Пример: <input type="text" name="username">.
$attributes (строка или массив): Атрибуты, которые нужно добавить или изменить.
В формате массива: ['class' => 'form-control', 'placeholder' => 'Enter your name'].
В строковом формате: 'class="form-control" placeholder="Enter your name"'.
Результат
Возвращается модифицированная строка HTML с внесёнными изменениями атрибутов.
Как работает функция
Приведение строки ресурса к строковому типу:
$resourceString = (string) $resourceString;
if ($resourceString === '' || empty($attributes)) {
return $resourceString;
}
Если ресурсная строка пуста или отсутствуют атрибуты для изменения, функция возвращает исходную строку без изменений.
Обработка атрибутов: Если $attributes переданы строкой, функция преобразует её в массив. Для этого:
Используется регулярное выражение для нахождения пар ключ="значение".
Извлечённые пары сохраняются в массив $attributes.
Пример:
preg_match_all("/((?<key>[a-z0-9-_]+)=(['\"])(?<value>.*?)\g{3})/", $attributes, $matches);
Модификация строки: Для каждого атрибута из массива $attributes:
Если атрибут уже существует в строке ресурса, его значение заменяется.
$resourceString = preg_replace(
"/" . $key . "=(\"|')(.*?)(\"|')/",
$key . '="' . $value . '"',
$resourceString
);
Если атрибут отсутствует, он добавляется после имени открывающего тега.
$resourceString = preg_replace(
"/<([^\/ ]+)(.+)/",
"<$1 " . $key . '="' . $value . '"$2',
$resourceString
);
Возврат результата: После обработки всех атрибутов функция возвращает модифицированную строку.
Примеры использования функции в Cotonti
Пример 1: Добавление атрибута в PHP
$html = '<input type="text" name="username">'; $modified = cot_rc_modify($html, ['class' => 'form-control', 'placeholder' => 'Enter your name']); echo $modified; // Результат: <input type="text" name="username" class="form-control" placeholder="Enter your name">
Пример 2: Изменение существующего атрибута
$html = '<input type="text" name="username" class="old-class">'; $modified = cot_rc_modify($html, ['class' => 'new-class']); echo $modified; // Результат: <input type="text" name="username" class="new-class">
Пример 3: Использование в шаблоне Cotonti
{PAGEADD_FORM_TITLE|cot_rc_modify($this, 'class="form-control" placeholder="Enter title"')}
В шаблоне изменяет класс и добавляет плейсхолдер к заголовку.
Рекомендации по применению в Cotonti
Модификация HTML в шаблонах: Используйте cot_rc_modify для динамического изменения атрибутов элементов в шаблонах. Это избавляет от необходимости дублировать HTML-структуру в разных вариантах.
Генерация форм: Применяйте функцию для модификации атрибутов полей форм, добавляя стили, плейсхолдеры или идентификаторы.
Темизация: Используйте для внесения изменений в ресурсные строки $R, что позволяет адаптировать HTML под различные темы или условия.
Плюсы функции
Гибкость: поддерживает как строковые, так и массивные атрибуты.
Простота использования.
Интеграция с системой ресурсов $R и шаблонами Cotonti.
Минусы
При большом количестве атрибутов или сложных HTML-структурах может быть менее эффективной, чем работа с DOM.
Требует корректной работы с регулярными выражениями (в случае сложных атрибутов или ошибок в их написании).
Пример записи прямо в шаблонах:
{USERS_REGISTER_USER|cot_rc_modify($this, 'placeholder="MyNickName"')}
{PHP|cot_rc_modify({PRDEDIT_FORM_METATITLE}, 'placeholder="{PHP.L.market_rmetatitle_placeholder}"')}
{PRDEDIT_FORM_TAGS|cot_rc_modify($this, 'class="uk-input"')}
{PRDEDIT_FORM_METATITLE|cot_rc_modify($this, 'placeholder="{PHP.L.market_rmetatitle_placeholder}"')}
{CONTACT_FORM_TEXT|cot_rc_modify($this, 'style="width:100%;"')}
{CONTACT_FORM_EMAIL|cot_rc_modify($this, '', 'contact_form_email')}
{FORM_PHONE|cot_rc_modify($this, 'class="text-form f-s_14 default w_240 m_col_12" placeholder="Номер телефона"')}
{PRDADD_FORM_TITLE|cot_rc_modify($this, '', 'folio_add_title_ph')}
{PRDADD_FORM_LOCATION_INPUT|cot_rc_modify($this, '', 'market_add_location_ph')}
{USERS_EDIT_NEWPASS|cot_rc_modify($this, 'placeholder="Введите" class="text-form m_col_12 m_m-l_0 default w_240 m_m-t_10"')}
{USERS_PROFILE_TEXT|cot_rc_modify($this, 'class="text wMax js-stopwords-check" id="details" rows="4" placeholder="Навыки, опыт, специализация..."')}
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 22.01.2025 22:55
- Последнее обновление: 22.01.2025 22:55