Microblog überarbeitet
Ich habe mich heute mal hingesetzt und den Microblog überarbeitet. Dadurch das ich mit ganz vielen Dateien und einer etwas komplizierten Ordner Struktur angefangen habe, wurde das irgendwann ziemlich aufwendig, neue Beiträge zu erstellen.
Erst habe ich versucht alle Beiträge in einer Datei zu sammeln. Eine Datei pro Jahr sollte ausreichen. Dazu habe ich ein kleines Python Script geschrieben.
import os, glob, re | |
def combine_files(file_search, month): | |
global counter | |
filelist = glob.glob(file_search) | |
filelist = sorted(filelist) | |
## write text above | |
f = open("new.md", "a") | |
f.write(os.linesep*2 + "## "+ month) | |
f.close() | |
for file in list(filelist): | |
f = open(file) | |
text = f.read() | |
f.close() | |
# replace frontmatter | |
clean = re.sub('(?s)(---.*?---)','',text) | |
clean = clean.strip() # remove leading and trailing newlines | |
f = open("new.md", "a") | |
f.write(os.linesep*2) | |
s = "=={}==".format(counter) | |
s.strip() | |
counter += 1 | |
s += os.linesep + clean | |
f.write(s) | |
f.close() | |
# ----- | |
counter = 1 | |
filelist = glob.glob("2021**/*.md") | |
f = open("new.md", "w") | |
f.close() | |
combine_files("202105**/*.md", "Mai 2021") | |
combine_files("202106**/*.md", "Juni 2021") | |
combine_files("202107**/*.md", "Juli 2021") |
Alle Beiträge waren nur in einer Datei und nach ein wenig hin und her und umformatieren, hatte ich auch ein passables Ergebnis.
Das Template für den Blog sah dann so aus:
{{ define "main" }} | |
<h1>{{ .Title }} </h1> | |
{{ .Content | replaceRE "(==)([0-9]+)(==)" ("<a href=\".#$2\"><span class=\"microblog-number\" id=\"$2\">#$2.</span></a>") | safeHTML }} | |
{{ range .Pages }} | |
{{ .Content | replaceRE "(==)([0-9]+)(==)" ("<a href=\".#$2\"><span class=\"microblog-number\" id=\"$2\">#$2.</span></a>") | safeHTML }} | |
{{ end }} | |
{{ end }} |
Auch wenn die Änderungen auf den ersten Blick ganz gut ausgesehen haben, so hat es leider nicht mehr mit dem RSS-Feed funktioniert. Da alle Beiträge in einer Datei sind, ist der RSS Feed viel zu kurz und ich möchte das niemandem zumuten, ständig den gesamten Feed zu laden. Also musste ich eine andere Lösung finden.
Nach einigem Hin und Her bin ich dann doch wieder bei einzelnen Dateien gelandet. Dieses Mal allerdings ohne Frontmatter. Der Dateinamen, bestehend aus Jahreszahl, einem Punkt und einer fortlaufenden Nummer.
Das Python Script habe ich dazu ein wenig umgeschrieben und erzeugt nun Dateien nach dem oben beschriebenen Schema.
import os, glob, re | |
def combine_files(): | |
global counter | |
filelist = glob.glob("2021**/*.md") | |
filelist = sorted(filelist) | |
for file in list(filelist): | |
f = open(file) | |
text = f.read() | |
f.close() | |
# replace frontmatter | |
clean = re.sub('(?s)(---.*?---)','',text) | |
clean = clean.strip() # remove leading and trailing newlines | |
filename = "output/2021/2021." + str(counter+10000) + ".md" | |
counter+=1 | |
f = open(filename, "w") | |
f.write(clean) | |
f.close() | |
# ----- | |
counter = 1 | |
combine_files() |
Das dazugehörige Template list.html
musste ich ebenfalls ändern und sieht nun so aus:
{{ define "main" }} | |
<h1>{{ .Title }}</h1> | |
{{- $link := "<a href=\".\"><span class=\"microblog-number\" >#0</span></a>: " }} | |
<section id="#0"> | |
<h2 style="display: none;">#0</h2> | |
{{ .Content | replaceRE "#0#:" ($link) | safeHTML }} | |
</section> | |
{{- range .Pages -}} | |
{{- $number := (.File.BaseFileName | replaceRE "2021." "" | replaceRE "^0+" "") -}} | |
{{- $link := printf "<p><a href=#%s><span class=\"microblog-number\" >#%s</span></a>: " $number $number -}} | |
{{- $content := replaceRE "<p>" $link .Content 1 -}} | |
<section id="{{- $number -}}"> | |
<h2 style="display: none;">#{{- $number -}}</h2> | |
{{- $content | safeHTML -}} | |
</section> | |
{{- end -}} | |
<section id="bottom"></section> | |
{{ end }} |
Der obere Teil (Zeile 2-7) transkludiert die Inhalte der _index.md
-Datei. Dabei wird auch die Zahl im Dokument durch einen Link ersetzt.
Ab Zeile 9 werden dann alle vorhandenen Dateien verarbeitet. Der Dateiname wir vorne abgeschnitten und die führenden Nullen werden ebenfalls entfernt, um die Zahl für die Webseite zu erzeugen (Zeile 10). Danach wird ein Link erzeugt (Zeile 11) der anschließend vorne vor den Beitrag gesetzt (Zeile 12) wird.
Der erzeugte Link mit der Nummer kann benutzt werden, um auf den Beitrag zu verlinken oder diesen Direkt anzuspringen. Sprich die Zahl kann als Sprungmarke genutzt werden, um direkt zum Eintrag im Microblog zu springen. Zum Beispiel zum Eintrag #55.
Im großen ganzen kann man sagen, dass ich mit all den Änderungen die Dateistruktur vereinfacht und die Anzeige (zumindest für mich) verbessert habe.
Beitrag 5 der #100DaysToOffload Herausforderung.
💬 Suchst du die Kommentare? Sorry!
Ich habe keine Kommentare auf dieser Seite, weil ich keine Lust habe, sie zu verwalten. Du kannst mich stattdessen aber gerne anderweitig kontaktieren.
Du darfst auch diesen Inhalt gerne teilen, damit ihn auch andere finden und lesen können. Vielen Dank.
Letzte Aktualisierung am 30 Jul, 2021 20:54