クッキーでフッターナビゲーションを強制する

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

これらのいずれかが true の場合、ナビゲーションが表示されます。

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>

これは、テーマのヘッダータブ、またはリモートテーマを使用している場合はイニシャライザーに記述します。

「いいね!」 5