Fiz a transição para o Discourse recentemente e minha comunidade está dividida sobre se gosta ou não da rolagem infinita. Alguns usuários gostam, outros não se importam, alguns a tratam como uma ameaça existencial à comunidade. Com base em outras discussões que li aqui, parece que é um ponto comum de discórdia.
Entendo que os desenvolvedores deste software não têm intenção de fornecer paginação como opção. Posso respeitar isso. Neste ponto, escrevi alguns plugins e layouts e olhei um pouco o código no core do github, então tenho familiaridade básica com o software. Estou apenas me perguntando quão difícil seria escrever um plugin para paginação caso minha comunidade continue a resistir? É provável que eu tenha que reescrever muito do código ruby básico? É algo que pode ser colocado em cima de todo o código existente que poderia rodar perfeitamente? A estrutura do banco de dados é realmente mal projetada para consulta de forma paginada?
Apenas queria ter uma noção da viabilidade de empreender esta tarefa pelas pessoas que estão mais familiarizadas com o código.
Eu acho que o principal problema que você teria seria o fardo constante de manter um plugin que quebrava com muita frequência, pois você teria que substituir muita da interface do usuário, para a qual pequenas alterações no núcleo poderiam quebrá-la.
O problema provavelmente não é técnico, quase qualquer personalização é possível a qualquer momento, mas sim prático, econômico.
Se você ainda estiver interessado: experimente e me diga se estou errado!
Alternativamente, por que não seguir o caminho mais fácil de usar um fórum baseado em páginas, há muitos deles?
São os mesmos usuários que estão chateados por não poderem usar seus Commodore 64. Diga a eles que você sente muito e que está trabalhando duro no problema e não faça nada. A rolagem infinita é padrão da indústria há pelo menos uma década.
Ou, você pode tentar fazê-los dizer exatamente por que acham que a querem (para que possam vincular a um lugar específico no tópico, talvez?) e demonstrar que agora você pode vincular a uma postagem específica e não “ver a 6ª postagem nesta página”. Mas eles ainda ficarão muito infelizes por não ser exatamente como era há uma década.
O desenvolvimento custaria algo em torno de US$ 10 mil, possivelmente até US$ 50 mil. Talvez você pudesse pedir à sua comunidade para encontrar esses fundos? Ah, e te dar US$ 5 mil por ano para manutenção… transformando um projeto gratuito de código aberto em um pesadelo caro.
Não vejo muito benefício em “paginação”, já que você pode vincular diretamente a uma Categoria, Tópico ou Postagem?
Eu acho que um componente “híbrido” pode ser um tanto prático.
A cada N posts em um tópico, você insere um “paginador”.
Post 1
Post 2
...
Post 15
[*Página 1*] [Página 2] [Página 3] [Página 4]
Post 16
...
Des-infinitizar a rolagem do Discourse não é um exercício prático, mas um componente que torna um paginador “híbrido” (mesmo com alterações na lista de tópicos) provavelmente está na faixa de 2k-5k.
Sam, sua mensagem me lembra Natural breakpoints or "chapters" for long topics?; eu ficaria muito curioso para ver o resultado de algo assim. E poderia ser uma boa alternativa para aqueles que sentem falta da paginação. Eles muitas vezes parecem sentir falta da paginação porque as páginas são pontos de interrupção e nada mais.
Isso parece ser uma forma de vincular tópicos separados em vez de adicionar navegação de página a um único tópico
Fiz um pouco de progresso na paginação. A ideia era usar a função ?page=x integrada ao Discourse para navegar entre as “páginas” e basicamente bloquear o carregamento de mais mensagens, substituindo as funções de fluxo de posts que carregam o próximo lote de posts.
Veja abaixo mais detalhes (e problema não resolvido)
Adicionei botões de paginação na parte superior e inferior de cada tópico. Uma coisa que ainda não descobri é como obter o número total de páginas em um tópico para saber quantos botões exibir. É fácil do lado do servidor, mas eu prefiro que isso seja um componente de tema em vez de um plugin, então as opções de como fazer isso são mais limitadas.
Com essas duas coisas, parece que seria um sistema de paginação majoritariamente funcional. Tenho certeza de que haverá alguns comportamentos estranhos que precisarão de polimento, como se posts excluídos contam como uma mensagem em uma página ou o controle de quantos posts devem ser exibidos ao pular para a última página.
Tenho voltado periodicamente a este problema. Não sei se algum dia chegarei a uma solução limpa, mas acho que uma solução “hacky” e majoritariamente funcional poderia existir.
Para criar navegação de Tópico para Tópico (e inserir automaticamente botões Voltar/Anterior e Avançar/Próximo em cada Tópico da sequência), estou fazendo desta forma…
Estou reutilizando o “Responder como Tópico Vinculado” e depois estilizando os links com CSS da seguinte forma…
/** Botões Anterior e Próximo para Livros ou outras Sequências de Tópicos - este recurso é construído reutilizando **/**
/** a seleção nativa do Discourse "Responder como Tópico Vinculado" no compositor (canto superior esquerdo). **/**
/** PARA CONFIGURAR ISSO NO SEU DISCOURSE **/**
/** Cole <kbd>%{postLink}</kbd> em /admin/customize/site_texts/js.post.continue_discussion. **/**
/** Em seguida, crie 2 categorias: LIVROS (para sequências de tópicos no estilo Blog) e HISTÓRIAS (para sequências de tópicos no estilo Tópico Regular). **/**
/** Instale o componente de tema https://meta.discourse.org/t/blog-post-styling/110841 **/**
/** Nas Configurações do Componente de Tema de Estilo de Postagem de Blog, atribua a Categoria LIVROS (mas não HISTÓRIAS) como uma Categoria de Blog. **/**
/** Em seguida, crie uma tag: LIVRO e atribua-a como uma Tag de Blog nas Configurações do Componente de Tema de Estilo de Postagem de Blog. **/**
/** Em seguida, não se esqueça de colar o CSS abaixo! Ele vai no Cabeçalho do seu Tema. **/**
/** Claro que o CSS aqui precisará de ajustes para funcionar corretamente em outros temas. **/**
/** Agora você pode criar sequências de Tópicos na Categoria HISTÓRIAS que terão os botões de navegação, **/**
/** mas esses Tópicos aparecerão de outra forma no Estilo de Tópico Regular). **/**
/** Se você puder adicionar o Estilo de Blog a esses Tópicos da Categoria HISTÓRIAS simplesmente adicionando a tag LIVRO. **/**
/** Um novo Tópico que você compuser na CATEGORIA LIVROS usando "Responder como Tópico Vinculado" já terá os botões de navegação **/**
/** bem como o Estilo de Blog. **/**
/** Veja uma demonstração em https://meta.discourse.org/t/is-pagination-impossible-or-just-hard/231838/16 **/**
.tag-book,
.category-books {
aside.sidebar,
.topic-meta-data,
.tag-book .topic-category .badge-wrapper,
.category-books .topic-category .badge-wrapper {
display:none !important;
}
}
.tag-book .container.posts,
.category-books .container.posts {
justify-content: unset;
justify-items: unset;
padding-left: 0;
display: block;
}
.tag-book .container.posts .topic-post .row,
.category-books .container.posts .topic-post .row {
display: block;
justify-content: center;
}
.tag-book #topic-title .title-wrapper,
.category-books #topic-title .title-wrapper {
display: block;
margin: 0 auto;
}
.tag-book #topic-title,
.category-books #topic-title {
display: block;
margin: 0 auto;
}
.tag-book #topic-title h1,
.category-books #topic-title h1 {
font-size: 2em;
padding-right: 20px;
}
.tag-book #post_1 .topic-body,
.category-books #post_1 .topic-body {
padding-top: 1em;
border-top: none;
max-width: 100%;
}
.tag-book #post_1 .topic-body .contents,
.category-books #post_1 .topic-body .contents {
border-top: none;
margin-left: 0;
padding: 0;
}
.tag-book p,
.category-books p {
/* coloque estilos aqui para o texto principal nas páginas do Livro */
}
/* Posiciona o botão Avançar no canto superior direito da página */
.tag-book .post-links-container,
.category-books .post-links-container {
margin-left: var(--topic-body-width-padding);
position: absolute;
top: 1em;
right: 30px;
}
/* Posiciona o botão Voltar no canto superior esquerdo da página */
.category-stories .post-links-container {
margin-left: var(--topic-body-width-padding);
position: absolute;
top: 2.5em;
right: 30px;
}
/* Remove o símbolo de link do botão Avançar */
.tag-book .post-links-container ul li .d-icon,
.category-books .post-links-container ul li .d-icon,
.category-stories .post-links-container ul li .d-icon {
display: none;
}
.tag-book .post-links-container .post-links,
.category-books .post-links-container .post-links,
.category-stories .post-links-container .post-links {
margin-top: 0;
padding-top: 0;
border-top: 0;
}
.tag-book .post-links-container .post-links li:last-of-type,
.category-books .post-links-container .post-links li:last-of-type,
.category-stories .post-links-container .post-links li:last-of-type {
margin-bottom: 0;
}
/* Estiliza o botão Próximo/Avançar */
.tag-book .post-links-container ul li a[href],
.category-books .post-links-container ul li a[href],
.category-stories .post-links-container ul li a[href] {
align-items: center;
border: 1px solid var(--primary-low-mid);
background: var(--primary-very-low);
border-bottom-width: 2px;
border-radius: 3px;
box-sizing: border-box;
color: #009a49;
display: inline-flex;
font-family: monospace, monospace;
font-size: var(--font-down-1);
justify-content: center;
line-height: var(--line-height-large);
margin: 0 0.15em;
min-width: 24px;
padding: 0.15em 0.6em;
}
/* Adiciona setas apontando para a direita no botão Avançar */
.tag-book .post-links-container ul li a::after,
.category-books .post-links-container ul li a::after,
.category-stories .post-links-container ul li a::after {
content: " ->>";
padding-left: 0.15em;
}
/* Alternativamente Use uma Imagem para a Seta Direita */
/*
.tag-book .post-links-container::after,
.category-books .post-links-container::after,
.category-stories .post-links-container::after {
content: url('../../media/arrow-right.svg');
display: inline-block;
width: 12px;
height: 12px;
}
*/
/* Estiliza o botão Voltar/Anterior*/
.tag-book kbd,
.category-books kbd,
.category-stories kbd {
align-items: center;
border: 1px solid var(--primary-low-mid);
background: var(--primary-very-low);
border-bottom-width: 2px;
border-radius: 3px;
box-sizing: border-box;
color: var(--primary);
display: inline-flex;
font-size: var(--font-down-1);
justify-content: center;
line-height: var(--line-height-large);
margin: 0;
min-width: 24px;
padding: 0.15em 0.6em;
}
.tag-book kbd a,
.category-books kbd a,
.category-stories kbd a {
padding: 0;
}
/* Adiciona setas ao botão Voltar */
.tag-book kbd a::before,
.category-books kbd a::before,
.category-stories kbd a::before {
content: "<<-";
padding-right: 0.15em;
}
/* Alternativamente Use uma Imagem para a Seta Esquerda */
/*
.tag-book kbd a::before,
.category-books kbd a::before,
.category-stories kbd a::before {
content: url('../../media/arrow-left.svg');
display: inline-block;
width: 12px;
height: 12px;
}
*/
Sim, acho que essa é a melhor maneira de abordar isso. Se você conseguir descobrir exatamente o que eles não gostam na rolagem infinita, isso pode ajudar a direcionar a conversa para algo mais produtivo. Se houver alguma funcionalidade que eles estão perdendo, talvez seja fácil encontrar o equivalente; se houver algo que não está funcionando, talvez seja algo que possamos melhorar; mas se for apenas uma oposição à mudança, não há muito o que fazer.
A única razão que consigo pensar é tentar contar mais visualizações de página, pois os anunciantes podem não concordar que um carregamento de rolagem infinita seja o mesmo que uma visualização de página.
Acho que a rolagem infinita pode ser viciante demais. Gosto da paginação porque me dá um momento para pausar e me perguntar se quero continuar. Ela também divide longas discussões em partes gerenciáveis, o que acho menos estressante e avassalador para o meu cérebro.
Existe uma plataforma de microblogging pós-Twitter que eu gosto e que tomou a decisão de usar paginação em vez de rolagem infinita, e para mim, esse foi um sinal incrivelmente claro de que eles estão tentando adotar uma abordagem pró-social e saudável para as mídias sociais.
Não tenho certeza se este foi o lugar certo para opinar. Apenas pensei que talvez eu pudesse ajudar a esclarecer por que alguns usuários podem achar esse recurso importante, já que não vi ninguém fornecendo essa perspectiva.
Já usei o Discourse em outros lugares, é uma boa plataforma, e aprecio muito o quanto você pode personalizá-la (por exemplo, a capacidade de remover Likes, com certeza), mas a falta de paginação provavelmente será um fator decisivo para mim.
Ótimo anúncio, mas este clone do Twitter não tem nada a ver com o Discourse e é um mau exemplo de paginação (ou seja, as páginas são longas e instáveis)
Não é totalmente impossível. Fiz um plugin de paginação adequado há alguns anos (desculpe, não será de código aberto). Se alguém estiver tentando, talvez apenas como um projeto de aprendizado, ficarei feliz em analisar seu código e dizer em que direção seguir. Mas eu não recomendaria isso para um site de produção, especialmente um de qualquer tamanho.
*editar olhando meu plugin antigo um pouco mais, acho que não o recomendaria como um projeto de aprendizado também, a menos que você esteja realmente interessado. É difícil.
Não é um anúncio, mas ficarei feliz em obscurecer sobre qual plataforma eu estava falando se isso distrair menos da perspectiva que eu estava oferecendo.