 Disclaimer, ich bin schwab, falls man es raushört, einfach ein bisschen Syntax-Erkennung hochfahren. Bolt, ich, also wir machen da so Webseiten und so ein Krempe, beruflich. Und unsere Kundschaft sind Mittelstände, die eigentlich mit IT so wenig am Hut haben. Und dann baust du so Seiten mit staatlichen Generatoren und alles passt. Aber dann auf einmal zu Hilfe, Kunde will seine Webseite selber aktualisieren. Hm, jetzt, was nimmt man? Ich habe es geschafft, mich aus der Klemme des Typotreis zu entreißen. Vor allem, weil auch du musst deinen Hirn ziemlich ausrenken, wenn du morgens auf Arbeit kommst und nach dem zweiten Kaffee ruft dich ein Bäcker an und fragt dich, wie kann ich jetzt noch mal ein neues Event in meine Typotrei-Bag-Ends einfügen? Dann folgt meistens der WTF-Moment. Mal von diversen Sicherheitsaspekten abgesehen und wie man das jetzt deployt auf die Kisten und wie man das einrichtet und Datenbank fuht und ist ja egal. Irgendwann realisiert man schon ziemlich stark, dass am Ende vom Tag darauf ankommt, wie benutzbar am CMS ist. Und ich habe da was gefunden. Das sind so ein paar Jungs aus der Niederlande, die das mal angefangen haben. Das Ding heißt Bolt. Und das funktioniert einfach anders. Da habe ich mir gedacht, gut, ich gucke mir das mal an. Und war erst mal total verwirrt. Okay, es ist ein PHP CMS. Also wer sich total davor ekelt, hier wird kein PHP gebaut. Hier wird kein PHP geschrieben. Man geht einfach davon aus, dass es da ist. Und dass man 2015 auch weiß, was Composer ist und was das tut. Es gibt mehrere Wege es aufzusetzen. Mein Favorite ist nach wie vor GitHub. Ich clone mir das Repo. Ich zeig mir die Tags an. Ich zeig mir die Tags an und entscheide mich dann für die Latestable. Baue mir da draußen Branch. Aber ihr wisst, wie das funktioniert. Da brauche ich auch nichts weiter zu erzählen. Ansonsten könnt ihr auch einfach die taggz runterladen oder die zip jeweils. Oder ihr könnt es auch einfach über Composer installieren. Ist ja egal. Once we set up, haben wir hier so eine File Directory Structure, die uns irgendwie bekannt vorkommt, wenn wir schon mal was mit Symphonie gemacht haben. Da steckt ein Symphonie dahinter. Beziehungsweise werden viele Pakete davon benutzt. Können wir vielleicht das Licht da ausmachen? Ich schwitze so schon. Geil, danke. Was machen wir? Bitte? Das ist optimal, weil ich bin sowieso nicht so hübsch. Aber ich war schon jünger. Es geht jetzt darum, wie definieren wir unsere Datentypen. Was sind Datentypen? Ich baue eine Webseite und ich will nachher, dass der Kunde das so einfach wie möglich administrieren kann. Was soll er administrieren? Das, was er administrieren soll, wenn er kein Techniker ist, ist Inhalt. Was will er administrieren sein? Inhalt. Und wie strukturieren wir den? Weil im Prinzip doch alles irgendwie eine Seite ist. Wenn er sich durch, z.B. nehmen wir mal ein Wohnmobilhändler, wenn er Gebrauchtwagen und Mietwagen unter Seiten administriert. Und man für ein neues Objekt das angelegt wird, diese Seiten generiert, ist ja auch alles ganz toll. Aber im Prinzip will er auf Fahrzeuge editieren, klicken. Und wie definiere ich jetzt ein Fahrzeug? Wir haben hier ein paar Jammel-Files. Wir haben hier ein paar Jammel-Files. Und das ist so die Vorgehensweise, wie man in bold vorgeht, um diese Datentypen zu definieren. Im Prinzip arbeite ich am Anfang, bis ich anfange, das Theme zu bauen für diese Webseite eigentlich nur in den Jammel-Files. Und so fangen wir auch mal an. Die Konfig, die sollte jedem klar sein. Ich muss erstmal eine Datenbank definieren. Ich kann hier noch andere Sachen definieren, die ich mir dann im Template holen kann. Weil die Idee ist ja auch mal, dass man das Theme wechseln kann. Z.B. es ist Weihnachten, ich hätte gern ein Santa Claus auf meiner Webseite. Baut man halt ein bisschen CSS, für die gleiche Seite, anders und gut ist. Ich habe hier das Ding aufgesetzt, in einer neuen Webseite, da läuft eine Datenbank drauf. Da läuft PHP drauf, wird von Engine X ausgeliefert. Kann man auch Apache nehmen. Ist alles in der Dooku gut beschrieben. Ich setze noch Zeug auf Deutsch. Und dann kann es auch schon losgehen. Content Types. Diese Content Types sind im Prinzip das Herz von bold. Wie das dann nachher aussieht, ist z.B. so mit funktionierendem Javascript, sieht das dann auch noch gut aus. Was kann ich hier administrieren? Ich kann hier Seiten und Einträge administrieren und dann noch Showcases. Das ist erstmal der Krempel, der mitgeliefert wird. Aber wir wollen das nicht haben. Jetzt brauche ich mal Hilfe von euch. Ich habe mir mal einen mittelständischen Beruf, der überhaupt nichts mit IT zu tun hat. Vielleicht auch ein Handwerk. Schiffsbauer. Wir definieren Chips. Diese Schiffe haben ein paar Eigenschaften, die sich nachher auch z.B. in der URL widerspiegeln sollen. Wenn wir das nachher alles über Seiten regeln, ist das unsere Sache. Wir brauchen die Pages auf jeden Fall, deswegen tu ich es auch wieder rausnehmen. Weil, was wir in jedem Fall brauchen, sind Seiten für Sachen, wie administriert eine Startseite. Jede Seite braucht ein Impressum. Wenn wir unseren Schiffsbauer das selber administrieren lassen wollen, kommen wir um die Seiten nicht rum. Wir wollen allerdings mal Schiffe editieren, sodass er es auch auf Deutsch editieren kann. Wir haben hier unsere Struktur. Wir haben das Ding benannt. Jetzt geben wir den Felder. Was hat ein Schiff vereigenhalten? Erstmal hat es ein Titel. Hier kann ich meine Default-Feld-Typen verwenden. Davon gibt es einen ganzen Haufen. Wenn man hier die Showcases anguckt, jemand, der schon mit 10S-Systemen gearbeitet hat, die Showcases, die nimmt man hier her. Das sind einfach eine Definition von Standard-Feld-Typen. Da stehen alle drin. Das heißt, ich kann ein Textfeld nehmen. Ein Slack ist das URL-Kürzel. Das kannst du aus diesen Feldeingaben definieren. Das heißt, ich kann Events für meinen Schiffbauer definieren und sagen, dass das Datum, wann das stattfindet, in den Slack mit inbezogen wird. Dadurch haben wir dann zum Beispiel URLs wie slash-events, slash-2015, minus 04, minus 03, vom 3. März 2015. Und dann minus und dann wieder der Titel dahinter. So was nennt man sprechende URLs. Braucht kein Mensch, aber Google freut sich. Wir wollen Google doch glücklich machen. Wir haben HTML-Eingabefelder. Dann hat er einen kleinen Wüsi-Wück. Er kann sich das nicht anpassen. In der Konfig können wir angeben, welche Felder er in dem Wüsi-Wück hat. Das funktioniert auch. Wir haben eine Textarea. Er kann irgendwelche Texte eingeben. Es ist praktisch, wenn man zum Beispiel dem Kunden sagt, in diesem Feld kannst du die Description der Seite angeben. Was ist das? Schreibe rein in der Seite. Bei München, Glöckner, Schiffsbau GmbH steht die Tradition an Forderster Front. Seit 150 Jahren bauen wir hübsche Schiffe. Technisch etwas versietere, kann man auch Markdown-Felder definieren. Eine Geolocation, was ziemlich cool ist, wenn du eine Google Maps-Karte vorne rausbleist. Da kann man dann wiederum, es fallen ein paar Dinge aus der Tüte mit Bolt. Zum Beispiel, dass ich für Bilder Alttexte hinterlegen kann. Das Ding ist also auf Usability ausgelegt, hinten beim User. Und nicht vorne bei mir, wie ich es aufsetze. Datum, Eingabe-Felder für Int-Werte oder Floats, Select-Felder. Ich kann auch ein Select-Feld definieren, aus einem anderen Inhaltstyp. Zum Beispiel, dass ich für einen Event einen speziellen Schiffstyp auswähle usw. Also das funktioniert alles. Definieren wir einfach mal, was. Wir haben einen Textfeld für den Namen der Seite. Dieses ist Inline, weil der soll ja nicht zu lang sein, sondern zu lang werden. Da haben wir mehrere Gruppen, in denen wir das aufgliedern können. Wenn wir uns das mal live angucken, wie das aussehen soll, erstellen wir eine neue Seite und nennen die Home. Weil jede Webseite hat eine Startseite. Man kriegt ja nicht einen 404, wenn man auf eine URL aufruft. Und man sieht schon hier, der Name des Inhaltstyp ist Page. Oder war es vorher, bevor ich es editiert habe. Die URL-Kürze, oder hier, für den Slug Uses Title, welchen Titel ich eingebe, wird in die URL eingezogen. Ich kann ein Bild hochladen usw. Ich habe hier die Tabs-Inhalt, das ist Group Content. Taxonomie, weil ich noch Sachen vertenken kann. Und Meta, wo ich Sachen dann nachher reinpacken kann, wie die Keywords oder Description. So, jetzt haben wir unser Schiffgrad am Definieren. Group Content. Das definiert noch so ein Schiff. Ist das ein Schiffsbauer oder ein Schiffsvermieter? Schiffsbauer. Schiffsbauer, okay. Ne Werft. Ja, macht Sinn, keine Ahnung. Bisher hatte ich noch keinen Kunden, der Schiffsbauer ist, aber ist okay. Type ist jetzt vielleicht doof. Schipptype, keine Ahnung, weil es jetzt semantisch richtig ist. Type, wir können Selectfeld draus machen. Values, muss man dafür definieren. Wir definieren einfach mal die Values. Weißt du auch, welche Schiffstypen es gibt? Keine Ahnung. Alles gut? Ja, alles gut. Alles gut? Ja. Auf dem Geschiff, ja. Genau. Ich kann direkt definieren, was da an dem Feld dranstehen soll, damit er auch Weißwasser angeben soll. Also wenn ich hier jetzt reinschreibe, Label, dann steht das da daneben. Ich kann auch Sachen machen, wie so kann auch ein Präon so fix geben, oder irgendwelche HTML-Elemente im Formular davor oder dahinter gesetzt werden. Das ist dann sinnvoll, wenn man sehr viele Eingabeformulare hat, wie jetzt zum Beispiel für Sexarbeiter oder so, wo man sehr viele Eigenschaften für einen Datentyp angibt und die Felder voneinander trennen will. Man kann aber auch allerdings einfach mehrere Tab-Gruppen herstellen. Wir haben einen Schiffstyp, dann haben wir eine Size, eine Breite, Type, Float, Label, in Meilen, nein. Und dann haben wir noch ein Slack. Dieser Slack ist, wie gesagt, das URL-Kürzel. Das benutzt den Titel. Das setzen wir auch mal nach oben. Das ist ein Titel, für die Kategorie oder die Suche. Schießt sehr viel Meter. Du hast ja nachher die ganzen Daten in deiner Datenbank. Du hast die ganzen Daten vorn in Feldern, die du eingeben kannst. Der generiert alles daraus. Wenn ich das speicher und gehe auf mein CMS, dann sagt es, die Datenbank ist nicht aktuell und das ist alles. Schreibt die Felder neu in die Datenbank und generiert die Eingabefelder. Er kann das nachher eingeben. Dann stehen die ganzen Daten für jedes Schiff da entweder drin oder er hat es nicht eingegeben. Ich kann auch sagen hier required true. Dann muss es für jedes Schiff existieren Dann haben wir eine Breite. Was brauchen wir noch? Dann geben wir dem Ding noch eine ganz wichtig bei Zerstörern. So, flauschiger Zerstörer. Wir sind Krieger in Schwarz-Rosa-Gold. Jetzt haben wir zwei Feldtypen definiert. Ich gehe jetzt aus meiner erstellenden Seite raus. Er sagt mir auch gleich, dass das vielleicht keine gute Idee ist, weil ich ja schon Sachen eingetragen habe. Und schon zeigt er mir an, dass ich die Datenbank aktualisieren will. Wir machen das mal und schon fehlen meine Showcases. Datenbank aktualisieren. Ich kann jetzt einen Schiff erstellen. Wir machen einen Schiff namens Blah. Schiff slash Blah. Das ist ein Zerstörer in Camouflage Pink. Der ist 30 Meter lang. Der ist 14 Meter breit. Der hat einen Punkt von was eine Tiefe von 1 Meter weiß so ein schöner Zerstörer ist. Wir haben ein Schiff gespeichert. Was machen wir nun? Wir erstellen ein Gesicht dieser Webseite. Wir machen das in total hässlich, weil es schneller geht. Das ist hier vorne Twig. Wer das nicht kennt, dass es im PHP umfällt, das ist eine Template Sprache. In der Template Sprache ist das die Template Sprache, die die Symphonie-Leute versinnvoll erachtet haben, wo man dann mit sowas hier Sachen definiert. Ich möchte ausgeben, ein Schiff-Pumptepf steht dann 1 Meter, weil unser Zerstörer nur 1 Meter ist. Ich weiß nicht, was der dann zerstört. Wie greife ich auf die Daten zu, die ich eingegeben habe? Das ist für mich ein Record. Ich kann aber auch dieses Template, das ist eine von vielen dafür verwenden, über diese Templates zu iterieren, z.B. auch mit Suchfunktionen, das sind das Records. Ich sage dann hier, iterieren wir da drüber und gebe dann hier in einer Liste, in jedem Listen-Element, aus den Titel des Schiffs. So, würde über eine Tabelle mehr Sinn machen, aber fahr ich drauf. Jetzt haben wir da auf unserer Startseite, was eigentlich eine Seite sein sollte. Scheiß XFC. Wollen wir unser Schiff über unsere Schiffe iterieren? Ja, wie machen wir das jetzt? Wie funktioniert es in Symphonie? Genauso wie in Bolt. Wir müssen unsere Routen anpassen und sagen, dass auf der Homepage die Content-Types dazu hergenommen werden. Content-Types wiederum die Einträge, die ich dort mache, über den Slug habe ich slagifiziert. D.h. der Schiffstyp und ein divers Feld oder mehrere Felder, die ich so definiere, werden damit reingenommen. Ich habe jetzt gesagt, es benutzt den Titel. Ich kann aber auch noch sagen, es soll die Breite des Schiffes dazu nehmen. Ich kann es auch editieren, wenn ich so tief in den Code rein will, was ich jetzt hier nicht will. Ich kann hier noch eigene Routen definieren, wo ich dann z.B. sage, das Slash-Mitarbeiter, wofür keine Route so existiert, auf folgenden Inhaltstypen linken soll. Ich kann das auch gegenlinken, weil es alles super dokumentiert. Wie gesagt, bold.cm. Gehen wir auf die Doku und schauen uns das an für die Routen. Und sehen, hier gibt es unheimlich viel, was man da lernen kann. Auch Bold-Extensions sind sehr interessant, weil sie schreiben sich leichter, wie für andere CMS-Arten, weil man halt diesen kompletten Symphonie-Stack dahinter hat. Und einfach auf Klassen zugreifen kann, wo eigentlich so gut wie alle Informationen drin sind, wo ich dann noch zusätzliche Informationen reinpacken kann. Wir haben jetzt unser Tweet geschrieben. Das geht auch ordentlich auf die Bretter, wenn wir das hier aufrufen, weil ich keine Records habe, über die ich iterieren kann. Wenn wir allerdings unser Schiff anschauen, dann haben wir über Slash-Schiff, Slash-Blah, haben wir unser Schiff. Und wenn wir das uns angucken wollen, dann gehen wir auf Slash-Schiff, Slash-Blah. Auch hierfür wird es nicht funktionieren, weil er sucht nach einer Page. Warum tut er das? Wir referenzieren hier Records. Diese Records sind zum Iterieren da, da wir nicht iterieren können, weil wir keine Records haben, das ist nochmal hier, Record.title. Zack, es wird wieder nicht funktionieren, weil wir müssen dem Ding sagen, dem Content-Typ sagen, welches Template er verwenden soll. Taxonomie ist auch ziemlich eine coole Sache. Ich habe hier drei Taxonomie-Typen und da kann ich sagen, ich möchte Tax hinzufügen zu jedem Inhaltstyp. Bei Inhaltstyp-Seite wäre das zum Beispiel Inhaltstyp Tax, wo ich meiner Seite Tax geben kann und nachher so etwas wie eine Tag Cloud ausgeben. Ich kann Chapters angeben, das wird meistens in Blocks verwendet. Aber wir machen das jetzt einfach mal zur Not. Man kann sich hier auch den vorherigen Inhalt, die mitinstalliert werden, anschauen, wenn man was jetzt gerade nicht weiß, zum Beispiel, welches Template wird hergenommen für meine Inhaltstypen. Kopieren wir uns hier oben rein und sagen, das Index-Punkt-Twick dafür hergenommen wird, ein Schiff anzuzeigen. Wird wieder nicht funktionieren, weil Sicherheits-Einstellung jedes Schiff wird erst mal als Entwurf hinzugefügt, sodass man den Azubi den ganzen Krämpel eintragen lassen kann und ein Senior guckt dann nochmal drüber, ob die Daten, die er so eingegeben hat, auch stimmen. Ich habe das jetzt veröffentlicht und speichere. Ich habe vorhin schon rausgefunden, also ich habe schon drei Vorträge gehalten, diese Konferenz, dass ich den Demo-Gödern nicht genug geopfert habe. Du musst doch luchen, kann doch nicht sein, dass mir ein Code ändern muss, nur weil es mal ein Alten gibt. Das wird aus der URL rausgezogen. Kannst du dich was vorgesehen sagen? Ich kann es auch so machen. Dann schauen wir mal. Auch wieder was, man kann einfach im Default gucken, in den Templates, die so hergenommen werden. Set Content. Ich kann mir die letzten vier Einträge auch hier einfach holen. Gehe jetzt über mein Listing drauf und sehe, okay, auch hier wird es so veranstaltet. Ich bin mega verpeilt. Wenn ich meine Content-Typen jetzt wieder auf den Default setze, dann versucht er im Default-Theme auf Sachen zuzugreifen, die ich nicht definiert habe. Z.B. wird hier über Entries, was im Default-Theme eigentlich Block-Einträge iteriert, was ich im Bolt hier nicht mehr definiert habe. Aber wie gesagt, ich habe den Demo-Gödern nicht genug geopfert. Das ist jetzt auch doof. Was auch schön ist, ist, dass es in der Zeit halt um mich geht. Hast du vielleicht einen Training? Musst du ein bisschen freigeschmeißeln, kann man sagen. Schlafen kann man passen. Da, da, da, da. Und wir merken uns nicht so viel Mathe trinken vor dem Vortrag. So, hier ist unser Blah. Du hast gewonnen. Zu diesem Blah wollen wir außerdem Titel... Das ist der Unterschied, dass du mit den Prozentzeichen Kommandos ausgibst und die geschweiften Klammen, die Echo'n. Du hast es in PHP genauso. Wer das noch von damals kennt, das sind die sogenannten Short-Tags. Und wenn ich das so mache, dann Echo' ich. Ist aber das Gleiche, als wenn ich das hier machen würde. Wer Ruby macht, der kennt es zum Beispiel, dass ich so Kommandos ausgebe und dass ich so etwas Echo'n will. So ist es auch in Twig. Und danke für den Hinweis. Ich muss hier wirklich die doppelngeschweiften Klammer nehmen. Von Twig, die willst du nicht anfassen, weil da geht unheimlich viel auf die Bretter. Klingt interessant, aber es wird wahrscheinlich einfacher funktionieren, wenn du Twig erweiterst und Twig plugin schreibst, um dort in dem PHP-Code von Twig die Sachen zu ändern. Also es ist so tief in Symphonie drin, dass es wahrscheinlich weh tun wird. Aber es ist ein guter Hinweis, das könnt echt mal jemand machen. Wir wollen also unser Schiff anzeigen. Wir sagen, das Ding hat ein Titel. Wir sagen, das Ding hat einen Typen. Das Ding hat eine Breite. Das Ding hat eine Länge. Und das Ding hat eine Tiefe. Und natürlich darf man nicht vergessen Camouflage Pink. Jetzt haben wir einen Schiff administriert. Jetzt haben wir vor einem Schiff das Template gebaut. Jetzt sagen wir, wir wollen wirklich über mehrere Schiffe iterieren. Dazu bauen wir einfach mal ein zweites Schiff. Schiffe erstellen. Das ist ein Hausboot, 200 Meter lang. Wir brauchen auch mehrere Serverräume. Das ist 140 Meter breit. Und vielleicht hat es 40 Meter Tiefgang. Und ist Farbe Camouflage Mate. Das aktivieren wir gleich. Wenn uns das mit dem Aktivieren zu blöd ist, können wir das im Content-Typ ändern. Und wenn wir jetzt sagen, Schiff fu, da, da, da. Jetzt wollen wir über alle Schiffe iterieren. Und sagen, wir bauen jetzt uns ein zweites Template. Wir nehmen uns den Inhalt unseres Templates und iterieren drüber. Hier brauche ich dann wirklich die Prozent geschweifte Klammer. Sag vor Record in Records. Und weil Record ein geschützter Typ ist, editieren wir das einfach mal und sagen vor Ship in Records. Und sagen, dass wir für unseren Inhaltstyp Schiff das Record Template Index Trick nehmen. Und wir können hier auch noch ein Listing Template verwenden. Und das nennen wir, wie wir es genannt haben, Index Listing Punkt Trick. Es werden jetzt hier im Routing ein paar Assumptions gemacht. Zum Beispiel, dass wenn ich meinen Content-Typ so angegeben habe, dass die Mehrzahl Schiffe ist. Das geht meistens auf die Bretter, wenn man was mit umlauten macht. Aber wir deutsche Web-Entwickler, wir sind uns so was mittlerweile gewöhnt. Und meistens geben uns die Tools noch Möglichkeiten, so was von Hand zu definieren. Das ist normalerweise ... Ich kann mir das jetzt natürlich auch einfach machen, nur einen Content-Type umbenennen. Der Schöne ist, dass es in der Datenbank selber nur eine Einstellung. Übrigens, Datenbank, schauen wir uns an. Ihr kennt ja das mit anderen CMS-Systemen, wie z.B. Typ 3, dass wenn ich eine Seite definiere, da ist ein Plug-in drauf. Und in diesem Plug-in werden wiederum Inhalte referenziert. Diese Inhalte ist z.B. eine Galerie. Eine Galerie hat für jedes Bild ein Vorschaubild usw. Das könnte dann z.B. durch eine abstrakte Normalform ziemlich eskalieren. Aber wenn ich mir jetzt hier die Datenbank angucke, dann sehe ich, es gibt die alten Content-Types, die sind noch drin. Das heißt, wenn ich in der Content-Types-Definition, wo wir unser Schiff definiert haben, die Pages und Entries rausschmeiße, dann sind sie nicht automatisch in der Datenbank gekillt. Das ist manchmal ganz sinnvoll, wenn man gerade irgendwie wie ich bezoffen codet. Die Normalform ist hier eigentlich ziemlich cool. Wie bei manchen anderen CMS-Systemen habe ich automatisch noch andere Sachen drin, z.B. wenn es erstellt wurde. Und wo es dann lustig wird, ist z.B. mit der Taxonomie. Wie gesagt, ich habe hier ein paar verschiedene Typen. Schauen wir uns mal das an, was hier Standard mitgeliefert wird. Ich kann hier Tax oder Kategorien vergeben. Wie gesagt, die Kategorien sind wirklich dann als Kategorien zu sehen. Also ihr kennt das von Blocks. Z.B. wenn man über Technik blockt und über sein persönliches Leben, dann kann man das so in Kategorien schmeißen und nachher auch in der URL verwenden. Und dafür für dieses Routing in bold selber ist das ziemlich praktisch. Auch hierfür gibt es Standardrouten vordefiniert. Wie gesagt, in Typkategorien kann ich vordefinieren. Im Typchapter habe ich wenige auszuwählen und kann auch danach sortieren oder halt frei einfach schnauze reinschreiben, was ich gerade möchte. Z.B. für eine Tagcloud kann ich einfach Text reinballern. Wenn ich das dann nachher online haben möchte, dann bleibt es mir überlassen, wie ich das machen möchte. Ich kann z.B. das komplette Repo einfach so auf dem Server in irgendeinen Verzeichnis reinhauen und davon klonen. Uns wird hier ziemlich freie Wahl gelassen. Wenn wir uns dafür entscheiden, das online zu bringen, können wir uns mal die Konfig anschauen. So was möchte ich bitte bei euch nicht sehen. Benutzt bitte HTTPS. Wir machen die Server Tokens aus. Und was hier dann folgt, ist eigentlich normal. Also bei allen anderen auch so. Du schmeißt einfach alles erst mal gegen die IndexPHP, dass deine PHP App erst mal gucken kann, ob dafür eine Route existiert. Ansonsten versuchst du, Device zu suchen und auch der Thumbnailer, der hier verwendet wird, hat eine eigene Route in meinem Webserver, weil ich nachher so was sagen kann. Wenn ich hier z.B. ein Bild des Schiffs hochlade, kann ich hier nachher sagen die Funktion von Trick verwenden und kann sagen z.B. record.image.thumbnail mit einer Größe von 100 Pixel Breite und 50 Höhe. Ich kann auch hier verschiedene Modi verwenden, z.B. wenn er es einfach rausschneiden soll, wenn er das Bild runter skalieren soll oder wie diese Thumbnails erstellt werden. Wer das so was wissen möchte, der ist auch wieder auf die Seite verwiesen, wenn ich hier z.B. drauf gehe auf Standard Krempel. Ich kann andere Templates inkludieren. Punkt Landscape und Punkt Portrait sind auch immer noch ganz nützlich und Popups funktionieren, wie gesagt, einfach anschauen. Ich kann auch einfach sagen, weil da stehen jetzt mehrere Informationen drin. Wenn ich jetzt ein Bild definiere und gebe dem Ding ein Alttext, dann habe ich ja mehrere Informationen. Wie breit ist das Bild, wie hoch ist das Bild, wie ist der Typefahrt, wie ist der Typefahrt für das Thumbnail, was ist der Alttext und so weiter. Das steht da alles drin, diese Bold Template Text mit, wo ich hier sagen kann, ich will diesen ganzen Krempel hier in diesen Tag, was ich gerade hier in meinem A mache, im Mache sage ich so, und sage dann einfach, benutze die Funktion Image. Das wird in Twix so gehandhabt, dass man das mit diesem Querstrich macht und direkt in Funktionen rein pipet. Wahrscheinlich an Bash angelegt. Ich habe keine Ahnung, was Sie sich dabei gedacht haben. Also TLDR Twix ist auch nicht hübscher, als das, was ihr vielleicht verwendet, wenn ihr was anderes verwendet, oder sagen wird, auch nicht mehr lesbar. Ich kann mir auf meiner Seite, zum Beispiel auf meiner Home Seite URL gesteuert. Diese URLs verwenden, die ich auch auf der Live-Seite verwendet, die gleichen Routen im CMS kann zum Beispiel sagen. Suche geht mir für meinen Content-Typ Events, wie ich vorhin schon erwähnt habe, die letzten fünf Schiffe, die ich eingetragen habe zur Auswahl, und kann dann auch im Template sagen, gib mir die letzten fünf Schiffe und iteriere drüber und zeige das zum Beispiel an der Seite klein an, so das wurde bei uns hinzugefügt. Also auch das, was ihr in jedem Blog seht. Das funktioniert mit allen Inhaltstypen, wie man sieht. Bolt ist da intelligent genug. Ich kann auch direkt ziemlich kranke Queries fahren, wenn ich möchte. Fetching Content. Ich kann auch einzelne Felder dieser Inhaltstypen abfragen. Zum Beispiel gib mir alle Schiffe, die einen Seegang von über 10 Meter haben. Also gib mir alle verfickgroßen Schiffe. Ja, andere Krembel wie zum Beispiel Suchfunktion auch ziemlich intelligent gelöst. Man muss eigentlich so gut wie nichts mehr koden. Man schreibt sich eine Ergebnis-Seite, Versuchergebnisse. Definiert dem Template pro Inhaltstyp, dass man zum Beispiel Multi-Search erkennt. Zum Beispiel bei Amazon. Man sucht nach einem Hersteller, der ziemlich viel herstellt und kriegt dann auch ziemlich viel angezeigt. Das heißt, wenn ich nach Sammelsuch suche, kann es nicht nur sein, dass ich Laptops angezeigt habe, sondern zum Beispiel auch Fernseher. Das kann man hier drüber lösen, wenn man möchte. Ansonsten ist es nach wie vor an 10 ist der Wahl. Wenn ich jetzt zum Beispiel das durchspinne und ich gebe, wie hieß er, wenn ich das jetzt zum Beispiel für eine Weinstube mache, dann habe ich so eine Content-Types-Jammel. Das ist zum Beispiel hier für eine stinknormale Seite ein Typ. Da habe ich einen verlinkten Standort für eine Seite. Wenn ich möchte, ich kann Markdown eingeben, wenn ich möchte, ich habe Öffnungszeiten für meine Weinstube. Die fängt an und hört auf und hat ein Titel, wie zum Beispiel ich weiß nicht, ob ihr das kennt. Bei uns in Schwaben gibt es Besenwirtschaften. Das ist, wenn ein Weinbauer sein Zuhause öffnet für die Menschheit und ein Restaurant draus macht, aber halt nur ein paar Mal im Jahr. Früher hat der Weinbauer zum Beispiel gemacht in seinem Wohnzimmer, ein verdammt großes Wohnzimmer und da wurden dann Tische aufgestellten. Das war dann ein Restaurant für zwei Wochen. Ich habe hier noch zusätzliche Textfelder und ich habe halt eine Productline. Ich habe Produkte, die haben vielleicht eine ID, die haben ein Vorschaubild und News-Einträge. Auch hier wieder Titelbilds. Eine Liste von Bildern, eine Galerie. Das war es dann auch. Wie gesagt, warum wir das genommen haben, ist einfach, weil diese Übersicht so einfach ist. Wenn jemand ein Bild im Backend hoch lädt, dann landet das alles in dem Verzeichnis Files. In diesem Verzeichnis Files werden für den Zeitpunkt des Hochladens automatisch unter Ordner erstellt. So wie, was haben wir gerade, welchen Monat? Juno. Wird hier so ein Ordner erstellt und da einfach alles reingeballert. Das ist nützlich, wenn eine Website eine Weile lang läuft. Ansonsten haben wir vielleicht noch die, was haben wir noch, was haben wir noch, was haben wir noch. In der Datei-Verweitung, der nachher diese ganzen Hochgeladenen Dateien, die man editieren können, sieht es nachher in der Ordnerübersicht und haben hier die Thumbnails daneben. Wenn ich das jetzt genauer sehen will, klicke ich drauf. Es öffnet sich eine stinknormale Galerie. Auch im Backend und er sieht, was er jetzt löschen möchte und ob er dieses eine Bild wirklich selber löschen möchte. Übersetzung kann man auch, nee, soweit sind wir noch nicht. Aber ich nehme das so mit. Ansonsten, falls man was wissen will, die Entwickler sind mittlerweile auch über die ganze Welt verstreut. Das heißt, wenn ihr gerade was wissen möchtet, auf Free-Node unter Rautepold-CM ist eigentlich rund um die Uhr jemand da. Wenn ich selber hier für meinen Content Type, was wir ja jetzt aufgrund der Zeitplanarbeit nicht gemacht haben, hier alles in Deutsch schreibe, kann ich in dem Backend selber nachher die Übersetzung machen für meine Datentypen. Da ist jetzt der ganze Default-Krempel drin. Zum Beispiel, wenn ich die deutsche Sprache ausgewählt habe, dann wird davon ausgegangen, dass meistens Seiten editiert werden. Also ist da so Standard-Krempel drin wie Slash-Seite. Also dass Entries zum Beispiel Einträge sind. Dieser ganze Standard-Krempel ist da drin und wenn ich jetzt reingehe und mehr Übersetzungen brauche, Sachen definiere, die hier noch nicht drinstehen, aber in der englischen Sprache bin, dann wird uns der Durchsuchter hier alles und es wird mir der Rest, den ich noch nicht übersetze, hier unten reingeneriert. Das heißt, ich kann einfach nur sprachlich versierter Person, die nicht wie ich schwabe, den Laptop hinstellen und sagen, übersetzt es mal auf Hochdeutsch, weil ich kann das nicht. Auch die Erweiterung gibt's auch mittlerweile so den Standard-Krempel, den wir haben können, wollten, sollten, tun Facebook-Zeug so. Ich glaub, ich hab auch mal irgendwann eine geschrieben. Ah, ja genau. Ich hab da auch mal so eine Erweiterung geschrieben für Newsletterempfänger. Das ist einfach nur ein Formular, wo man sich das eintragen kann. Es gab schon ein Newsletter-Tool und eine Newsletter-Erweiterung dafür. Aber ich wollte die Datenquelle nach extern schieben, weil das ein Newsletter-Dienst- Service war. Also wollte ich nur die Daten aggregieren und keine Newsletter selber versenden. Also hab ich das Ding genommen, was schon existiert hat, ob es gefolgt. Ansonsten das ist so eigentlich ziemlich alles. Wie gesagt, der Grund, warum wir das haben, ist, weil unsere Kunden meistens einfach da nicht so ganz versiert sind. Und dieses Eingabeformular wirklich dafür gesorgt hat, dass ein pensionierter Bäcker, der mit 67 meinte, das war es noch nicht, angefangen hat zu maglern, aber mit PC eigentlich nie was am Hut hatte, dass ich innerhalb von fünf Minuten dem erklärt hab, wie er seine Webseite aktualisiert und gut war. Und ich finde, wenn wir schon so weit sind und die Community auch echt wichtig, dann sollten da auch andere nachziehen. Weil ich finde, von dem was der Kunde machen sollte kann es so aussehen. Ich kann dafür sorgen, dass mein ZM es so einfach ist, dass ich mich einlogge und sofort sehe, dass ich meine Schiffe und meine Seiten hier editieren kann. Wenn ich den Nutzer dann noch bestimmte Rechte entziehe und einen zusätzlichen Nutzer für den Inhaber und die Rechte, um die es gerade geht, erstelle, dann kriegt er auch diesen ganzen Konfigurationsgrämpel hier nicht angezeigt. So kann Web funktionieren. Und wenn so unser Web nicht funktioniert, dann haben wir was falsch gemacht, wir Coder. Und ich finde, das ist auch wichtig und das sollen wir mal so sagen, weil ich hätte gern so was überall. Ich hätte gern ein bisschen mehr Auswahl, als das da. Vor allem hätte ich das gern auch in Ruby. Mittlerweile, ich weiß nicht, seit dem letzten Shitstorm mit der schon dauerhaft existiert mit den Static Type Hints hatte ich da auch keinen Bock mehr drauf. Und ich will mich auch nicht immer rechtfertigen müssen. Das war eigentlich soweit ziemlich alles. Und ich bedanke mich. Fragen. Es gibt eine es gibt Erweiterung für Facebook, dass man zum Beispiel die Inhalte seiner Timeline in Thumbnails und einzelnen Einträgen an der Seite darstellen kann. Dann nimmst du andere Systeme, dann nimmst du die Inhalte, dann nimmst du andere Systeme dafür. Was ich schon gesehen habe in the wild war, dass man Bolt als Datenschlampe verwendet, um die Datennache woanders reinzupacken, einfach weil es in Datenmagnate so einfach aussieht. Die normalen Form ist so easy, dass du Bolt als Eingabesystem für ein ganz anderes System verwenden kannst. Und dieses ganz andere System, vielleicht sogar von Hand selber baust, ein großes Web-Portal einfach auf diese Datenmagnate zugreift. Das funktioniert auch. In der Standard-Einstellung ist da ein Eskuleit dahinter. Da kann ich MySQL oder Postgres dahinter setzen oder vielleicht auch ein Oracle, was gar keinen Sinn macht, weil dafür ist das System einfach zu klein und das ist auch das Gute, weil wir meistens nicht mehr als das brauchen. Du kannst auf Facebook über Extensions zugreifen, aber wie gesagt ist das so und nicht wirklich. Es ist eigentlich für Seiten gedacht, genau wie so ein Ameisenzüchterverein. Und wir haben auch viele Vereine, die ich damit realisiert habe. Sonst doch Fragen, ja? Nee, du kannst auch live mit Eskuleit laufen. Ah so, danke. Die Frage war, ob das, was die Anforderungen sind an den Websauer, ja, da braucht ihr nur PHP. Ich gehe davon aus, dass dieser Block auf jedem Web-Hoster laufen wird, der auch andere CMS-Systeme zum Laufen bringt. Ihr könnt euch bei anderen vielleicht einen WordPress zusammenklicken, was so eigentlich eine richtig stabile Software ist. Aber sobald ihr Plugins macht, macht ihr eure Webseite kaputt. Da, wo WordPress läuft, läuft auch das. Da, wo typo 3 drauf läuft, läuft auch das. Und das läuft auch auf PHP-Versionen, wo typo 4 noch drauf läuft. Also, ja? Wie geht das mit komplexen Migrationen und was ich sagen will zum Beispiel? Ich möchte jetzt, dass man pro Schiff einen eigenen Sack einstellen kann. Ich möchte aber, dass der für die alten Schiffe noch den alten Sack benutzt. Also den, der aus dem Titel genannt wird. Du hast schon alte Einträge, wo das Lack schon gesetzt ist. Willst du aber den für ein neues Schiff manuell überschreiben? Dann gehst du hier auf dieses kleine Symbol eines Lockzeichens. Drück's da drauf und drück's okay. Und dann ist es offen und du kannst es manuell überschreiben. Kannst du das in der Datenbank machen? Wenn man jetzt ideiert wirklich. Du zählst einen Schiff. Natürlich kannst du es auch in der Datenbank machen und das funktioniert dann da. Das ist wirklich so dumm gehalten, aber absichtlich. Und das ist das Geile daran. Es gibt ein monatlichen Stable Release und die Passwortfunktion. Die benutzen sichere Libraries. Also die von Maxin verwendet und dem kann man eigentlich vertrauen, dass er weiß, was er tut. Okay, noch was? Okay, dann, danke.