+Blog-Artikel (Hack)

  • Hallo Community,

    mir gefällt das +Artikel Plugin so gut, aber konnte bisher nichts finden, was sowas für den Blog umsetzen kann. Bisher scheint auch solch eine Umsetzung nicht geplant und ich habe mich nun seit ein paar Wochen daran versucht sowas ohne Kenntnisse und ohne Plugin umzusetzen.

    Es ist wahrscheinlich nicht die beste Lösung, aber es scheint bisher seinen Zweck zu erfüllen. Und ich wollte euch das nicht vorenthalten und vielleicht kann das jemand optimieren und daraus was tolles entwickeln.

    Voraussetzung ist es, dass template entry aus der Blog-App zu modifizieren.

    Der Ganze Inhalt muss mit folgendem ersetzt werden:

    Der Originale Code aus dem Blog-entry-Template ist immer zwischen {* START: ORIGINALCODE *} und {* ENDE: ORIGINALCODE *} zu finden.

    Das einzige was ich hinzugefügt habe, sind folgende Dinge.

    If/else- Abfrage

    Mit {if $entry->entryID == 1} {* > ENTRYS *} frage ich die ID des Artikels ab. Das kann dann später mit weiteren IDs erweitert werden, die als Paywall dienen sollen. Weitere IDs würde so aussehen: {if $entry->entryID == 1 || $entry->entryID == 2} {* > ENTRYS *}

    Mit {if 6|in_array:$__wcf->user->getGroupIDs()} {* > USERGROUP ACEPTED *} frage ich zusätzlich die Benutzergruppe ab, die den Zugriff haben soll. Das kann man sehr gut mit Bezahlte Mitgliedschaften verknüpfen. Auch hier kann man später bei bedarf mehrere Benutzergruppen hinzufügen.

    Und dann habe ich mit Mühe und Not ein Javascript und Stylesheet zusammengebastelt, was dann für die Ansicht (Siehe Bilder) sorgt.

    Es wird nach 600 Zeichen ein Blur-Effeckt auf den Rest der Textes eingeleitet. Der Blurtext selber besitzt in dem Fall 700 Zeichen

    Der Button kann dann selbst verlinkt und beschriftet werden

    HTML
    <a class="button buttonPrimary" href="https://example.com/subscribe">Subscribe Today!</a>

    Würde mich freuen, mit Interessierte vielleicht etwas schöneres daraus zu formen.

    Denn alleine {* START: ORIGINALCODE *} und {* ENDE: ORIGINALCODE *} kommen insgesamt drei mal vor, anders habe ich es nicht geschafft das andere Artikel-IDs für jeden frei zugänglich sind. Wahrscheinlich habe ich auch einige Logik-Fehler dabei und freue mich über jede Idee und Anregung.

    Die bisherige Logik soll sein:

    • Prüfe ob Blog-Artikel (ID) freigegeben ist, sonst Blur
    • Prüfe ob User in Benutzergruppe (ID) vorhanden ist, sonst Blur
    • Alle anderen Artikel sollen für jeden lesbar sein

    mfg

  • Guten Abend,

    Ohne den hier betriebenen Aufwand schmälern zu wollen, denn Ich finde solche selbstgebauten Methoden immer klasse...

    Aber was hindert den fortgeschrittenen User daran den Blur-Effekt per DEV-Tools zu deaktivieren?

    Mfg

    "Cigarettes are like squirrels...

    They're perfectly harmless until you put one in your mouth and light it on fire"

  • Teste das mal. Ersetze:

    HTML
                    <div class="messageText">
                        {if MODULE_WCF_AD}
                            {@$__wcf->getAdHandler()->getAds('com.woltlab.blog.entry.inEntryMessage')}
                        {/if}
                        
                        {@$entry->getFormattedMessage()}
                    </div>

    durch:

    dann schauen Schnorrer wie doerek in die Röhre 👀

    Display Spoiler

    Schbass doerek, ich gucke bei Paywalls gelegentlich auch in den Code 🥸

    Ich steh' zwischen großen Bergen auf 'nem Felsvorsprung
    Blick' auf eine zusammenbrechende Weltordnung
    Ich kam grad noch weg, schon
    Beginnt in jedem Winkel der Welt da draußen das Armageddon 😵‍💫

  • Aber was hindert den fortgeschrittenen User daran den Blur-Effekt per DEV-Tools zu deaktivieren?

    Das weis ich leider nicht, aber sowas wie Hundiiiiiiiiii geschrieben hat, hilft dann eher. Die, die sich das selbst mit den Dev-Tools abschalten wollen, sehe ja trotzdem zuvor die +Blog-Meldung und wenn sie es abschalten, dann sehen sie generell nurnoch 500 Zeichen, so wie ich das jetzt verstanden habe.

    Teste das mal. Ersetze:

    HTML
                    <div class="messageText">
                        {if MODULE_WCF_AD}
                            {@$__wcf->getAdHandler()->getAds('com.woltlab.blog.entry.inEntryMessage')}
                        {/if}
                        
                        {@$entry->getFormattedMessage()}
                    </div>

    durch:

    dann schauen Schnorrer wie doerek in die Röhre 👀

    Display Spoiler

    Schbass doerek, ich gucke bei Paywalls gelegentlich auch in den Code 🥸

    Wo genau soll das ersetzt werden? Da wo der Hack also das Javascript greifen soll?
    Wenn ich das so ersetze wie du geschrieben hast, bekommt der User, der nicht die Berechtigung hat, gar keinen Text mehr angezeigt.


    Zurvor wird ja generell geprüft, welche ID der Artikel hat. Wenn die ID nicht stimmt (Kein +Blog Artikel), wird alles normal ausgegeben. Wenn die ID stimmt, wird weiter geprüft ob der User in der richtigen Benutzergruppe ist, sollte das nicht der Fall sein, wird die +Blog-Meldung ausgegeben.

    Jetzt aber eine doofe Frage, wie kann ich denn zum testen gezielt den Paywallhack abschalten als User?

  • Ich habs jetzt nicht getestet, der relevante Teil in meinem Code ist diese Zeile:

    Code
    {@$entry->getFormattedMessage()|truncate:500}

    wie du ja erkannt hast. Wenn du das in deinen Hack noch einbaust, dann passt es ja so weit und du kannst dir den JS-Teil komplett sparen und mit CSS eine kleine Blende einbauen die den Text dezent ausblendet.

    Ich steh' zwischen großen Bergen auf 'nem Felsvorsprung
    Blick' auf eine zusammenbrechende Weltordnung
    Ich kam grad noch weg, schon
    Beginnt in jedem Winkel der Welt da draußen das Armageddon 😵‍💫

  • Hallo,

    zu den eigentlichen Änderungen habe ich keine Kommentare, weil das in dem Riesentemplate kaum zu durchblicken ist. Ich würde dir aber bei solch umfangreichen Änderungen empfehlen, dass du dein Template entweder in einem Versionskontrollsystem speicherst (git) oder zumindest jeweils eine „Diff-Datei“ erzeugst. Auf diese Weise sind nur exakt die Unterschiede leicht zu erkennen, das macht es auch für die Mitleser einfacher :)

  • Im Prinzip reicht es ja aus wenn du dich um diese Stelle kümmerst:

    Smarty
                    <div class="messageText">
                        {if MODULE_WCF_AD}
                            {@$__wcf->getAdHandler()->getAds('com.woltlab.blog.entry.inEntryMessage')}
                        {/if}
                        
                        {@$entry->getFormattedMessage()}
                    </div>

    und das mit deiner Abfrage modifizierst, zum Beispiel für Gäste gekürzt:

    Du kannst das JS ja auch weiter verwenden, sieht mit dem Blur ja auch ganz nett aus.

    Ich steh' zwischen großen Bergen auf 'nem Felsvorsprung
    Blick' auf eine zusammenbrechende Weltordnung
    Ich kam grad noch weg, schon
    Beginnt in jedem Winkel der Welt da draußen das Armageddon 😵‍💫

  • Hallo,

    Dieses git scheint von Github zu sein?

    Das ist ein klares Jein: git ist ein Versionskontrollsystem und GitHub ist effektiv ein Webspace für sogenannte git-Repositorys. Ein git-Repository ist effektiv eine Datenbank.

    Und wie erzeuge ich eine Diff-Datei? Ich habe mir Visual Studio Code geladen.

    Probier das hier vielleicht: https://vscode.one/diff-vscode/

  • {if $__wcf->user->userID}

    Aber ich muss ja zusätzlich die Abfrage {if $entry->entryID == 1} sowie {if 6|in_array:$__wcf->user->getGroupIDs()} verwenden, damit dies ja weiterhin auf die richtigen Artikel sowie Benutzergruppe berücksichtigt wird.

    Du kannst das JS ja auch weiter verwenden, sieht mit dem Blur ja auch ganz nett aus.

    Melde mich dann wieder, wenn ich ein bisschen rumprobiert habe. Danke für die Anregungen.

  • Hallo,

    Aber ich muss ja zusätzlich die Abfrage {if $entry->entryID == 1} sowie {if 6|in_array:$__wcf->user->getGroupIDs()} verwenden, damit dies ja weiterhin auf die richtigen Artikel sowie Benutzergruppe berücksichtigt wird.

    Dafür definierst du dir dann besser Hilfsvariablen, wenn du die Prüfung an mehr als einer Stelle brauchst.

  • Das war ja nur ein Beispiel, das sollst du natürlich auf deine Bedürfnisse anpassen.

    Ich steh' zwischen großen Bergen auf 'nem Felsvorsprung
    Blick' auf eine zusammenbrechende Weltordnung
    Ich kam grad noch weg, schon
    Beginnt in jedem Winkel der Welt da draußen das Armageddon 😵‍💫

  • Ich habe mir das nun so umgesetzt und das ganze funktioniert bisher ohne Javascript Hundiiiiiiiiii

    Ich habe nun ein paar Fragen.

    Wie erweitere ich folgende Zeile um weitere entry-ids und ggf. weitere Benutzergruppen?

    {if $entry->entryID == 1 && !6|in_array:$__wcf->user->getGroupIDs()}

    Weitere Entry-IDs kann ich wohl so hinzufügen: $entry->entryID == 1 && $entry->entryID == 2 && [...]
    Weitere Benutzergruppen so?: !6|in_array:$__wcf->user->getGroupIDs() && !4|in_array:$__wcf->user->getGroupIDs()

    Ich habe mich gefragt, damit die Code-Zeile nicht zu lang wird, ob man die Entry-IDs sowie Usergroup-IDs auch in sowas wie eine Variable mit Kommar speichern- und somit dann einfach erweitern kann? Tim Düsterhus


    Das andere ist, dass ich den Text nun so kürze

    HTML
    {@$entry->getFormattedMessage()|truncate:500}

    Am liebsten würde ich zusätzlich den Text nochmal ausgeben, aber mit dem Blur-Effeckt

    HTML
    <span class="blogPlusblur"{@$entry->getFormattedMessage()|truncate:700}</span>

    Das wird offenbar ignoriert. Das Span ist im Quelltext dann verschoben. Darum habe ich dann überlegt das Span mit Lorem ipsum zu füllen, was aber denke ich, eher unschön ist.

    Und letztendlich setze ich den Paywall-Wrapper drunter, damit die Meldung angezeigt wird

    HTML
    <div id="blogPlus-wrapper"><h1>+Blog</h1><p>Um diesen +Blog lesen zu können, ist eine Mitgliedschaft vorausgesetzt.</p><p><br></p><p><a class="button buttonPrimary" href="https://example.com/subscribe">Subscribe Today!</a></p></div>

    Stylesheet

    GANZER CODE

    Obwohl das ganze nun ohne Javascript auskommt, scheint es optisch fast genauso zu wirken.

  • Weitere Entry-IDs kann ich wohl so hinzufügen: $entry->entryID == 1 && $entry->entryID == 2 && [...]
    Weitere Benutzergruppen so?: !6|in_array:$__wcf->user->getGroupIDs() && !4|in_array:$__wcf->user->getGroupIDs()

    Hier wird jeweils eine oder-Verknüpfung benötigt.


    Gruß norse

    Zugang zu meinen Arbeiten und dem dazugehörigen Support bekommt Ihr bei Interesse hier und hier.

  • Du hast da eine schließende Klammer ">" nach der Klasse vergessen:

    HTML
    <span class="blogPlusblur"{@$entry->getFormattedMessage()|truncate:700}</span>

    So wäre es richtig:

    HTML
    <span class="blogPlusblur">{@$entry->getFormattedMessage()|truncate:700}</span>

    Ich steh' zwischen großen Bergen auf 'nem Felsvorsprung
    Blick' auf eine zusammenbrechende Weltordnung
    Ich kam grad noch weg, schon
    Beginnt in jedem Winkel der Welt da draußen das Armageddon 😵‍💫

  • Du hast da eine schließende Klammer ">" nach der Klasse vergessen:

    HTML
    <span class="blogPlusblur"{@$entry->getFormattedMessage()|truncate:700}</span>

    So wäre es richtig:

    HTML
    <span class="blogPlusblur">{@$entry->getFormattedMessage()|truncate:700}</span>

    Das funktioniert leider nicht

    HTML
                        {@$entry->getFormattedMessage()|truncate:500}
                        <span class="blogPlusblur">{@$entry->getFormattedMessage()|truncate:700}</span>

    Sobald ich 2x @$entry->getFormattedMessage() im Code verwende, spinnt es. Das <span bleibt dann leer. Darum habe ich ja dieses lorem ipsum genommen.

    HTML
    {@$entry->getFormattedMessage()|truncate:500}
                        <span class="blogPlusblur">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</span>

    Das funktioniert dann, warum auch immer.

    Hier wird jeweils eine oder-Verknüpfung benötigt.

    Das verstehe ich nicht, kannst du ein Beispiel geben?

  • Ok verstehe, mit einem <div> ging es dann.

    Ist sowas denn möglich?

    Ich habe mich gefragt, damit die Code-Zeile nicht zu lang wird, ob man die Entry-IDs sowie Usergroup-IDs auch in sowas wie eine Variable mit Kommar speichern- und somit dann einfach erweitern kann? Tim Düsterhus

    Und das habe ich auch noch nicht ganz verstanden, was damit gemeint ist.

    Hier wird jeweils eine oder-Verknüpfung benötigt.

  • Hallo,

    Ist sowas denn möglich?

    schon die aktuelle Version ist etwas, das nicht mehr unbedingt in einem Template untergebracht werden sollte. Eine Erweiterung um mehrere Benutzergruppen ist dann endgültig etwas, bei dem richtiger PHP-Code zum Einsatz kommen sollte, schon der Lesbarkeit halber.

    Rein im Template kannst du aber, wie von norse genannt, die einzelnen Gruppenbedingungen mit „oder“ verknüpfen, das wird aber weder schön noch besonders effizient.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!