Функция 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

Article multicategories

Additional categories where this article is shown as similar.

Content author

Administrator

Offline

Administrator

Last logged: 2026-09-13 14:50

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