Fryboyter

Slug aus URL mit htaccess entfernen

Normalerweise haben die Links auf Artikel mit Bolt CMS den Aufbau https://fryboyter.de/entry/Titel-des-Artikels. Die habe ich mittels der Routingfunktion auf https://fryboyter.de/Titel-des-Artikels umgebogen. Soweit so gut.

Zum Erzeugen des kompletten RSS-Feeds nutze ich allerdings die Erweiterung bolt-extension-rssfeed. In dieser ist die URL dann allerdings wieder https://fryboyter.de/entries/Titel-des-Artikels. An sich kein Problem, da die Artikel mit und ohne /entries aufgerufen werden können. Wäre da nicht Isso Comment.

Isso Comment verknüpft die Kommentare und Artikel anhand des Titels. Und da ist der mit /entries eben ein andere als ohne. Ruft nun jemand einen Artikel über den globalen RSS-Feed auf und gibt einen Kommentar ab, wird die URL mit /entries in der Isso-Datenbank gespeichert. Da ich aber eben die Artikel dank des Routings ohne /entries veröffentliche tauchen die Kommentare somit auch nicht auf, so dass ich hier immer in der SQLite-Datenbank herumpfuschen muss. An sich kein Problem es nervt aber trotzdem.

Im Template für den RSS-Feed oben genannter Erweiterung gibt es folgende Codezeile.

<link>{{ url('contentlink', { 'contenttypeslug': record.contenttype.singular_slug, 'slug': record.slug } ) }}</link>

In meinem nicht mehr ganz so jugendlichen Leichtsinn habe ich mir gedacht es reich hier einfach ‘contenttypeslug’: record.contenttype.singular_slug, zu entfernen. Pustekuchen. Sobald man versucht den Feed aufzurufen bekommt man eine unschöne Fehlermeldung. Zum einen reichen meine Programmierkenntnisse hier definitiv nicht aus, dass Problem zu lösen und zum anderen müsste ich nach jedem Update der Erweiterung diese anpassen. Also muss, zumindest vorübergehend, eine andere Lösung her.

Schlussendlich habe ich einfach die .htaccess-Datei für Bolt CMS angepasst. In dieser haben ich den Bereich <IfModule mod_rewrite.c> gesucht und in diesem folgende Zeile eingetragen.

RewriteRule ^entrie/(.+)$ https://fryboyter.de/$1 [R=301,L]

Abschließend noch den Cache von Bolt CMS gelöscht und fertig. Ruft nun jemand einen Link mit /entrie/ auf, wird er automatisch auf die Version ohne /entrie/ umgeleitet. Ich denke das ist derzeit die beste Lösung mit der ich nicht an der Erweiterung herumpfuschen muss.

Linux | OSBN

Record.twig des Fryboyter-Themes

In meinem letzten Artikel habe ich die Datei index.twig meines Twig-Themes erklärt. Jetzt ist die Datei record.twig an der Reihe. Diese ist teilweise identisch mit der index.twig.

{% include '_header.twig' %}
<div class="header"><h1><a href="{{ paths.hosturl }}">Fryboyter</a></h1></div>
    <div class="container">
        <div class="row"> 
            <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
                    <h2>{{ record.title }}</h2>
                    {% if record.taxonomy is defined %}
                        {% for type, values in record.taxonomy %}
                            <div class="article-info">Veröffentlicht am {{ record.datepublish|localdate("%d. %B %Y") }} unter:
                        {% for link, value in values %}
                            <a href="{{ link }}">{{ value }}</a>{% if not loop.last %} & {% endif %}
                        {% endfor %}
                            | <a href="{{ record.link }}#isso-thread">Comments</a>
                        {% if user.id is defined %}
                        {% if user.id == 'X' %}
                            | <a href="{{ paths.bolt }}editcontent/entries/{{ record.id }}">Bearbeiten</a>
                        {% endif %}
                        {% endif %} 
                        {% endfor %}
                    {% endif %}</div>
                    {{ record.body }}                        
                    <p>Diese Artikel könnten auch interessant sein</p>
                    <ul>{% setcontent records = "entries/random/5" allowpaging %}
                    {% for record in records %}
                    <li><a href="{{ record.link }}">{{ record.title }}</a></li>
                    {% endfor %}</ul>
                    <section>
                        <h3>Kommentare</h3>
                        <section id="isso-thread"></section>
                    </section>
        </div> 
    </div>   
</div>
<div class="footer">{% include '_footer.twig' %}</div>

Den ersten Unterschied findet man in Zeile 14 bis 18. Hier wird als erstes geprüft, ob die Variable user.id definiert ist. Wenn dies der Fall ist erfolgt die Prüfung, ob der Nutzer die Nutzer-ID X hat. Wenn ja, wird die Zeile in der das Datum der Veröffentlichung, die Kategorien sowie die Kommentare angezeigt wird um einen weiteren Link erweitert mit dem man den betreffenden Beitrag ändern kann.

Zeile 22 bis 26 erstellt eine Liste von 5 zufälligen Artikeln, die eventuell für den Leser auch interessant sein könnten und gibt deren Titel aus die auf die einzelnen Artikel verlinken. Hier werden aktuell noch Artikel kategorieübergreifend angezeigt. Geplant habe ich hier, dass nur Artikel angezeigt werden, die den gleichen Kategorien zugeordnet sind, wie der aufgerufene Artikel.

Zeile 27 bis 30 bindet die Kommentarfunktion von Isso Comment ein.

OSBN | Allgemein

Index.twig des Fryboyter-Themes

Da ich gefragt wurde, wie ich das auf fryboyter.de verwendet Theme erstellt habe, habe ich mir gedacht ich mache mal eine Artikelreihe daraus in der ich die 9 Twig-Dateien erkläre.

Fangen wir mal mit der Datei index.twig an. Diese wird angezeigt, wenn man die Hauptseite aufruft.

{% include '_header.twig' %}
<div class="header"><h1><a href="{{ paths.hosturl }}">Fryboyter</a></h1></div>
<div class="container">
    <div class="row">
        <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
            {% setcontent records = "entries/latest/5" allowpaging %}
                {% for record in records %}
                    <h2><a href="{{ record.link }}">{{ record.title }}</a></h2>
                        {% if record.taxonomy is defined %}
                            {% for type, values in record.taxonomy %}
                            <div class="article-info">Veröffentlicht am {{ record.datepublish|localdate("%d. %B %Y") }} unter:
                            {% for link, value in values %}
                            <a href="{{ link }}">{{ value }}</a>{% if not loop.last %} & {% endif %}
                            {% endfor %}
                            | <a href="{{ record.link }}#isso-thread">Comments</a> </div>
                            {% endfor %}
                        {% endif %}
                    {{ record.body }}
                    <hr/>
                {% endfor %}
            {{ pager('', 3, '_sub_mypager.twig') }}
        </div>
    </div>
</div>
<div class="footer">{% include '_footer.twig' %}</div>
</body>
</html>

Twig bietet die Möglichkeit bestimmte Bereich einer Seite in extra Dateien auszulagern. Mittels include kann man diese dann wie im Baukasten zusammensetzen. In diesem Fall wird in Zeile 1 somit die Datei _header.twig importiert.

In Zeile 2 wird mittels path.hosturl auf die Adresse der Seite verlinkt. In dem Fall also https://fryboyter.de/. Zieht man die Seite irgendwann man auf eine andere Domain um, braucht man hier die Adresse nicht händisch ändern.

In Zeile 6 werden die letzten 5 Einträge aus der Datenbank herausgefischt. Allowpaging ermöglicht es, dass man am Ende einer Seite auf weitere Seiten mit wiederrum 5 Artikeln wechseln kann.

Ab Zeile 7 wird definiert wie jeder einzelne Artikel angezeigt wird.

In Zeile 8 wird als erstes der Titel inkl. entsprechenden Link eines Artikels ausgegeben.

Zeile 9 bis 17 ist schon etwas aufwändiger. Hier wird erst einmal geprüft ob dem betreffende Artikel Taxonomien zugeordnet wurden. Auf dieser Seite wären das die Kategorieren wie osbn oder Allgemein. Wenn dem so ist, wird unter der Zeile der Artikelüberschrift das Datum der Veröffentlichung, gefolgt von den zugeordneten Kategorien angezeigt. Die Anzeige der Kategorien erfolgt hierbei in einer Schleife, so dass zwischen den Kategorien ein & angezeigt wird. Zum Schluss wird am Ende noch die Anzahl der vorhandenen Kommentare angezeigt und auf die Kommentarfunktion verlinkt (Zeile 18).

In Zeile 21 wird dann der Haupttext des Artikels angezeigt (ich arbeite nie mit Teasern).

Zeile 24 bindet die Datei _sub_mypager.twig ein. Hiermit wird am Ende einer Seite der Umschalter angezeigt mit dem man die Seiten wechseln kann.

Abschließend wird in Zeile 28 die Datei _footer.twig importiert.

OSBN | Allgemein

Nachbesserungen an Bolt CMS

Eigentlich war es mir schon klar, dass der Umstieg nicht so klappt wie erhofft. Bisher sind es aber nur ein paar Kleinigkeiten die schnell behoben werden konnten.

Zum einen stand in der PHP-Datei die den OSBN-Feed erstellt noch die Testdomain auf der ich die ganze Zeit an Bolt gebastelt habe. Somit hat gestern der Artikel von mir auf osbn nicht auf fryboyter.de sondern planetlinux.de verlinkt. Mea culpa. Hier habe ich zum einen die PHP-Datei geändert und zum anderen eine 301-Weiterleitung per .htaccess eingerichtet.

Das zweite Problem war mir anfangs nicht ganz klar. Ein Leser von fryboyter.de hat mir mitgeteilt, dass er keine Artikel direkt aufrufen kann, sondern nur die Hauptseite. Schnell bin ich auf die Fehlermeldung “Impossible to access an attribute (“id”) on a null variable” gestoßen die sich auf die Datei record.twig bezieht die für die Anzeige einzelner Artikel zuständig ist. Dort gibt es unter anderem folgenden Code.

{% if user.id == 'X' %}
| <a href="{{ paths.bolt }}editcontent/entries/{{ record.id }}">Bearbeiten</a>
{% endif %}

Hiermit wird geprüft, ob der Nutzer der die Seite aufruft die Id X hat. Wenn ja, wird ein Link angezeigt mit dem man den Aritkel bearbeiten kann. Und genau wegen diesem Code knallt es. Aber warum?

In der Hauptkonfiguration von Bolt gibt es folgenden Bereich…

# Use strict variables. This will make Bolt complain if you use {{ foo }},
# when foo doesn't exist.\
strict_variables: false

Tja hier hatte ich wohl das false auf true geändert um leere bzw. nicht vorhandene Variablen zu unterbinden. Und genau das ist die Ursache des Problems. Anstelle aus dem true wieder ein false zu machen, habe ich einfach obigen Code so abgeändert, dass erst einmal geprüft wird ob user.id definiert ist. Wenn ja, erfolgt die Prüfung auf ID X und wenn nicht, passiert gar nichts.

{% if user.id is defined %}
{% if user.id == 'X' %}
| <a href="{{ paths.bolt }}editcontent/entries/{{ record.id }}">Bearbeiten</a>
{% endif %}
{% endif %}

OSBN | Allgemein

Wordpress ist in Rente gegangen

Heute habe ich Fryboyter.de auf Bolt CMS umgestellt. Das Theme ist, wie man unschwer erkennen kann, Marke Eigenbau. Nach X Versionen mit Schnick Schnack habe ich es einfach mit Fokus auf den Text gehalten.

Für mich ist die Seite aber weiterhin “Beta”, da noch einige Sachen nicht so sind, wie ich es gerne haben möchte.

Wenn man aktuell einen Artikel aufruft erscheint an dessen Ende eine Liste mit Artikel-Vorschlägen. Diese sind aktuell noch unabhängig von der Kategorie. Hier möchte ich es noch schaffen, dass nur Artikel der gleichen Kategorie(n) angezeigt werden den dem aufgerufenen Artikel zugeordnet sind.

Den OSBN-Feed erzeuge ich derzeit alle 30 Minuten über eine PHP-Datei, da sich die Feed-Erweiterung von Bolt CMS nur auf Inhaltstypen und nicht auf Kategorien einschränken lässt. Hier will ich mittelfristig auf eine andere Lösung finden, da die Datei auch dann erzeugt wird, wenn kein neuer Artikel vorhanden ist. Erreichbar ist der Feed nun über https://fryboyter.de/files/feed.xml. Die alte Adresse des OSBN-Feed wird per .htaccess umgeleitet, so dass hier keine Probleme entstehen sollten (sofern der Feed-Reader die Umleitung kapiert).

Die Kommentare laufen ab sofort über Isso. Die Daten werden hierbei in einer SQLite-Datenbank auf meinem Webspace gespeichert, so dass ich hier keine Daten weitergebe.

Wer Fehler findet oder Verbesserungsvorschläge hat, darf sich gerne melden.

Edit: Einen unschönen Fehler habe ich gerade gefunden. Die PHP-Datei mit der ich den OSBN-Feed erzeuge, hat sich noch auf meine Test-Domain bezogen, so dass auf planetlinux.de verlinkt wurde. Das ist nun korrigiert und ich habe eine Weiterleitung auf die richtige Adresse erstellt. Sorry.

OSBN | Allgemein