Ссылки-хлебные крошки

Спасибо большое, @manuel — я обновил этот компонент, используя ваш код (и добавил ещё несколько фрагментов), чтобы реализовать дополнительную функциональность:

  1. Теперь в хлебных крошках поддерживаются подкатегории.
  2. Полная цепочка хлебных крошек теперь отображается на всех страницах списков категорий и подкатегорий, а также на страницах тем.
  3. Появилась настройка для включения или отключения отображения на мобильных устройствах.
2 лайка

Привет! Этот компонент отличный!

Есть лишь одна деталь, которую, возможно, вы знаете, как исправить.

Кнопка «Назад» исчезает при прокрутке вниз (см. прикрепленное видео)… Возможно ли зафиксировать кнопку «Назад» в верхней части экрана, чтобы она оставалась видимой даже при прокрутке?

Контекст: сообщество встроено (webview) в наше мобильное приложение.

2 лайка

Спасибо @cristo за отличную идею, которая теперь добавлена как настройка:

3 лайка

Спасибо @denvergeeks! Кнопка теперь закреплена.

Но, как вы видите на приложенном видео, кнопка не возвращает меня к тому же месту прокрутки на главном экране.

1 лайк

Да, потому что это кнопка «Домой», а не кнопка «Назад»!

1 лайк

Моя ошибка! Я подумал, что это кнопка «Назад», из-за стрелки.

@denvergeeks спасибо за уточнение! Не знаете ли вы компонента, который предлагает кнопку «Назад»?

1 лайк

Нет, мне не известно о каком-либо существующем TC, который был бы (или включал) корректную кнопку «Назад». Возможно, что-то подобное уже существует.

Однако я признаю полезность наличия кнопки «Назад» в навигации по сайту, поэтому я разработаю отдельный TC, который её обеспечит.

Может быть, вы сможете проверить, есть ли какая-либо существующая тема или компонент темы, который уже включает такую кнопку. Это могло бы ускорить мой процесс.

2 лайка

Отлично! Я изучу вопрос и сообщу вам о результатах.

Спасибо!

2 лайка

@denvergeeks Я нашел тему, которая может быть полезной:

Я пока не нашел ни одной существующей темы или компонента, в которых была бы кнопка «Назад».

2 лайка

К сожалению, у меня та же проблема на iPhone 16 Pro Max.

2 лайка

Да, я могу подтвердить, что это произошло после обновления. У меня эта проблема на телефоне Android.

2 лайка

Спасибо @Aaron_Walsh и @cristo за сообщение! Пожалуйста, обновитесь сейчас и сообщите мне о результатах!

4 лайка

Я могу подтвердить проблему на стороне Android. Она уже исправлена и удалена.

2 лайка

Исправлено на моём iPhone!

2 лайка

@denvergeeks Отлично! Кнопка «Назад» работает на Android.

Большое спасибо!

2 лайка

Я заметил, что нет возможности выбрать, где будут располагаться «хлебные крошки», а это было бы здорово. Например, я использую баннеры категорий и хотел бы, чтобы «хлебные крошки» находились выше них.

Когда они находятся ниже, их немного не видно.
Есть ли шанс это изменить?
Спасибо.


Я только что заметил ещё одну вещь, которую можно исправить (или хотя бы добавить возможность включать и отключать эту опцию). Мне кажется, что последний / там не нужен.

image

Так что должно быть просто Главная / Общая дискуссия вместо Главная / Общая дискуссия /.

РЕДАКТИРОВАНИЕ:
Я уже использовал CSS, чтобы это исправить, но считаю, что это должно быть по умолчанию. Если кому-то это нужно:

/* Удалить разделитель (::after content) из последнего элемента хлебных крошек */
.breadcrumbs li:last-child::after {
    content: none;
}

Это небольшая правка, но мне кажется, что так выглядит лучше. Увеличьте margin-bottom до 1rem, чтобы дать элементу больше места для «дыхания», но при этом он также центрируется, когда есть баннер (если мы должны придерживаться этого положения на странице). Посмотрите на моё предыдущее изображение (значение по умолчанию 0.5rem) по сравнению с использованием 1rem:

image


Итоговый результат после всех применённых мной правок CSS:

image

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. Могу ли я решить это самостоятельно или мне нужно ждать обновления плагина?

@manuel На GitHub я заметил, что вы один из контрибьюторов этого компонента, поэтому надеюсь, что вы не против, если я упомяну вас здесь?

Уверен, многие видят это же сообщение:

[Уведомление администратора] Тема 'Ссылки навигационной цепочки' содержит код, требующий обновления. (id:discourse.script-tag-discourse-plugin) (узнать больше)

А ссылка Узнать больше перенаправляет на:

Есть ли шансы, что компонент будет обновлён?
Спасибо!

1 лайк

Я только что открыл PR, исправляющий эту проблему, надеюсь, участники смогут его проверить и слить.

2 лайка

Спасибо, что поделились! Уведомление об ошибке больше не появляется.

У меня возникла ещё одна проблема, о которой я упоминал здесь:

По этому вопросу я обратился к 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:

  1. Извлеките 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, что исправит поиск категории и пути в хлебных крошках.

Не могли бы вы это исправить?
Заранее спасибо :raising_hands: