Функция cot_url_modify в Cotonti

создает измененную версию текущего URL, добавляя или заменяя указанные параметры. Она также учитывает постфиксы, флаги экранирования HTML-символов и глобальные параметры

Функция cot_url_modify создает измененную версию текущего URL, добавляя или заменяя указанные параметры $params. Она также учитывает постфиксы, флаги экранирования HTML-символов и глобальные параметры ($cot_url_appendix).

Код штатной функции котонти - cot_url_modify:

function cot_url_modify($params = [], $tail = '', $htmlspecialcharsBypass = false, $ignoreAppendix = false)
{
    // Предобработка аргументов
    if (is_string($params)) {
        $params = cot_parse_str($params); // Преобразование строки параметров в массив
    }
    if (!is_array($params)) {
        $params = []; // Если параметры не массив, создаем пустой массив
    }

    // Определение области (модуля или плагина)
    $area = defined('COT_PLUG') ? 'plug' : Cot::$env['ext'];

    // Объединение текущих GET-параметров с переданными
    $params = array_merge($_GET, $params);

    // Если не плагин, удаляем параметр 'e' (обозначение расширения)
    if (!defined('COT_PLUG')) {
        unset($params['e']);
    }

    // Удаляем параметр 'rwr' (обычно используется для обработки ЧПУ)
    unset($params['rwr']);

    // Возвращаем URL, сформированный с учетом обработанных параметров
    return cot_url(
        $area,
        $params,
        $tail,
        $htmlspecialcharsBypass,
        $ignoreAppendix
    );
}

Подробное объяснение:


Преобразование параметров в массив:

if (is_string($params)) {
    $params = cot_parse_str($params);
}
if (!is_array($params)) {
    $params = [];
}

Если $params переданы строкой (например, 'param1=value1&param2=value2'), они преобразуются в массив с помощью cot_parse_str. Если $params не массив или строка, создается пустой массив.

Определение области (модуля или плагина):

$area = defined('COT_PLUG') ? 'plug' : Cot::$env['ext'];

Функция определяет текущую область:

Если выполняется плагин (COT_PLUG определен), областью будет 'plug'.
В остальных случаях используется текущая область, хранящаяся в Cot::$env['ext'].

Объединение параметров:

$params = array_merge($_GET, $params);

Содержимое текущих GET-параметров ($_GET) объединяется с переданными $params. Если параметры совпадают, приоритет имеют значения из $params.

Удаление специфичных параметров:

if (!defined('COT_PLUG')) {
    unset($params['e']);
}
unset($params['rwr']);


Удаляется параметр 'e' (если текущая область — не плагин). Этот параметр отвечает за идентификацию модуля или расширения в Cotonti.

Удаляется параметр 'rwr', который используется для обработки ссылок в формате ЧПУ (человеко-понятные URL).

Формирование ссылки:

return cot_url(
    $area,
    $params,
    $tail,
    $htmlspecialcharsBypass,
    $ignoreAppendix
);

Финальный URL генерируется с использованием обработанных параметров, указанной области $area и дополнительных флагов ($tail, $htmlspecialcharsBypass, $ignoreAppendix).

Параметры функции:

$params (массив или строка)

Массив или строка с параметрами, которые нужно добавить или изменить в текущем URL.

$tail (строка)

Постфикс, добавляемый в конец URL (например, якорь #anchor).

$htmlspecialcharsBypass (булево)

Если true, отключается преобразование специальных символов в HTML (например, & в &).
 

$ignoreAppendix (булево)

Если true, игнорируется глобальная переменная $cot_url_appendix.


Итоги:

Функция позволяет динамически модифицировать текущий URL, добавляя или заменяя параметры, сохраняя гибкость и совместимость с Cotonti. Она полезна для генерации ссылок с учетом текущего состояния страницы.

 

Пример использования функции cot_url_modify в контексте фреймворка Cotonti:

Задача:

На странице с перечнем статей требуется создать ссылку, которая добавит или изменит параметр сортировки (sort) на date и укажет количество элементов на странице (limit) как 10. Ссылка также должна содержать якорь для прокрутки вниз к разделу с заголовком.

Пример использования:

// Исходный URL: index.php?e=page&cat=news&sort=title&limit=5

// Массив параметров, которые нужно изменить или добавить
$newParams = array(
    'sort' => 'date',  // Изменяем сортировку на 'date'
    'limit' => 10      // Указываем, что на странице должно быть 10 элементов
);

// Указываем якорь для ссылки
$tail = '#articles'; // Якорь для раздела "articles"

// Генерируем ссылку с помощью cot_url_modify
$newUrl = cot_url_modify($newParams, $tail);

// Вывод ссылки
echo '<a href="' . $newUrl . '">Сортировать по дате</a>';


Объяснение:

Исходный URL: Допустим, текущий URL выглядит так:

index.php?e=page&cat=news&sort=title&limit=5
Параметр sort отвечает за сортировку статей (в данном случае сортировка по названию title).
Параметр limit определяет количество статей на странице (здесь 5).

Передаем параметры для модификации:

$newParams = array(
    'sort' => 'date',  // Меняем сортировку на 'date'
    'limit' => 10      // Задаем новое значение для лимита
);

Добавляем якорь:

$tail = '#articles'; // Указываем якорь на раздел "articles"

Генерация нового URL:

$newUrl = cot_url_modify($newParams, $tail);

Эта строка создаст URL, объединяя текущие параметры из $_GET с новыми значениями, указанными в $newParams. Также добавится якорь из $tail.

Результат: На странице будет выведена ссылка:

<a href="index.php?e=page&cat=news&sort=date&limit=10#articles">Сортировать по дате</a>

При клике на неё пользователь будет перенаправлен на ту же категорию новостей, но уже с сортировкой по дате и отображением 10 элементов.

Итоги:

Функция cot_url_modify очень удобна, когда нужно изменить или добавить параметры в текущий URL без необходимости заново строить его с нуля. Она автоматически обрабатывает все параметры и корректно работает с ЧПУ (если включены).

 

4 minutes read Administrator

Comments (0)

No comments yet
Only registered users can post new comments

Content author

Administrator

Offline

Administrator

Last logged: 2026-08-03 13:51

  • Page published: 2025-01-23 22:54
  • Last update: 2025-01-23 23:07