Man nehme eine CMS-Inhalts-Seite, die das Template vorgibt, eine Schnittstelle, die die Daten liefert sowie eine Prise Code – und fertig ist Alex Kereszturis AngularJS-Rezept für Typo3.
Seit mehreren Jahren blogge ich für Digicomp und eines der Themen, über das ich gern schon seit einiger Zeit schreiben wollte, ist das von mir ziemlich häufig verwendete Zusammenspiel von Typo3 und AngularJS.
Die zündende Idee, wie ich dieses Zusammenspiel erklären soll, kam mir aber erst vergangenen Freitag, als ich am Bahnhof auf meine Kinder wartete.
«Ein Kiosk ist eigentlich so ähnlich wie ein Content Management System»
Kommt man an einem Freitagabend 15 Minuten früher als geplant an einem grösseren Bahnhof in der Schweiz an, ist es alles andere als abwegig, sich die Zeit im Kiosk des besagten Bahnhofs zu vertreiben. Da gibt es so allerlei zu sehen und natürlich auch zu kaufen.
Wie ich so die Auslage des Kiosks studiere, kommt mir Typo3 in den Sinn und ich denke mir: «Ein Kiosk ist eigentlich so ähnlich, wie ein Content Management System.»
Im Kiosk werden unterschiedliche Waren angeboten, in einem CMS unterschiedliche Inhalte. Die Kiosk-Frau ist sozusagen der Server, der die Inhalte in die Regale stellt. Ich als Kunde bin der Browser, der sich die Inhalte anschaut.
Dass ich von Typo3 als CMS begeistert bin, sollte spätestens seit meinen Blogbeiträgen zum CMS-Flaggschiff klar sein.
Warum ich aber Typo3 mit einem Kiosk vergleiche, bedarf noch etwas der Erklärung. Bitte halten Sie noch etwas durch!
Wenn Sie als Kind das letzte Mal an einem Kiosk waren, empfehle ich Ihnen wärmstens, sich wieder einmal die Zeit zu nehmen, einen zu besuchen.
Als eingefleischter Online-Shopper war mir gar nicht bewusst, was es heute so alles an einem Kiosk zu kaufen gibt. Die Zeiten, in denen man an einem Kiosk nur Kaugummi, Zigaretten und Zeitungen kaufen konnte, sind vorbei. Heute werden da von Handyguthaben über Geldtransfers bis hin zum Lotto-Spiel und dem Sofort-Kredit diverse Dienstleistungen angeboten.
Da fragt man sich als Unwissender schnell einmal, ob das Verkaufspersonal nicht total überfordert ist, wenn es nebst den unterschiedlichen Schokoriegeln auch noch immer neue digitale Dienstleistungen verkaufen darf.
Mit einem CMS verglichen, wäre das in etwa so, als ob man vom System, das sich um Inhalte (Content) kümmern soll, die meist aus Bildern und Texten bestehen, auch noch verlangen würde, dass es aktuelle Event-Daten, die Auslastung der Meeting-Räume im Businesscenter und die aktuelle Liste aller Mitarbeiter einer Firma anzeigen soll.
Klar kann ich in einem CMS eine Inhalts-Seite anlegen, welche mir eine Liste der Mitarbeitenden meiner Firma anzeigt. Aber diese müsste ich dann «von Hand» aktuell halten, da der «Master», also der Haupt-Pflege-Ort für diese Daten nicht im CMS liegt.
Das wäre dann in etwa so, wie wenn die Lottozahlen der letzten Ziehung per Velo-Kurier an jeden Kiosk gebracht und dort abgeschrieben werden würden.
Oder so ähnlich!?
Auf jeden Fall: Unbrauchbar! Sowohl im Business-Kontext eines professionellen Web-Auftrittes, wie auch am Kiosk.
Stellen Sie sich vor, Sie möchten mit einem CMS wie Typo3 eine Seite, wie z.B. digicomp.ch/experts erstellen.
Spontan fallen einem da folgende Möglichkeiten ein:
A) Sie erstellen eine Inhalts-Seite und legen dort jede/n Trainer/in als Inhalts-Element an.
B) Sie bringen dem CMS bei, wie es nicht nur mit Text und Bildern umgehen kann, sondern auch mit Mitarbeitern (als Datensatz) und Sie verwalten Ihre Mitarbeiter-Liste im CMS.
C) Sie bringen Ihrer HR-Datenbank bei, die Daten regelmässig in die CMS-Datenbank zu laden.
Es geht aber auch noch eine Spur besser!
D) Sie lassen den Browser des Kunden die Daten holen.
Nochmals, das Ziel: Eine Seite, wie https://www.digicomp.ch/experts
Das Rezept: eine Schnittstelle
Die Zutaten:
Aber gern Schritt für Schritt im Detail.
In Typo3 lege ich dazu auf einer Seite ein Inhalts-Element vom Typ «Reines HTML» an:
In dieses Element schreibe ich dann den HTML-Code für einen einzelnen Datensatz. In unserem Fall für eine/n Trainer/in. Hier in vereinfachter Form lediglich mit Namen und Firmenname:
Um Rückfragen zu vermeiden: Ja, Sie dürfen selbstverständlich mehr Zeit und Energie in den HTML-Code stecken, als ich es hier tue. 😉
That’s it für Zutat Nr. 1!
Diese Zutat erfordert entweder eine fixfertige Schnittstelle, einiges an Programmierkenntnissen oder ein Gespräch mit mir. (Nein, ich lebe nicht vom Bloggen allein!) Gehen wir der Einfachheit zuliebe davon aus, dass Sie mich bereits kontaktiert haben, Sie mich und meine Firma sympathisch fanden und wir Ihnen eine Schnittstelle programmiert haben, welche die benötigten Daten in ähnlicher Form liefert, wie es z.B. jsonplaceholder.typicode.com/users tut:
Mit etwas Übung oder den entsprechenden JSON-Kenntnissen können Sie diese «Liste» sogar entziffern und die Namen der Personen sowie die Namen der Firmen für die Sie arbeiten herauslesen.
Zutat Nr. 2 ist somit auch ready.
Ich empfehle hier AngularJS zu verwenden. Auch wenn es schon etwas länger her ist, dass AngularJS das Licht der Welt erblickt hat und sein Nachfolger namens Angular (ohne JS) beim Verfassen dieses Beitrag sich bereits mit der Versions-Nummer 7 schmückt, ist es für unsere Zwecke hervorragend geeignet, da es direkt ins (unter Zutat Nr. 1) erstellte Inhalts-Element geschrieben werden kann.
Konkret braucht es …
… das Einbinden von AngularJS als JavaScript-Datei, wie auf angularjs.org beschrieben:
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.8/angular.min.js"></script>
… das Anpassen des (HTML-)Templates:
Dabei geht es grundsätzlich darum, den bestehenden Code in ein HTML-Element zu packen, welches mit den Attributen “ng-app” und “ng-controller” versehen ist.
Zudem werden die Platzhalter für den Namen der Person und den Namen der Firma mit sogenannten Angular-Expressions (die Dinger mit den je zwei geschweiften Klammern drum herum, im Code gelb hinterlegt) ersetzt.
Zu guter Letzt, wird mit Hilfe eines «ng-repeat»-Attributs (im Code grün hinterlegt) definiert, welches HTML-Element sich pro Datensatz wiederholen soll.
… Ahoi, JavaScript, das Schreiben einer entsprechenden AngularJS-App:
<script>
var trainerListApp = angular.module('trainerListApp', );
trainerListApp.controller('trainerListController', function ($scope,$http) {
$scope.alleTrainer = ;
$http.get("https://jsonplaceholder.typicode.com/users")
.then(function(r){
$scope.alleTrainer = r.data;
});
});
</script>
Der Code hat die Aufgabe, von der in «Zutat Nr. 2» definierten URL die Daten zu holen und in «alleTrainer» abzulegen, damit das oben erwähnte «ng-repeat»-Attribut damit arbeiten kann.
Wer bei mir einen JavaScript-Kurs besucht hat, sollte in der Lage sein, diesen Code zu verstehen. Wer das (noch) nicht getan hat, muss mir einfach glauben: sehr sehr gutes Code-Leistungs-Verhältnis.
Alles in allem sieht dann das Typo3-Inhalts-Element in etwa so aus:
Ruft man die Seite in einem Browser auf, sollte etwa folgendes dabei heraus kommen:
Warum man das so machen könnte? Drei Antworten:
Wow! Klasse! Haben Sie auch alles auf Anhieb verstanden?
Also ich, ich muss es nochmals durchlesen. 😉
Seminare für SoftwareentwicklerBei Digicomp finden Sie ein breites Angebot an Weiterbildungen im Bereich Software- und Webentwicklung. Zum Beispiel: |
Bei Digicomp finden Sie ein breites Angebot an Weiterbildungen im Bereich Software- und Webentwicklung. Zum Beispiel:
2 Kommentare
Wie sieht das hier aus mit Suchmaschinenfreundlichkeit wenn die Daten aus einer JSON API nachgeladen werden?
Hallo!
Sehr gute Frage mit einer nicht ganz einfachen Antwort:
1) Grundsätzlich ist AngularJS (so wie alle Client-Side-Rendering-Techniken) eher NICHT-suchmaschinenfreundlich.
2) Es gibt aber durchaus Methoden und Ansätze auch auf AngularJS getriebene Webseiten SEO zu betreiben.
3) gut zusammengefasst auf https://www.appincubator.io/blog/how-to-make-angular-website-seo-friendly/
Lieber Gruss,
Alex