Как добавить плавающую кнопку «Назад» в Discourse (для мобильных пользователей)

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

Я не программист и недостаточно хорошо разбираюсь в Discourse, чтобы что-то сломать :wink:, но всё же с помощью ChatGPT смог сделать работающую синюю кнопку «Назад», как на этом фото с моей собакой.

Хочу скрывать эту кнопку на определённых страницах, но пока не разобрался, как скрывать элементы. Если кто-то знает, как это сделать, я обновлю и дополню инструкцию.

Как добавить плавающую кнопку «Назад» в Discourse (для мобильных пользователей)

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


Шаг 1: Создание нового компонента темы

  1. Войдите как администратор:
  • Перейдите на свой форум Discourse и войдите под учётной записью администратора.
  1. Откройте настройки темы:
  • Перейдите в раздел Администрирование > Настройка > Темы.
  1. Создайте компонент темы:
  • Нажмите Компоненты.
  • Нажмите Установить > Создать новый.
  • Назовите компонент «Мобильная кнопка Назад» и нажмите Создать.

Шаг 2: Добавление кода кнопки «Назад»

  1. Отредактируйте компонент темы:
  • Нажмите на только что созданный компонент темы.
  • Перейдите в раздел CSS/HTML.
  1. Добавьте JavaScript для кнопки «Назад»:
  • Переключитесь на вкладку Mobile.
  • Нажмите на секцию </head>.
  • Вставьте следующий код:

html

Copy code

<script type="text/discourse-plugin" version="0.8">
  function addMobileBackButton() {
    const isMobileView = api.container.lookup('site:main').mobileView;
    if (isMobileView) {
      const existingButton = document.querySelector('.floating-back-button');
      if (!existingButton) {
        const backButton = document.createElement('button');
        backButton.className = 'floating-back-button';
        backButton.innerHTML = '&#8592;'; // Unicode для стрелки влево
        backButton.onclick = (event) => {
          event.preventDefault();
          window.history.back();
        };
        document.body.appendChild(backButton);
      }
    }
  }

  // Добавляем кнопку при первоначальной загрузке страницы
  document.addEventListener('DOMContentLoaded', addMobileBackButton);

  // Проверяем снова при переходах между страницами
  api.onPageChange(addMobileBackButton);
</script>

Шаг 3: Добавление CSS для стилизации

  1. Добавьте стили для кнопки «Назад»:
  • На вкладке Mobile откройте секцию CSS.
  • Вставьте следующий CSS:

css

Copy code

.floating-back-button {
  position: fixed;
  bottom: 20px;
  left: 20px;
  width: 50px;
  height: 50px;
  border-radius: 50%;
  background-color: #0088cc; /* Измените цвет при необходимости */
  color: #fff;
  border: none;
  font-size: 24px;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
  z-index: 1000;
  cursor: pointer;
}

Шаг 4: Применение компонента темы

  1. Вернитесь к настройкам тем:
  • Перейдите обратно в раздел Администрирование > Настройка > Темы.
  1. Отредактируйте активную тему:
  • Нажмите на вашу активную тему.
  • В разделе Компоненты темы выберите из выпадающего списка компонент «Мобильная кнопка Назад».
  • Нажмите Добавить, а затем Сохранить.

Шаг 5: Проверка изменений

  1. Откройте форум на мобильном устройстве:
  • Используйте мобильный браузер или эмулируйте мобильный вид через инструменты разработчика.
  1. Проверьте работу кнопки «Назад»:
  • Кнопка должна появиться в левом нижнем углу экрана.
  • При нажатии на неё должно происходить перемещение назад по истории браузера.

Примечания:

  • Только для мобильных устройств: Поскольку код и CSS находятся на вкладке Mobile, кнопка будет отображаться только на мобильных устройствах.
  • Настройка внешнего вида:
    • Вы можете изменить положение, размер или цвет кнопки в CSS, чтобы она соответствовала дизайну вашего форума.
  • Функциональность:
    • Кнопка «Назад» использует window.history.back(). Если предыдущей страницы нет, переход не будет выполнен.

Не знаю, но кнопка «Назад» не нужна, так как свайп работает отлично.

Возможно, у меня что-то не так с установкой, но я не мог стабильно делать свайпы. Всё ещё разбираюсь в Discourse.

Для Chrome можно свайпнуть от левого края, чтобы вернуться назад.
В браузерах также работает кнопка «Назад» на моём телефоне. У вас тоже работает?
Если не ошибаюсь, можно использовать api.onPageChange(), а затем получить URL страницы.
Смотрите:

@Jagster, так что я обнаружил несколько вещей, которые влияли на моё непонимание существования жестов свайпа.

На моём iPhone свайпы работают отлично. У меня есть два Android-смартфона с Chrome. На одном свайпы работают нормально, на другом — почти невозможно сделать свайп. На Android, если установить PWA, кажется, что свайпы перестают работать вообще. Телефоны все относительно новые, от 1 до 3 лет.

Не знаю, сталкивались ли с этим другие?

@NateDhaliwal спасибо! Я только что опубликовал информацию о своём опыте работы с iPhone и Android: результаты различаются в зависимости от устройства, а в PWA это вообще не работает.

Да, работает. И на Android можно даже свайпнуть назад к списку форумов в приложении Hub — это очень круто.

Так же и со всеми i-устройствами, но кто считает :joy:

А вот почему жесты у некоторых не работают — у меня нет объяснения. Но все мои пользователи постоянно используют свайпы, и никаких жалоб :man_shrugging: