Функция 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), что позволяет кастомизировать отображение элементов крошек, а также изменять разделители и внешний вид.
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 21.01.2025 21:39
- Последнее обновление: 21.01.2025 21:39