Ist Paginierung unmöglich oder nur schwierig?

Ich bin kürzlich auf Discourse umgestiegen und meine Community ist sich uneinig, ob sie das unendliche Scrollen mag oder nicht. Manche Nutzer mögen es, manche ist es egal, manche behandeln es wie eine existenzielle Bedrohung für die Community. Basierend auf anderen Diskussionen, die ich hier gelesen habe, scheint es ein häufiger Streitpunkt zu sein.

Ich verstehe, dass die Entwickler dieser Software keine Absicht haben, Paginierung als Option anzubieten. Das kann ich respektieren. Zu diesem Zeitpunkt habe ich ein paar Plugins und Layouts geschrieben und ein wenig Code im Core-GitHub durchgesehen, so dass ich grundlegende Kenntnisse der Software habe. Ich frage mich nur, wie schwer es wäre, ein Plugin für die Paginierung zu schreiben, falls meine Community weiterhin Widerstand leistet? Muss ich wahrscheinlich viel vom grundlegenden Ruby-Kerncode umschreiben? Ist es etwas, das auf dem gesamten vorhandenen Code aufgesetzt werden kann, das nahtlos läuft? Ist die Datenbankstruktur wirklich schlecht für die Abfrage auf paginierte Weise konzipiert?

Ich wollte nur ein Gefühl für die Machbarkeit dieser Aufgabe von den Leuten bekommen, die den Code am besten kennen.

2 „Gefällt mir“

Entwicklung ist nicht meine Stärke, aber ich glaube, es gibt bereits Seiten, die Sie nutzen können?

z.B. https://meta.discourse.org/t/introducing-discourse-chat-beta/210734/?page=6

2 „Gefällt mir“

Ich denke, das Hauptproblem wäre die ständige Belastung, ein Plugin zu warten, das sehr regelmäßig kaputt ging, da Sie sehr viel von der Benutzeroberfläche überschreiben müssten, die durch kleinere Änderungen im Kern kaputtgehen könnte.

Das Problem ist unwahrscheinlich, technisch zu sein, fast jede Anpassung ist möglich, eher praktisch, wirtschaftlich.

Wenn Sie immer noch daran interessiert sind: Probieren Sie es aus und lassen Sie mich wissen, wenn ich falsch liege!

Alternativ, warum nicht den einfacheren Weg gehen und ein Forum verwenden, das seitenbasiert ist, davon gibt es reichlich?

3 „Gefällt mir“

Sie meinen, die Implementierung des Chats verwendet Seiten? Entschuldigung, ich glaube, ich folge nicht.

Nein, ich glaube, ich habe es vermasselt. :slight_smile:
Sie können ?page=2 unter bestimmten Umständen anhängen, aber es scheint, dass ich vergessen habe, wie genau das funktioniert. :slight_smile:

2 „Gefällt mir“

Soweit ich weiß, funktioniert dieser Parameter nur für Seiten, die wir für Crawler und alte, nicht unterstützte Browser bereitstellen.

4 „Gefällt mir“

Das sind dieselben Benutzer, die sich darüber aufregen, dass sie ihre Commodore 64 nicht benutzen können. Sagen Sie ihnen, dass es Ihnen sehr leid tut und dass Sie hart an dem Problem arbeiten und tun Sie nichts. Endloses Scrollen ist seit mindestens einem Jahrzehnt Industriestandard.

Oder Sie könnten versuchen, sie dazu zu bringen, genau zu sagen, warum sie denken, dass sie es wollen (damit sie vielleicht auf einen bestimmten Ort im Thema verlinken können?) und zu demonstrieren, dass Sie jetzt auf einen bestimmten Beitrag verlinken können und nicht “den 6. Beitrag auf dieser Seite sehen”. Aber sie werden immer noch sehr unglücklich sein, dass es nicht genau so ist, wie es vor einem Jahrzehnt war.

7 „Gefällt mir“

Ich denke, Ihr Argument ist hier sehr stark. Letztendlich würde dieses Plugin uns entweder dazu zwingen, nie zu aktualisieren, oder es wäre eine Aufgabe, die niemals endet.

Wie @pfaffman andeutet, ist die kommunikationsbasierte Lösung wahrscheinlich einfacher als eine technische.

Ich habe das Gefühl, dass die meisten dieser Benutzer sich einfach daran gewöhnen werden. Ich wollte nur verschiedene Optionen ausloten, falls sie es nicht tun.

Ich bin weiterhin offen für weiteres Feedback, wie (un)durchführbar diese Aufgabe für andere wäre.

2 „Gefällt mir“

Die Entwicklung würde irgendwo über 10.000 US-Dollar kosten, möglicherweise bis zu 50.000 US-Dollar. Vielleicht könnten Sie Ihre Community bitten, diese Mittel aufzubringen? Oh, und Ihnen 5.000 US-Dollar pro Jahr für die Wartung geben… ein kostenloses Open-Source-Projekt in einen kostspieligen Albtraum verwandeln.

Ich sehe keinen großen Nutzen im „Paging“, da Sie direkt zu einer Kategorie, einem Thema oder einem Beitrag verlinken können?

5 „Gefällt mir“

Ich denke, eine „hybride“ Komponente könnte durchaus praktisch sein.

Alle N Beiträge in einem Thema fügen Sie einen „Seitennummerierer“ ein.

Beitrag 1
Beitrag 2
...
Beitrag 15

[*Seite 1*] [Seite 2] [Seite 3] [Seite 4]

Beitrag 16

...

Das De-Infinite-Scrolling von Discourse ist keine praktische Übung, aber eine Komponente, die einen „hybriden“ Seitennummerierer (auch mit Änderungen der Themenliste) ermöglicht, liegt wahrscheinlich im Bereich von 2.000 bis 5.000 US-Dollar.

2 „Gefällt mir“

Sam, deine Nachricht erinnert mich an Natural breakpoints or "chapters" for long topics?; ich wäre sehr daran interessiert, ein Ergebnis davon zu sehen. Und es könnte eine gute Alternative für diejenigen sein, die die Paginierung vermissen. Sie vermissen die Paginierung oft, weil Seiten nur Umbrüche sind und nichts weiter.

3 „Gefällt mir“

@piffy

@ghassan entwickelt derzeit (oder hat kürzlich) ein Paginierungs-Plugin entwickelt:

Dies scheint eine Möglichkeit zu sein, separate Themen zu verknüpfen, anstatt eine Seitennavigation zu einem einzelnen Thema hinzuzufügen.


Ich habe einige Fortschritte bei der Paginierung gemacht. Die Idee war, die von Discourse eingebaute ?page=x-Funktion zu verwenden, um zwischen “Seiten” zu navigieren und im Grunde zu verhindern, dass weitere Nachrichten geladen werden, indem die Post-Stream-Funktionen überschrieben werden, die die nächste Charge von Beiträgen laden.

Weitere Details (und ungelöste Probleme) finden Sie unten:

Ich habe Paginierungsbuttons oben und unten in jedem Thema hinzugefügt. Eine Sache, die ich noch nicht herausgefunden habe, ist, wie man die Gesamtzahl der Seiten in einem Thema erhält, damit ich weiß, wie viele Buttons angezeigt werden sollen. Es ist vom Backend aus einfach, aber ich würde es bevorzugen, wenn dies eine Theme-Komponente und kein Plugin wäre, damit die Optionen dafür begrenzter sind.

Mit diesen beiden Dingen scheint es ein größtenteils funktionsfähiges Paginierungssystem zu sein. Ich bin sicher, dass es einige seltsame Verhaltensweisen geben wird, die poliert werden müssen, wie z. B. ob gelöschte Beiträge als Nachricht auf einer Seite zählen oder wie viele Beiträge beim Sprung zur letzten Seite angezeigt werden sollen.

Ich bin immer wieder zu diesem Problem zurückgekehrt. Ich bin mir nicht sicher, ob ich jemals eine saubere Lösung erreichen werde, aber ich denke, eine hacky-größtenteils funktionale Lösung könnte existieren.

3 „Gefällt mir“

Um die Navigation von Thema zu Thema zu erstellen (und automatisch Zurück/Vorherige und Weiter/Nächste-Schaltflächen bei jedem Thema in der Sequenz einzufügen), mache ich es so

Ich nutze die Funktion „Als verknüpftes Thema antworten“ um und gestalte die Links dann mit CSS wie folgt…

Und füge etwas CSS in den Theme-Einstellungen hinzu…

MINIMAL CSS NUR FÜR DIE SCHALTFLÄCHEN
.post-links-container {
    margin-left: var(--topic-body-width-padding);
    position: absolute;
    top: 37px;
    right: 30px;
}

.post-links-container ul li .d-icon {
    display: none;
}

.post-links-container .post-links {
    margin-top: 0;
    padding-top: 0;
    border-top: 0;
}

.post-links-container .post-links li:last-of-type {
    margin-bottom: 0;
}

.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;
}

.post-links-container ul li a::after {
    content: " ->>";
    padding-left: 0.15em;
}

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-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;
}

kbd a {
    padding: 0;
}

kbd a::before {
    content: "<<-";
    padding-right: 0.15em;
}
ANLEITUNG UND DAS VOLLSTÄNDIGE CSS, DAS ICH VERWENDE

/** Vorherige und nächste Schaltflächen für Bücher oder andere Themensequenzen - diese Funktion wird durch die **/** Umfunktionierung der nativen Discourse-Funktion "Als verknüpftes Thema antworten" im Composer (oben links) erstellt. **/** UM DIES AUF IHREM DISCOURSE EINZURICHTEN **/** Fügen Sie `%{postLink}` in `/admin/customize/site_texts/js.post.continue_discussion.` ein. **/** Erstellen Sie dann 2 Kategorien: BÜCHER (für Themensequenzen im Blog-Stil) und GESCHICHTEN (für Themensequenzen im regulären Themenstil). **/** Installieren Sie die Komponente https://meta.discourse.org/t/blog-post-styling/110841 **/** Weisen Sie in den Einstellungen der Blog-Post-Styling-Theme-Komponente die Kategorie BÜCHER (aber nicht GESCHICHTEN) als Blog-Kategorie zu. **/** Erstellen Sie dann ein Tag: BUCH und weisen Sie dieses als Blog-Tag in den Einstellungen der Blog-Post-Styling-Theme-Komponente zu. **/** Vergessen Sie nicht, das untenstehende CSS einzufügen! Es gehört in Ihren Theme-Header. **/** Natürlich muss das CSS hier angepasst werden, damit es in anderen Themes richtig funktioniert. **/** Jetzt können Sie Sequenzen von Themen in der Kategorie GESCHICHTEN erstellen, die die Navigationsschaltflächen haben, **/** aber diese Themen werden ansonsten im regulären Themenstil angezeigt). **/** Wenn Sie das Blog-Styling zu diesen Themen der Kategorie GESCHICHTEN hinzufügen können, indem Sie einfach das Tag BUCH hinzufügen. **/** Ein neues Thema, das Sie in der Kategorie BÜCHER erstellen und "Als verknüpftes Thema antworten" verwenden, hat bereits sowohl die Navigationsschaltflächen **/** als auch das Blog-Styling. **/** Sehen Sie eine Demo unter 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 {
    /* Stile hier für den Haupttext in den Buchseiten einfügen */
}

/* Positionieren Sie die Weiter-Schaltfläche oben rechts auf der Seite */
.tag-book .post-links-container,
.category-books .post-links-container {
    margin-left: var(--topic-body-width-padding);
    position: absolute;
    top: 1em;
    right: 30px;
}

/* Positionieren Sie die Zurück-Schaltfläche oben links auf der Seite */
.category-stories .post-links-container {
    margin-left: var(--topic-body-width-padding);
    position: absolute;
    top: 2.5em;
    right: 30px;
}

/* Entfernen Sie das Link-Symbol von der Weiter-Schaltfläche */
.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;
}

/* Gestalten Sie die Weiter/Vorwärts-Schaltfläche */
.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;
}

/* Fügen Sie Pfeile hinzu, die nach rechts auf die Weiter-Schaltfläche zeigen */
.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;
}

/* Alternativ ein Bild für den Rechtspfeil verwenden */
/*
.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;
}
*/

/* Gestalten Sie die Zurück/Vorherige-Schaltfläche*/
.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;
}

/* Fügen Sie Pfeile zur Zurück-Schaltfläche hinzu */
.tag-book kbd a::before,
.category-books kbd a::before,
.category-stories kbd a::before {
    content: "<<-";
    padding-right: 0.15em;
}

/* Alternativ ein Bild für den Linkspfeil verwenden */
/*
.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;
}
*/


Hier ist das Ergebnis…

Sie können es hier live testen…

4 „Gefällt mir“

Ja, ich denke, das ist der beste Ansatz. Wenn Sie herausfinden können, was ihnen am Infinite Scroll nicht gefällt, kann das helfen, das Gespräch in eine produktivere Richtung zu lenken. Wenn ihnen Funktionalität fehlt, ist es vielleicht einfach, das Entsprechende zu finden, wenn etwas nicht funktioniert, können wir das vielleicht verbessern, aber wenn sie einfach gegen Veränderungen sind, kann man nicht viel tun.

4 „Gefällt mir“

Der einzige Grund, der mir einfällt, ist der Versuch, mehr Seitenaufrufe zu zählen, da Werbetreibende möglicherweise nicht zustimmen, dass ein unendliches Scrollen dasselbe wie ein Seitenaufruf ist.

Sind Sie damit weitergekommen, @piffy?

Ich finde, dass Infinite Scroll süchtig machen kann. Ich mag Paginierung, weil sie mir einen Moment zum Innehalten gibt und ich mich fragen kann, ob ich weitermachen möchte. Sie teilt auch lange Diskussionsstränge in überschaubare Abschnitte auf, was ich als weniger stressig und überwältigend für mein Gehirn empfinde.

Es gibt eine Microblogging-Plattform nach Twitter, die ich mag, und die sich entschieden hat, Paginierung anstelle von Infinite Scroll zu verwenden. Für mich war das ein unglaublich klares Signal, dass sie versuchen, einen pro-sozialen, gesunden Ansatz für soziale Medien zu verfolgen.

Ich bin mir nicht sicher, ob dies der richtige Ort war, um mich einzubringen. Ich dachte nur, ich könnte vielleicht helfen, Verwirrung darüber zu beseitigen, warum einige Benutzer diese Funktion wichtig finden könnten, da ich noch niemanden gefunden habe, der diese Perspektive darlegt.

Ich habe Discourse schon woanders benutzt, es ist eine gute Plattform, und ich schätze sehr, wie sehr man sie anpassen kann (z. B. die Möglichkeit, Likes zu entfernen, verdammt ja), aber das Fehlen von Paginierung ist wahrscheinlich ein Dealbreaker für mich.

2 „Gefällt mir“

Tolle Anzeige, aber dieser Twitter-Klon hat nichts mit Discourse zu tun und ist ein schlechtes Beispiel für Paginierung (d. h. Seiten sind lang und instabil)

Es ist nicht völlig unmöglich. Ich habe vor ein paar Jahren ein richtiges Paginierungs-Plugin erstellt (sorry, es wird nicht Open Source sein). Wenn jemand es versucht, vielleicht nur als Lernprojekt, schaue ich mir gerne deinen Code an und sage dir, in welche Richtung du gehen sollst. Aber ich würde es nicht für eine Produktionsseite empfehlen, besonders nicht für eine größere.

*Edit: Wenn ich mir mein altes Plugin noch einmal ansehe, glaube ich nicht, dass ich es auch als Lernprojekt empfehlen würde, es sei denn, du bist wirklich daran interessiert. Es ist schwer.

1 „Gefällt mir“

Keine Werbung, aber ich werde gerne verschleiern, über welche Plattform ich gesprochen habe, wenn das weniger von der Perspektive ablenkt, die ich angeboten habe.