Принудительное отображение footer-nav с помощью cookie

Discourse отображает этот нижний колонтитул на основе определённых условий. Добавление футера происходит здесь.

discourse/app/assets/javascripts/discourse/app/templates/application.hbs at a0bbc346cb5d5b89d1a3efdfa89869349a8b067f · discourse/discourse · GitHub

showFooterNav определяется здесь.

discourse/app/assets/javascripts/discourse/app/controllers/application.js at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

Если хотя бы одно из этих условий истинно, навигация будет отображаться.

isiOSPWA() и isAppWebview() определяются здесь.

discourse/app/assets/javascripts/discourse/app/lib/utilities.js at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

Например, isAppWebview() выглядит следующим образом.

discourse/app/assets/javascripts/discourse/app/lib/utilities.js at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

Вы можете добавить дополнительное условие в вашу тему — на вашем сайте Discourse — для проверки куки, например так:

const isWKWebView = () => {
  // проверьте наличие куки и верните true, если она существует
  // или используйте любой другой метод для определения, использует ли пользователь ваше приложение
}

Для других классов вы обычно могли бы изменить showFooterNav() следующим образом:

api.modifyClass("controller:application", {
  pluginId: "show-footer-nav",
  @discourseComputed
  showFooterNav() {
    // ...
  }
});

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

Тем не менее, вы всё ещё можете изменить значение showFooterNav с помощью чего-то подобного:

<script type="text/discourse-plugin" version="0.8">
  const isWKWebView = () => {
    // проверьте и верните ваше условие
  };

  if (isWKWebView()) {
    const applicationController = api.container.lookup("controller:application");
    applicationController.set("showFooterNav", true);
  }
</script>

на вкладке «Header» вашей темы или в инициализаторе, если вы используете удалённую тему.

5 лайков