Última Página Inicial Mobile - Componente de Tema

Moderador, por favor, mova para a categoria apropriada.

Página Inicial Mais Recente no Mobile

Com a descontinuação de site.mobileView no Discourse 3.5, o componente de tema popular Force Mobile Homepage foi marcado como quebrado. Este componente é uma substituição que funciona com as versões atuais do Discourse.

Ele define a página inicial padrão como Mais Recente em telas estreitas, enquanto deixa as telas mais largas (iPad em modo paisagem, desktop) inalteradas. Também lembra a última escolha do usuário entre Mais Recente e Categorias durante a sessão do navegador.

Repositório: GitHub - shortmort37/discourse-mobile-latest-homepage: A theme component that redirects mobile users to Latest instead of Categories on the homepage · GitHub


Comportamento

  • :iphone: iPhone / tela estreita — redireciona para Mais Recente por padrão
  • :left_right_arrow: Usuário navega até Categorias — essa escolha é lembrada pelo restante da sessão do navegador
  • :arrows_counterclockwise: Sessão nova — sempre volta ao padrão de Mais Recente
  • :ipad: iPad (modo paisagem) / desktop — completamente inalterado, layout de duas colunas Categorias + Mais Recente permanece o mesmo

Como funciona

O componente usa window.matchMedia para detecção de viewport, setDefaultHomepage para definir o padrão e o service:router do Ember para redirecionar antes da renderização da página. O sessionStorage lembra a última escolha do usuário, para que ao retornar à página inicial, a preferência seja respeitada.

import { apiInitializer } from "discourse/lib/api";
import { setDefaultHomepage } from "discourse/lib/utilities";

export default apiInitializer("1.0", (api) => {
  if (!window.matchMedia("(max-width: 768px)").matches) {
    return;
  }

  setDefaultHomepage("latest");

  api.onPageChange((url) => {
    if (url === "/categories") {
      sessionStorage.setItem("mobile_homepage", "categories");
    } else if (url === "/latest") {
      sessionStorage.setItem("mobile_homepage", "latest");
    }

    if (url === "/") {
      const choice = sessionStorage.getItem("mobile_homepage");
      if (choice === "categories") {
        const router = api.container.lookup("service:router");
        router.replaceWith("discovery.categories");
      } else {
        const router = api.container.lookup("service:router");
        router.replaceWith("discovery.latest");
      }
    }
  });
});

O ponto de interrupção de 768px alinha-se ao limite do layout estreito próprio do Discourse. Essa abordagem foi baseada nas orientações da equipe principal do Discourse em este tópico, após as mudanças na API de viewport.


Testado em

  • :iphone: iPhone — redireciona para Mais Recente :white_check_mark:
  • :ipad: iPad (modo paisagem) — layout de duas colunas Categorias + Mais Recente :white_check_mark:
  • :desktop_computer: Desktop — layout de duas colunas Categorias + Mais Recente :white_check_mark:

Instalação

  1. Acesse Admin → Personalizar → Temas → Instalar → A partir de um repositório git
  2. Digite: https://github.com/shortmort37/discourse-mobile-latest-homepage
  3. Instale como um componente e adicione-o ao seu tema ativo

Se você é novo na instalação de componentes de tema, consulte o Guia para Iniciantes sobre Temas do Discourse.


Observações

  • Os usuários ainda podem navegar manualmente para Categorias — a escolha deles é respeitada durante a sessão
  • O ponto de interrupção de 768px pode ser ajustado no arquivo JS, se necessário
  • A escolha da sessão é resetada quando o navegador é fechado, então novas visitas sempre começam em Mais Recente

Dúvidas, feedback e PRs são bem-vindos!

Olá, para postar em Customization > Theme component você deve fazer parte do grupo Theme authors - Discourse Meta. Existe um modelo de tópico que deve ser seguido, então, após a aprovação, por favor, poste novamente.