Функция cot_breadcrumbs в Cotonti

Описание функции cot_breadcrumbs.
Она генерирует строку хлебных крошек на основе переданного массива крошек (пути). Хлебные крошки обычно используются для отображения навигации, показывая путь от главной страницы до текущей страницы.

Код функции

/**
 * Renders breadcrumbs string from array of path crumbs
 *
 * @param array $crumbs Path crumbs as an array: { {$url1, $title1}, {$url2, $title2},..}
 * @param bool $home Whether to include link to home page in the root
 * @param bool $noLinkOnLastCrumb If TRUE, last crumb will be rendered as plain text rather than hyperlink
 * @param bool $plain If TRUE plain titles will be rendered instead of hyperlinks
 * @param string $itemRcTpl Item template
 * @param string $separator Items separator
 * @return string
 */
function cot_breadcrumbs(
    $crumbs,
    $home = true,
    $noLinkOnLastCrumb = true,
    $plain = false,
    $itemRcTpl = '',
    $separator = ''
) {
    global $cfg, $L;

    $tmp = [];
    if ($home) {
        $mainTitle = !empty(Cot::$L['breadcrumbMainTitle']) ? Cot::$L['breadcrumbMainTitle'] : Cot::$L['Home'];
        array_unshift($crumbs, [cot_url('index'), $mainTitle]);
    }
    $cnt = count($crumbs);
    for ($i = 0; $i < $cnt; $i++) {
        $elem = '';
        $params = is_array($crumbs[$i])
            ? [
                'url' => (!empty($crumbs[$i][0])) ? $crumbs[$i][0] : '#',
                'title' => !empty($crumbs[$i][1]) ? $crumbs[$i][1] : '',
            ]
            : ['title' => $crumbs[$i]];

        $params['title'] = htmlspecialchars($params['title'], ENT_COMPAT, 'UTF-8', false);

        if ($plain || ($noLinkOnLastCrumb && $i === $cnt - 1) || !isset($params['url'])) {
            $crumb = cot_rc('breadcrumbs_plain', $params);
            if ($crumb == 'breadcrumbs_plain') {
                $crumb = cot_rc('string_catpath', $params);
            }
        } else {
            $crumb = cot_rc('breadcrumbs_link', $params);
            if ($crumb == 'breadcrumbs_link') {
                $crumb = cot_rc('link_catpath', $params);
            }
        }
        if ($i == 0) {
            $elem = cot_rc('breadcrumbs_first', ['crumb' => $crumb]);
        }
        if ($i == $cnt - 1) {
            $elem = cot_rc('breadcrumbs_last', ['crumb' => $crumb]);
        }
        if (!$elem || $elem == 'breadcrumbs_first' || $elem == 'breadcrumbs_last') {
            $elem = cot_rc('breadcrumbs_crumb', ['crumb' => $crumb]);
        }
        if ($elem == 'breadcrumbs_crumb') {
            $elem = $crumb;
        }
        if (!empty($itemRcTpl)) {
            $elem = cot_rc($itemRcTpl, ['elem' => $elem]);
        }
        $tmp[] = $elem;
    }
    $separator = (!empty($separator) || !empty($itemRcTpl)) ? $separator : cot_rc('breadcrumbs_separator');
    $separator = ($separator == 'breadcrumbs_separator') ? Cot::$cfg['separator'] : $separator;
    $separator = (!empty($itemRcTpl) && (mb_strlen($separator) > 2 || empty($separator)))
        ? $separator
        : ' ' . $separator . ' ';

    $breadcrumbs = implode($separator, $tmp);
    $container = cot_rc('breadcrumbs_container', array('crumbs' => $breadcrumbs));

    return ($container == 'breadcrumbs_container') ? $breadcrumbs : $container;
}


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

$title[] = [cot_url('forums'), Cot::$L['Forums']];

$t->assign([
	'FORUMS_SECTIONS_PAGETITLE' => cot_breadcrumbs($title, Cot::$cfg['homebreadcrumb']),
]);


 

/**
 * Генерирует строку хлебных крошек из массива путевых крошек
 *
 * @param array $crumbs Массив крошек пути: { {$url1, $title1}, {$url2, $title2},..}
 * @param bool $home Указывать ли ссылку на главную страницу в корне
 * @param bool $noLinkOnLastCrumb Если TRUE, последняя крошка будет отображена как обычный текст, а не гиперссылка
 * @param bool $plain Если TRUE, заголовки будут отображаться как обычный текст вместо гиперссылок
 * @param string $itemRcTpl Шаблон для элемента
 * @param string $separator Разделитель между элементами
 * @return string
 */

 

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


$crumbs (array):

Массив крошек, где каждая крошка — это массив с URL и заголовком (например: [['/home', 'Главная'], ['/products', 'Продукты']]).
$home (bool):

Определяет, добавлять ли ссылку на главную страницу в начало массива крошек.
По умолчанию: true (добавлять).
$noLinkOnLastCrumb (bool):

Если установлено в true, то последняя крошка будет отображаться как текст, а не как ссылка (не будет гиперссылкой).
По умолчанию: true.
$plain (bool):

Если установлено в true, все крошки будут отображаться как обычный текст (без гиперссылок).
По умолчанию: false.
$itemRcTpl (string):

Шаблон, который будет использован для рендеринга каждого элемента (крошки).
По умолчанию: пустая строка ('').
$separator (string):

Разделитель между элементами хлебных крошек (например, " > ").
По умолчанию: пустая строка ('').
Возвращаемое значение:
string: Строка HTML, представляющая хлебные крошки, готовая для отображения на странице.
Логика работы:
Добавление главной страницы (если необходимо):

Если параметр $home установлен в true, то добавляется крошка для главной страницы. Заголовок для главной страницы берется из строки ресурса $L['breadcrumbMainTitle'] (если она определена) или по умолчанию используется строка $L['Home'].

В начало массива крошек добавляется ссылка на главную страницу.

Обработка каждой крошки:

Для каждой крошки из массива $crumbs проверяется, является ли текущий элемент массивом (с двумя значениями — URL и заголовок) или строкой (только заголовок).

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

Условия для отображения крошек:

Если параметр $plain установлен в true, или если крошка — это последняя и параметр $noLinkOnLastCrumb установлен в true, или если не указан URL для крошки, то крошка будет отрисована как обычный текст (не ссылка).

В другом случае, если нужно отобразить крошку как ссылку, используется шаблон для ссылки.

Оформление первой и последней крошки:

Для первой крошки используется шаблон breadcrumbs_first, для последней — breadcrumbs_last.

Для всех остальных крошек используется общий шаблон breadcrumbs_crumb.

Шаблон для элементов крошек:

Если передан шаблон для отображения элемента (параметр $itemRcTpl), то этот шаблон применяется для рендеринга каждого элемента.
Настройка разделителя между крошками:

Если параметр $separator не указан, используется разделитель по умолчанию, который берется из строки ресурса или настроек конфигурации.

Разделитель устанавливается между крошками для удобства чтения и визуального разделения.

Генерация контейнера для хлебных крошек:

После того, как все крошки отформатированы, они объединяются в одну строку с использованием заданного разделителя.

Сформированная строка хлебных крошек оборачивается в контейнер с использованием шаблона breadcrumbs_container.

Возвращаемое значение:

Если контейнер не был изменен, то возвращается просто строка хлебных крошек.
Если контейнер был изменен, возвращается HTML-контейнер, оборачивающий крошки.
Пример использования:

$crumbs = [
    ['/home', 'Главная'],
    ['/products', 'Продукты'],
    ['/products/item', 'Товар 1']
];
echo cot_breadcrumbs($crumbs);


Примечания:
Международность: В строках используется система локализации, что позволяет изменять их для разных языков.
Шаблоны: Функция активно использует шаблоны (cot_rc), что позволяет кастомизировать отображение элементов крошек, а также изменять разделители и внешний вид.

 

5 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 21.01.2025 21:39
  • Последнее обновление: 21.01.2025 21:39