calmdevelopment / obi-wan-kinobi

Filmpflege dingens für kleine Programmkinos
0 stars 0 forks source link

Artikel #2

Open tpraxl opened 5 years ago

tpraxl commented 5 years ago

Artikel auf der Website könnten wir als Markdown mit Frontmatter umsetzen.

Also:

---
title: Page not found
status_code: 404
---
# Page not found
---
title: Kurzfilme
---
# Kurzfilme

Lorem ipsum dolor sit amet..

Das yml Frontmatter sitzt zwischen --- und --- und kann z.B. mit symfony/yaml geparst werden.

Darunter kommt normales Markdown. Z.B. mit erusev/parsedown renderbar.

Frontmatter Variablen würde ich dann erstmal in einem Formular vorgeben. Das kann man später so erweitern, dass beliebige Variablen gesetzt werden können.

Idealerweise finden wir einen guten Markdown Editor für das Backend.

Ich glaube, ich würde auf Teaser-Absätze und Sammelseiten zunächst verzichten. D.h. jede Seite ist ein Artikel und muss auch entsprechend manuell gepflegt werden.

Dann könnte man konsequenterweise den Artikel auch gleich Seite nennen.

Den Umgang mit Bildern und Videos sollten wir vielleicht besser in einem gesonderten issue besprechen.

Der Slug kann gepflegt werden und definiert den URL und ggf. Ablageort und Name der Datei. Der letzte Teil des Slugs kann gut auch aus dem Titel generiert werden.

Z.B.:

Slug: /programm/kurzfilme Ort: /programm Name: kurzfilme.md URL: /programm/kurzfilme bzw. /programm/kurzfilme.html (hier sollten wir uns für eine Variante entscheiden – Präferenzen?)

Slug: /programm Ort: / Name: programm.md URL: /programm bzw. /programm.html (hier sollten wir uns für eine Variante entscheiden – Präferenzen?)

Wenn wir keine zwei getrennten Instanzen für das Ausspielen der Website und das Backend vorsehen, müssen wir dynamische Routes für laravel vorgeben, die nicht mit den Backend Routes kollidieren.

ancho commented 5 years ago

Nur damit ich das nicht mißverstehe. Die Templates dafür haben wir dann irgendwo rumfliegen. Als Benutzer editiert man nur Text als Markdown für eine bestimmte Kategorie von Seite.

Im Hintergrund wird dann entsprechend aus einem Basistemplate, eine entsprechende Header <-> Contentkombination in einer Datei an einem definierten Ort abgelegt. Und das Rendering der Seite findet dann über besagten Frontmatter statt zum Zeitpunkt des Aufrufs der Seite?

tpraxl commented 5 years ago

Jetzt bin ich mir nicht sicher, ob ich Dich richtig verstanden habe :)

Nochmal anders formuliert:

Ja, das Template, also der HTML-Rahmen der Seite für die (Frontend-)Website, ist irgendwo hinterlegt. Aber um komplizierte Formulare für die Pflege der Inhalte zu vermeiden, würde ich versuchen, wirklich ein Markdown-Dokument (mit Frontmatter) pro Seite zu verwalten. D.h. viel Dynamik ist dann nicht mehr im Template. Frontmatter liefert die dynamischen Elemente für das Template, wie z.B.: , andere Meta-Tags aber z.B. auch den Response-Code, der ja nichts mit dem Template zu tun hat (wie im 404 Beispiel).</p> <p>Markdown wird einfach nach HTML gerendert in den Template-Rahmen eingesetzt.</p> <p>Terminologie: Frontmatter ist der Name für das Zeug vor dem Markdown innerhalb der <code>---</code>.</p> <pre><code class="language-yml">--- # frontmatter title: defined in yml frontmatter --- # Markdown content goes here</code></pre> <p>Mal so in Pseudo</p> <pre><code class="language-php">$renderedContentHtml = $this->renderHtml( $this->parseMarkdown($file_content) ); // e.g. [ 'title' => 'defined in yml frontmatter'] $frontmatter_variables = $this->parseFrontmatter($file_content); $template_variables = array_merge( $frontmatter_variables, ['content' => $renderedContentHtml] ); $status_code = $frontmatter_variables['status_code'] ?? 200; return response( view('frontent.standard', $template_variables), $status_code );</code></pre> <pre><code> … <title>{{ $title }}</title> </head> <body> <div class="standard_skeleton"> {!! $content !!} …</code></pre> <p>Später kann Frontmatter auch verwendet werden, um den Seitentyp und damit das zu verwendende Template zu definieren.</p> <p>Wenn wir nicht nur das Backend, sondern auch die Website von obi-wan-kinobi ausspielen lassen, dann machen wir dynamisches Routing, das existierende Dateien an einem definierten Ort ausliest, rendert und ausspielt.</p> <p>Wenn wir die Website als komplett separate Instanz aufsetzen, dann würde laravel diese Dateien z.B. dahin kopieren oder hochladen, wo die Website sie erwartet und die kümmert sich dann um das Ausspielen. </p> <p>Finde ich grundsätzlich sauberer (auch weil wir Code, der spezifisch für eine Website ist, nicht hier im Repo hätten), ist aber auch aufwändiger (auch wenn es um den Zugriff auf die Filme geht). Müssten wir noch diskutieren. </p> <p>Das sind natürlich nur Vorschläge. Bin offen für andere Ideen. Sag auch Bescheid, wenn Du ein schlechtes Bauchgefühl hast, bitte.</p> </div> </div> <div class="comment"> <div class="user"> <a rel="noreferrer nofollow" target="_blank" href="https://github.com/ancho"><img src="https://avatars.githubusercontent.com/u/264432?v=4" />ancho</a> commented <strong> 5 years ago</strong> </div> <div class="markdown-body"> <p>Also hört sich erstmal alles nicht schlecht an. Und ja....das ist was ich meine, glaube ich.</p> <p>Will halt keinen Benutzer die Header Pflegen lassen müssen. Das verwirrt doch nur.</p> <p>Was die Trennung von Homepage und Backend angeht, bin ich mir noch nicht so sicher wo die Reise wirklich hin gehen soll. Muss ich nochmal drüber schlafen. Hat alles so seine Vor- und Nachteile. Aber danke schonmal für die ausführliche Erklärung.</p> </div> </div> <div class="page-bar-simple"> </div> <div class="footer"> <ul class="body"> <li>© <script> document.write(new Date().getFullYear()) </script> Githubissues.</li> <li>Githubissues is a development platform for aggregating issues.</li> </ul> </div> <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js"></script> <script src="/githubissues/assets/js.js"></script> <script src="/githubissues/assets/markdown.js"></script> <script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/highlight.min.js"></script> <script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/go.min.js"></script> <script> hljs.highlightAll(); </script> </body> </html>