Einführung der Schlagwortfunktionalität auf der Webseite #467

Closed
opened 2025-07-29 13:55:39 +02:00 by joerglohrer · 11 comments
Owner
No description provided.
Author
Owner

Original von @joerglohrer am 2025-03-31T12:11:49Z:

Bitte nach Review in Main @sicking und deployen auf oer.community

**Original von @joerglohrer am 2025-03-31T12:11:49Z:** Bitte nach Review in Main @sicking und deployen auf oer.community
Author
Owner

Original von @sicking am 2025-03-31T12:26:27Z:

Ich vertraue meinen Prüfungen von vor 14 Uhr und genehmige (fast) ungesehen
(u. a. weil @joerglohrer ungeduldig ist. ;-)

**Original von @sicking am 2025-03-31T12:26:27Z:** Ich vertraue meinen Prüfungen von vor 14 Uhr und genehmige (fast) ungesehen (u. a. weil @joerglohrer ungeduldig ist. ;-)
Author
Owner

Original von @joerglohrer am 2025-03-31T16:51:45Z:

Damit sind wir durch mit dieser Implementation und ich erlaube mir den Branch zu löschen.

**Original von @joerglohrer am 2025-03-31T16:51:45Z:** Damit sind wir durch mit dieser Implementation und ich erlaube mir den Branch zu löschen.
Author
Owner

Original von @sicking am 2025-04-01T08:40:23Z:

Dummerweise haben wir den Branch gelöscht ohne nach main zu mergen. :-/
Deswegen sind die Änderungen (erstmal) "verloren".

Ein weiteres Argument für "Workflow definieren" und "Workflow einüben".... ;-)

**Original von @sicking am 2025-04-01T08:40:23Z:** Dummerweise haben wir den Branch gelöscht ohne nach main zu mergen. :-/ Deswegen sind die Änderungen (erstmal) "verloren". Ein weiteres Argument für "Workflow definieren" und "Workflow einüben".... ;-)
Author
Owner

Original von @sicking am 2025-04-01T08:44:22Z:

@joerglohrer Könntest du das Skript mit dem du die Änderungen an den md-Dateien vorgenommen hast, hier anfügen?
Oder in dem Branch (einen neuen) anlegen... oder...
(wenn du es noch hast)

Sonst gucke ich mal, ob ich das schnell zusammengebastelt bekomme.


Jetzt zeigt sich wie "schön" git (bzw. forgejo) ist, alle Änderungen sind "gelöscht", aber alles ist "noch da" (im Sinne von wieder gut rekonstruierbar).
Ich mag git. :)

**Original von @sicking am 2025-04-01T08:44:22Z:** @joerglohrer Könntest du das Skript mit dem du die Änderungen an den md-Dateien vorgenommen hast, hier anfügen? Oder in dem Branch (einen neuen) anlegen... oder... (wenn du es noch hast) Sonst gucke ich mal, ob ich das schnell zusammengebastelt bekomme. ---- Jetzt zeigt sich wie "schön" git (bzw. forgejo) ist, alle Änderungen sind "gelöscht", aber alles ist "noch da" (im Sinne von wieder gut rekonstruierbar). Ich mag git. :)
Author
Owner

Original von @sicking am 2025-04-01T09:03:56Z:

Ah, ganz entspannt.
Ich habe den Branch hier noch lokal.
Also noch weniger Arbeit....

Aber erst einmal: #320, #326...

Den (hoffentlich identischen) "alten" Stand von gestern habe ich nun unter dem Branch "feature/214-metadaten-tags-sichtbar-machen" gepushed.


Diff mit "neuem" Branch:
https://git.rpi-virtuell.de/Comenius-Institut/FOERBICO/compare/main...feature/214-metadaten-tags-sichtbar-machen

Diff mit "altem" Branch:
https://git.rpi-virtuell.de/Comenius-Institut/FOERBICO/pulls/323/files

**Original von @sicking am 2025-04-01T09:03:56Z:** Ah, ganz entspannt. Ich habe den Branch hier noch lokal. Also noch weniger Arbeit.... Aber erst einmal: #320, #326... Den (hoffentlich identischen) "alten" Stand von gestern habe ich nun unter dem Branch "feature/214-metadaten-tags-sichtbar-machen" gepushed. ---- Diff mit "neuem" Branch: https://git.rpi-virtuell.de/Comenius-Institut/FOERBICO/compare/main...feature/214-metadaten-tags-sichtbar-machen Diff mit "altem" Branch: https://git.rpi-virtuell.de/Comenius-Institut/FOERBICO/pulls/323/files
Author
Owner

Original von @joerglohrer am 2025-04-01T09:55:13Z:

Hier der python-Code des Skripts, das die keywords redundant als tags angelegt hat:

import os
import re
import yaml
import copy
from dotenv import load_dotenv

load_dotenv()
POSTS_DIR = os.getenv("POSTS_DIR", "content/posts")

def update_index_md(filepath):
    with open(filepath, "r", encoding="utf-8") as f:
        content = f.read()

    # Frontmatter extrahieren
    match = re.match(r'^---\n(.*?)\n---\n', content, re.DOTALL)
    if not match:
        print(f"Kein gültiger YAML-Block in {filepath}")
        return

    frontmatter_raw = match.group(1)
    body = content[match.end():]

    # YAML parsen, um Keywords auszulesen
    data = yaml.safe_load(frontmatter_raw)
    keywords = data.get("keywords")

    if not keywords or not isinstance(keywords, list):
        print(f"Keine Keywords in {filepath}")
        return

    if "tags" in data and data["tags"]:
        print(f"Tags schon vorhanden in: {filepath}")
        return

    # Neue Zeile für tags einfügen
    tags_yaml = yaml.dump({'tags': copy.deepcopy(keywords)}, allow_unicode=True, sort_keys=False).strip()
    tags_line = "\n" + tags_yaml

    # Tags direkt am Ende der YAML-Frontmatter einfügen (vor `---`)
    frontmatter_with_tags = frontmatter_raw + tags_line
    new_content = f"---\n{frontmatter_with_tags}\n---\n{body}"

    with open(filepath, "w", encoding="utf-8") as f:
        f.write(new_content)

    print(f"Tags ergänzt in: {filepath}")

def run():
    for root, dirs, files in os.walk(POSTS_DIR):
        if "index.md" in files:
            update_index_md(os.path.join(root, "index.md"))

if __name__ == "__main__":
    run()
**Original von @joerglohrer am 2025-04-01T09:55:13Z:** Hier der python-Code des Skripts, das die keywords redundant als tags angelegt hat: ``` import os import re import yaml import copy from dotenv import load_dotenv load_dotenv() POSTS_DIR = os.getenv("POSTS_DIR", "content/posts") def update_index_md(filepath): with open(filepath, "r", encoding="utf-8") as f: content = f.read() # Frontmatter extrahieren match = re.match(r'^---\n(.*?)\n---\n', content, re.DOTALL) if not match: print(f"Kein gültiger YAML-Block in {filepath}") return frontmatter_raw = match.group(1) body = content[match.end():] # YAML parsen, um Keywords auszulesen data = yaml.safe_load(frontmatter_raw) keywords = data.get("keywords") if not keywords or not isinstance(keywords, list): print(f"Keine Keywords in {filepath}") return if "tags" in data and data["tags"]: print(f"Tags schon vorhanden in: {filepath}") return # Neue Zeile für tags einfügen tags_yaml = yaml.dump({'tags': copy.deepcopy(keywords)}, allow_unicode=True, sort_keys=False).strip() tags_line = "\n" + tags_yaml # Tags direkt am Ende der YAML-Frontmatter einfügen (vor `---`) frontmatter_with_tags = frontmatter_raw + tags_line new_content = f"---\n{frontmatter_with_tags}\n---\n{body}" with open(filepath, "w", encoding="utf-8") as f: f.write(new_content) print(f"Tags ergänzt in: {filepath}") def run(): for root, dirs, files in os.walk(POSTS_DIR): if "index.md" in files: update_index_md(os.path.join(root, "index.md")) if __name__ == "__main__": run() ```
Author
Owner

Original von @sicking am 2025-04-01T14:41:44Z:

Unser Forge (forgejo) hatte den "alten" Branch dev-website-tags noch nicht endgültig gelöscht.
(das habe ich erst gesehen, nachdem ich den Branch "feature/214-metadaten-tags-sichtbar-machen" gepushed habe)

Die Tags für den neuesten Blogartikel von Laura habe ich ergänzt.
(und Woodpecker weniger arbeiten lassen... :-/)

**Original von @sicking am 2025-04-01T14:41:44Z:** Unser Forge (forgejo) hatte den "alten" Branch `dev-website-tags` noch nicht endgültig gelöscht. (das habe ich erst gesehen, _nachdem_ ich den Branch "feature/214-metadaten-tags-sichtbar-machen" gepushed habe) Die Tags für den neuesten Blogartikel von Laura habe ich ergänzt. (und Woodpecker weniger arbeiten lassen... :-/)
Author
Owner

Original von @sicking am 2025-04-01T14:47:06Z:

Dieser Stand ist zum Testen unter https://int.oer.community/ veröffentlicht.

https://int.oer.community/tags/lizenzen/
https://int.oer.community/tags/cc-lizenzen/

**Original von @sicking am 2025-04-01T14:47:06Z:** Dieser Stand ist zum Testen unter https://int.oer.community/ veröffentlicht. https://int.oer.community/tags/lizenzen/ https://int.oer.community/tags/cc-lizenzen/
Author
Owner

Original von @joerglohrer am 2025-04-03T09:58:19Z:

genehmigt
ok, aufgrund der Genehmigung von @sicking gemerged.
Auch einverstanden, dass der Branch gelöscht werden darf?

**Original von @joerglohrer am 2025-04-03T09:58:19Z:** > genehmigt ok, aufgrund der Genehmigung von @sicking gemerged. Auch einverstanden, dass der Branch gelöscht werden darf?
Author
Owner

Original von @sicking am 2025-04-22T07:11:33Z:

Auch einverstanden, dass der Branch gelöscht werden darf?

IMHO: alles, was gemerged ist, darf (kann und sollte) gelöscht werden.

**Original von @sicking am 2025-04-22T07:11:33Z:** > Auch einverstanden, dass der Branch gelöscht werden darf? IMHO: alles, was gemerged ist, darf (kann und sollte) gelöscht werden.
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: reliHUB/FOERBICO_und_rpi-virtuell#467
No description provided.