Bolt CMS

Ingediend door Dirk Hornstra op 06-jan-2020 19:00

Bolt CMS is een open-source CMS (website https://bolt.cm/), de code is beschikbaar via Github: https://github.com/bolt/bolt

Nu zijn er al veel CMS-en (genoemd bij de categorie op dit blog, Drupal, Wordpress), dus waarom zou je dit CMS gaan gebruiken? Toevallig wilde ik net een nieuwe site voor mezelf opzetten, een prima gelegenheid om dit CMS te gaan testen. Regelmatig ontvang ik namelijk mailtjes van LinkedIn waarin vacatures in mijn werkgebied staan. Wat ik deed is doorklikken op de interessante vacatures, vervolgens "printen naar PDF" en ze dan opslaan op mijn computer. En er vervolgens niet meer naar kijken.

En dat is dom. Want je ziet genoeg lifehacks over "doe je dingen vaker dan 2 keer, automatiseer het!". De reden dat ik die vacatures opsloeg is namelijk omdat ik op die manier een beeld wil krijgen welke kennis/vaardigheden gevraagd worden. Is Angular veel gevraagd? Welke programmeertalen worden benoemd die ik nog niet ken? Ik was nu al zover dat ik een mailbox had aangemaakt en  mailtjes doorstuurde naar dat mailadres. Maar ja, als ze daarin blijven staan, dan gebeurt er niets mee. Ik moet een script bouwen wat die mailbox leeg haalt, de linkjes volgt en vervolgens de teksten (en logo?) scraped ( niet echt goed Nederlands ;) ) en dit als een artikel op een website plaatst.

Hiervoor ga ik Bolt gebruiken. Eerst naar de documentatie: https://docs.bolt.cm/3.7/installation/installation

Ik heb de recommended versie gedownload: https://docs.bolt.cm/3.7/installation/manual-download-and-extraction, dat uitgepakt, hiermee heb ik ongeveer 65 MB aan bestanden. Deze via FTP uploaden naar de server, vervolgens op de server de "root" van de site instellen op de map "public". Hierna open ik de site in de browser: ik krijg vervolgens een "uncaught exception". Het kan met rechten op mappen en dergelijke te maken hebben. De melding lijkt duidelijk (dat je in config.yml de waardes debug en debug_show_loggedoff op true moet zetten om de oorzaak in beeld te krijgen, er is echter nog geen config.yml-bestand)! Ik ben dus eerst de rechten maar gaan instellen: https://docs.bolt.cm/3.7/installation/permissions

Dat lost het niet op. Ik heb niet goed gekeken, op de webserver zijn inmiddels een aantal bestanden aangemaakt, waaronder in de app/config-map een config.yml. Ik zet hier dus de debug-waardes op true (debug stond al op true, debug_show_loggedoff was de enige die aangepast moest worden). Top, nu zie ik meer. Lijkt toch een rechtenkwestie te zijn, want ik krijg de melding dat er geen map "public" aangemaakt kan worden. Na een snelle zoektocht lijkt het alsof ik gewoon verder moet met de handleiding, ok dan.

Dus door naar https://docs.bolt.cm/3.7/configuration/introduction, eerste stukje gaat over het feit dat noSQL gebruikt wordt, maar je ook mySQL kunt gebruiken. Dat wil ik (ook omdat ik zelf zaken ga toevoegen uit de eerder genoemde mailbox). Dit kan in de app/config/config.yml:


database:
    driver: mysql
    username: gebruikersnaam
    password: wachtwoord
    databasename: naam-database
    host: indien-geen-localhost-hostnaam
    port: 3306

Onderstaande mappen dus schrijfrechten gegeven:


    app/cache/
    app/database/
    public/thumbs/

    app/config/
    extensions/
    public/extensions/
    public/files/
    public/theme/

En toen zag ik dat ook bepaalde bestanden nog hernoemd moesten worden (genoemd op https://docs.bolt.cm/3.7/installation/manual-download-and-extraction ):


.bolt.yml.dist  ->   .bolt.yml
composer.json.dist  ->   composer.json
composer.lock.dist  ->   composer.lock
src/Site/CustomisationExtension.php.dist  ->   src/Site/CustomisationExtension.php

Tsja, dan doet ie het wel, ik krijg het installatiescherm te zien. Wel met de volgende fout, over dat PHP tijdzone "MET" niet ondersteunt. Fix is hier ook weer simpel, in /app/config/config.yml moet je jouw timezone instellen ( te vinden op https://www.php.net/manual/en/timezones.php  ). In mijn geval zet ik er dus in timezone: Europe/Amsterdam

Gebruiker aangemaakt, ik kan inloggen. Daar zie ik dat mijn debug nog aan staat, dat heb ik natuurlijk uitgezet.

Ok, door met de inrichting. Onder Configuration, Main Configuration krijg je in je browser de config.yml te zien. Hier staat dus ook de naam van de site in (sitename) en wat eronder staat (payoff). Die aangepast en ook de locale op nl_NL gezet. Met de theme-property kun je zelf je eigen thema gaan maken, dat besluit ik ook te gaan doen. Ik maak een eigen map aan, kopieer hier alle bestanden uit /public/theme/base-2018 naartoe en stel dit thema in. Je moet niet je wijzigingen doorvoeren in het base-2018 of andere thema, want als je later een update op Bolt uitvoert worden jouw wijzigingen weer verwijderd! Hé, door die nl_NL is de back-end nu ook Nederlandstalig geworden, nice!

De syntax van de thema-bestanden is "twig". Drupal gebruikt dit ook, meer informatie over Twig is hier te vinden: https://twig.symfony.com/

In het README-bestand wordt genoemd dat de thema's compatibel zijn met Bulma, omdat ik Bulma niet kende even doorgeklikt: https://bulma.io/ Dit is dus een open-source CSS framework gebaseerd op Flexbox. Zo zie je maar, je wilt kennis maken met het Bolt CMS, wil je eigenlijk ook wel meer lezen/wat uitwerken met Twig en Bulma. Nou ja, eerst door met Bolt. Het thema flink gestript tot ik de header over houdt en een overzicht van "entries".

Vergeet niet onder Configuratie zo nu en dan te klikken op "Leeg de cache", anders zie je jouw wijzigingen niet.

Onder Configuratie - Contenttypen kun je jouw eigen content-type toevoegen. Ik maak een kopie van "entries" en noem deze "vacatures".  Ik sla het op, ga de cache vernieuwen. Ik krijg daarbij de melding dat er een databasetabel aangemaakt moet worden. Kwestie van op een knop klikken en het is klaar: ook in het menu staat Vacatures er nu bij.

In het veld contentlink plaats ik de URL naar de linked-in-vacature. Die is voor mezelf (zodat ik deze niet dubbel ga verwerken en weet waar de bron vandaan komt), maar die wil ik niet zichtbaar op de site hebben. Bij het conttent-type heb ik dit ingesteld:


    record_template: vacature.twig
    listing_template: listing-vacature.twig

Hierdoor kan ik een kopie maken van record.twig en listing.twig en hier naar behoeven zaken uit weghalen of aanpassen. Niet vergeten om dan de cache weer op te schonen! In mijn geval levert dat in de vacature.twig op dat ik de afbeelding en de contentlink weg wil laten, dat kun je simpel op deze manier doen:


                    {% with { 'record': record, 'extended': true, 'repeaters': true, 'blocks': true, 'exclude': 'contentlink,image' } %}
                        {{ block('sub_fields', 'partials/_sub_fields.twig') }}
                    {% endwith %}

Via de documentatie ook nog even de beheer-instellingen aangepast (standaard ga je voor het onderhoud naar /bolt, maar om het botjes en dergelijke wat moeilijker te maken kun je dit aanpassen naar bijvoorbeeld cms). Hierbij de configuratie zoals ik die nu heb:


branding:
    name: CMS
    path: /cms
    provided_by: [ "Content Management Systeem" ]
    news_source: https://nu.nl
    news_variable: news
    favicon: /files/icons/favicon.ico
    apple-touch-icon: /files/icons/apple-touch-icon.png
    apple-touch-icon-72x72: /files/icons/apple-touch-icon-72x72.png
    apple-touch-icon-114x114: /files/icons/apple-touch-icon-114x114.png
    apple-touch-icon-144x144: /files/icons/apple-touch-icon-144x144.png

Mijn algemene indruk is dat het fijn werkt met dit CMS! Het typen in bestanden in je browser en dat opslaan om de configuratie aan te passen / uit te breiden is misschien wat "hardcore" voor de normale gebruiker, maar dat zijn ook zaken die eigenlijk alleen voor de bouwer van het CMS van belang zijn. Ook nog even snel getest met type "Editor" om te zien hoe het er voor een gebruiker uit ziet. Dat is eigenlijk hetzelfde, behalve het configuratie-deel. Bij Wordpress zit je meestal vast aan pagina's en posts, hiermee lijk je net even wat beter je type berichten te kunnen scheiden en eigen opmaak te kunnen geven. Ik zit er aan te denken om een site die ik voor een kennis heb gemaakt om te gaan zetten naar dit CMS!