Спасибо большое, @manuel — я обновил этот компонент, используя ваш код (и добавил ещё несколько фрагментов), чтобы реализовать дополнительную функциональность:
Теперь в хлебных крошках поддерживаются подкатегории.
Полная цепочка хлебных крошек теперь отображается на всех страницах списков категорий и подкатегорий, а также на страницах тем.
Появилась настройка для включения или отключения отображения на мобильных устройствах.
Есть лишь одна деталь, которую, возможно, вы знаете, как исправить.
Кнопка «Назад» исчезает при прокрутке вниз (см. прикрепленное видео)… Возможно ли зафиксировать кнопку «Назад» в верхней части экрана, чтобы она оставалась видимой даже при прокрутке?
Контекст: сообщество встроено (webview) в наше мобильное приложение.
Нет, мне не известно о каком-либо существующем TC, который был бы (или включал) корректную кнопку «Назад». Возможно, что-то подобное уже существует.
Однако я признаю полезность наличия кнопки «Назад» в навигации по сайту, поэтому я разработаю отдельный TC, который её обеспечит.
Может быть, вы сможете проверить, есть ли какая-либо существующая тема или компонент темы, который уже включает такую кнопку. Это могло бы ускорить мой процесс.
Я заметил, что нет возможности выбрать, где будут располагаться «хлебные крошки», а это было бы здорово. Например, я использую баннеры категорий и хотел бы, чтобы «хлебные крошки» находились выше них.
Когда они находятся ниже, их немного не видно.
Есть ли шанс это изменить?
Спасибо.
Я только что заметил ещё одну вещь, которую можно исправить (или хотя бы добавить возможность включать и отключать эту опцию). Мне кажется, что последний / там не нужен.
Так что должно быть просто Главная / Общая дискуссия вместо Главная / Общая дискуссия /.
РЕДАКТИРОВАНИЕ:
Я уже использовал CSS, чтобы это исправить, но считаю, что это должно быть по умолчанию. Если кому-то это нужно:
/* Удалить разделитель (::after content) из последнего элемента хлебных крошек */
.breadcrumbs li:last-child::after {
content: none;
}
Это небольшая правка, но мне кажется, что так выглядит лучше. Увеличьте margin-bottom до 1rem, чтобы дать элементу больше места для «дыхания», но при этом он также центрируется, когда есть баннер (если мы должны придерживаться этого положения на странице). Посмотрите на моё предыдущее изображение (значение по умолчанию 0.5rem) по сравнению с использованием 1rem:
Итоговый результат после всех применённых мной правок CSS:
CSS:
/* хлебные крошки - удалить фон и увеличить margin-bottom */
.breadcrumbs {
background-color: transparent !important;
margin-bottom: 1rem;
}
/* хлебные крошки - скрыть стрелку назад из ссылки «Главная» */
.breadcrumbs__title .d-icon {
display: none;
}
/* хлебные крошки - удалить разделитель (::after content) из последнего элемента хлебных крошек */
.breadcrumbs li:last-child::after {
content: none;
}
Привет! У меня в форуме появилось предупреждение из-за предстоящих изменений в ядре Discourse:
[Admin Notice] Один из ваших тем или плагинов требует обновления для поддержки предстоящих изменений в ядре Discourse. (id:discourse.script-tag-discourse-plugin) Выявленная проблема: “Breadcrumb Links”.
Я использую Discourse Cloud. Могу ли я решить это самостоятельно или мне нужно ждать обновления плагина?
Спасибо, что поделились! Уведомление об ошибке больше не появляется.
У меня возникла ещё одна проблема, о которой я упоминал здесь:
По этому вопросу я обратился к ChatGPT, и он ответил (учитывая, что я не разработчик):
Показать сообщение от ChatGPT
Проблема, скорее всего, связана с тем, как вы извлекаете topicId из URL:
const topicId = url.split('/')[2];
Если ваш URL содержит более сложные паттерны (например, заголовки с пробелами, специальными символами или нестандартные слаг), такое простое разделение не позволит надёжно получить правильный ID темы.
Почему это вызывает проблемы:
В URL вроде /t/3ple-2015-2019-title/12345 числовой ID темы находится в конце, но ваш код предполагает, что ID всегда является третьим сегментом.
Если структура URL варьируется, вы иногда получаете слаг или часть заголовка вместо ID.
Это ломает ваш AJAX-запрос (/t/${topicId}.json), так как вы можете отправлять некорректный ID темы или слаг, из-за чего возвращается неверная или стандартная информация о категории (например, «General»).
Как исправить:
Используйте более надёжный способ извлечения ID темы из URL:
Извлеките ID темы из последнего числового сегмента URL.
URL тем в Discourse часто выглядят так: /t/{slug}/{id}, например:
/t/3ple-2015-2019-title/12345
Здесь 12345 — это ID темы.
Замените это:
const topicId = url.split('/')[2];
На это:
const segments = url.split('/').filter(Boolean);
const topicId = segments[segments.length - 1]; // последний сегмент, ожидаемый как числовой ID
Для большей надёжности проверьте, что topicId является числом:
if (!/^\d+$/.test(topicId)) {
console.error("Неверный ID темы, извлечённый из URL:", topicId);
return; // прекратить выполнение
}
Итог: обновите фрагмент кода в updateBreadcrumbs следующим образом:
if (url.includes('/t/')) {
const segments = url.split('/').filter(Boolean);
const topicId = segments[segments.length - 1];
if (!/^\d+$/.test(topicId)) {
console.error("Неверный ID темы, извлечённый из URL:", topicId);
return;
}
// Затем продолжите ваши AJAX-вызовы с использованием topicId
}
Таким образом, вы всегда будете получать числовой ID темы, независимо от сложных заголовков или пробелов в URL, что исправит поиск категории и пути в хлебных крошках.