Skip to content

Releases: ChristianKarlConsulting/livento-kurskatalog

v1.46.0 — KI-Kennzeichnung der Kursbilder

Choose a tag to compare

@ChristianKarlConsulting ChristianKarlConsulting released this 31 Aug 05:44

KI-Kennzeichnung der Kursbilder. Ist ein Kursbild in Campus Connect als KI-generiert gekennzeichnet, sitzt auf Karte und Detailbild eine Plakette „KI-generiert" in der unteren rechten Ecke (Petrol #004D33 mit hellem Ring).

Der Anlass: Kursbilder liegen nicht in der WordPress-Mediathek, sondern im Supabase-Bucket public-course-images. Das Plugin „Livento KI-Kennzeichnung" kann sie deshalb nicht erfassen — zu ihnen gibt es keinen WordPress-Anhang, an dem ein Häkchen hängen könnte. Ein Häkchen in der Mediathek bleibt auf Kursbilder folgenlos.

Gepflegt wird die Kennzeichnung darum in Campus Connect (ab v3.220.0): Öffentliche Kurse → Kurs bearbeiten → Basis, Häkchen unter dem Bild. Das Plugin liest sie über das neue Feld public_image_ai_generated aus public_offerings.

Voraussetzung: Campus Connect ab v3.220.0. Fehlt das Feld, bleibt die Plakette einfach aus — das Plugin bricht nicht.

Eigene CSS-Klassen im lvk-Namensraum statt der Klassen des Mediathek-Plugins: sonst hinge der Katalog an einem Stylesheet, das nur geladen wird, solange in der Mediathek mindestens ein Bild angehakt ist. Der Text der Plakette lässt sich über den Filter livento_cc_ki_text ändern.

v1.45.1 — Eigener Reiter Dozenten im Backend

Choose a tag to compare

@ChristianKarlConsulting ChristianKarlConsulting released this 26 Aug 05:01

Backend-Ergänzung zu v1.45.0 — an der Ausgabe auf der Website ändert sich nichts.

Eigener Reiter „Dozenten"

Bis hier war der Dozenten-Teil im Plugin nur ein Einstellungsfeld. Wer wissen wollte, warum jemand nicht auf der Seite steht, fand im Plugin keinen Anhaltspunkt — und suchte den Fehler an der falschen Stelle.

Der neue Reiter zeigt:

  • Anzahl der freigegebenen Profile und wie viele davon ein Foto haben
  • Tabelle mit Name, Funktionsbezeichnung, Foto-Status und Stichworten
  • den Shortcode zum Kopieren und die drei Einrichtungsschritte
  • die vollständige Liste der Bedingungen, unter denen ein Profil überhaupt erscheint — samt dem Hinweis, dass die Ursache immer in Campus Connect liegt und nie im Plugin
  • Warnung bei null Profilen; Hinweis bei weniger als drei, weil eine Personenseite mit einem einzigen Eintrag als dünn bewertet wird

Außerdem

  • [livento_dozenten] steht jetzt in der Shortcode-Übersicht (Reiter „Shortcodes")
  • Die Anleitung hat einen eigenen Abschnitt 8 „Dozentinnen und Dozenten"; die bisherigen Abschnitte 8 und 9 rücken auf 9 und 10

v1.45.0 — Dozentenseite + stabile Schema-Entitaeten

Choose a tag to compare

@ChristianKarlConsulting ChristianKarlConsulting released this 26 Aug 04:53

Dozentinnen und Dozenten werden auf der Website sichtbar — Etappe 2 zu Campus Connect Feature #181.

Neu

Shortcode [livento_dozenten] rendert alle in Campus Connect freigegebenen Profile als Raster: rundes Portrait, Name, Funktionsbezeichnung, Qualifikations-Stichworte und eine Kurzvorstellung, deren Rest sich aufklappt. Dazu ein Abschnitt „Wer dich unterrichtet" auf jeder Kursdetailseite.

Der Shortcode ist bewusst URL-frei. Anders als beim Katalog gibt es keine Slug-Konstante, keine Rewrite-Regel und keine Detailseiten je Dozent — einzelne dünne Personenseiten wären eine SEO-Last, kein Gewinn. Die Seite legst du an, wo du willst.

Profile ohne Foto verschwinden nicht, sondern bekommen ein eigenes Textlayout mit farbiger Kante. Eine Karte mit leerem Bildbereich wäre in einem Portraitraster der offensichtliche Bruch.

Das Plugin filtert nichts nach. Wer erscheint, entscheiden allein die beiden Tore in Campus Connect: Der Dozent muss eingewilligt und die Institutsleitung freigegeben haben. Die View public_instructors gibt nur sieben Spalten heraus — nie E-Mail, Telefon, Adresse oder Bankdaten. Ist niemand freigegeben, gibt der Shortcode nichts aus statt eines Platzhalters.

Schema.org: erstmals stabile Entitäten

Bis v1.44.0 trug keine Entität im Plugin eine @id — jede Nennung war für eine Suchmaschine ein eigenes, unverbundenes Objekt. Bei Kursen folgenlos, bei Personen nicht: Ein Dozent erscheint auf der Dozentenseite und auf jeder seiner Kursseiten. Ohne @id sind das ebenso viele verschiedene Menschen, und genau der kumulierte Autorenbezug entsteht nicht.

  • Person.@id = <dozentenseite>#dozent-<uuid> — bewusst die UUID statt des Namens, damit die Kennung eine Namensänderung überlebt und bei Namensgleichheit nicht kollidiert
  • Das id-Attribut der Karte trägt dasselbe Fragment: die @id zeigt auf ein real vorhandenes Element, nicht ins Leere
  • Kursseiten führen nur eine schlanke Referenz ohne description/knowsAbout — denselben Langtext mehrfach zu wiederholen bringt keinen Aussagewert
  • Neuer Organisationsknoten https://livento-bildung.de/#organization; Kurs-provider und Dozenten-worksFor zeigen jetzt auf denselben Knoten
  • ItemList mit numberOfItems, Kartenüberschrift h2 auf der Übersicht und h3 im Kursabschnitt (keine übersprungene Ebene)

Titel, Meta-Description und Canonical der Dozentenseite kommen wie bei jeder normalen WordPress-Seite aus Rank Math — das Plugin greift dort nicht ein.

Nach dem Update

  1. WordPress-Seite anlegen (Slug frei wählbar, z. B. /dozenten/) und [livento_dozenten] einfügen.
  2. Die URL dieser Seite unter Livento Katalog → Einstellungen → Dozentenseite eintragen. Bleibt das Feld leer, wird der Dozenten-Abschnitt auf den Kursseiten ohne Verlinkung gerendert — ein toter Link entsteht nie.

Voraussetzung: Campus Connect ab v3.218.0 (View public_instructors, Spalte public_offerings.instructors).

v1.44.0 — Unterrichtszeiten & Wochentage auf der Kursseite

Choose a tag to compare

@ChristianKarlConsulting ChristianKarlConsulting released this 01 Aug 08:41

Mehrtägige Weiterbildungen zeigen auf der Kursseite jetzt die Unterrichtszeiten und Wochentage.

  • Faktenbox „Auf einen Blick": abgeleitete Zusammenfassung (z. B. „Mo & Mi · 17:00–20:15 Uhr, dazu einzelne Sa 08:30–15:30 Uhr").
  • Im Kurstext: eigener Abschnitt „Unterrichtszeiten & Termine" mit aufklappbarer Liste ALLER Termine (Datum + Uhrzeit).
  • Automatisch aus den in Campus Connect hinterlegten Lektionsterminen abgeleitet (View-Spalte public_offerings.schedule, Campus Connect v3.192.0) — nur Live-/Präsenztermine; Selbstlernphasen und Praktikum ausgenommen.
  • Zusätzlich als schema.org courseSchedule im courseInstance-JSON-LD (SEO/GEO).

Enthält auch die zuvor im Workdir fehlenden v1.43.0-Änderungen (Testzugang über die Ticketseite).

v1.43.0 — Testzugang ueber die Ticketseite anfragen

Choose a tag to compare

@ChristianKarlConsulting ChristianKarlConsulting released this 23 Jul 16:16

Interessierte Einrichtungen koennen einen Testzugang jetzt direkt auf der Ticketseite anfragen.

Neu auf den Ticket-Detailseiten

  • Abschnitt „Erst testen, dann entscheiden" (Anker #testzugang) mit eigenem Formular
  • Unter jedem Kaufknopf ein dezenter Textlink „oder erst 14 Tage testen". Der Kaufknopf bleibt bewusst die Hauptaktion — ein gleich grosser Testknopf daneben holt zuverlaessig auch die ab, die ohnehin gekauft haetten.
  • Die bundle_id der angesehenen Setting-Variante reist mit, damit in Campus Connect genau das angefragte Ticket freigegeben wird
  • Die Beschaeftigtenzahl wird aus dem Preisrechner vorbelegt

Technik

  • Neuer WP-REST-Proxy POST /wp-json/livento/v1/trial reicht die Anfrage serverseitig an die Campus-Connect-Function submit-trial-request weiter — kein CORS, und der anon-Schluessel bleibt aus dem Quelltext der Seite draussen
  • Nach bestaetigtem Eingang Redirect auf /danke-anfrage/, damit die Conversion als URL-Ziel messbar ist und nicht nur als dataLayer-Event
  • Sperre je IP (5/Stunde) und je E-Mail (1/Tag) per Transient, Honeypot wie beim Lead-Formular
  • Bei einem Serverfehler wird die E-Mail-Sperre wieder geloest, damit ein Ausfall den zweiten Versuch nicht blockiert

Datenschutz

  • Zwei getrennte Haekchen: Kenntnisnahme des Datenschutzhinweises (Pflicht) und Werbeeinwilligung (freiwillig). Den Testzugang von der Werbeeinwilligung abhaengig zu machen waere eine unzulaessige Kopplung — die Verarbeitung der Angaben ist Vertragsanbahnung.

Setzt Campus Connect v3.190.0 voraus.

v1.42.0 — Kopfpreis statt Teamsumme

Choose a tag to compare

@ChristianKarlConsulting ChristianKarlConsulting released this 17 Jul 17:32

Die Tarif-Karten zeigen jetzt den echten Kopfpreis je Monat (KomplettTicket 8,25 €, RollenTicket 4,08 €, PflichtTicket ab 1,49 €) statt der Teamsumme mit falscher "pro Person"-Etikette. Der Rechner ist an den Kopfpreis gekoppelt (PflichtTicket sinkt mit der Teamgröße). Reihenfolge: KomplettTicket · PflichtTicket · RollenTicket.

v1.41.0 – Stundeneinheit korrigiert + Regelwerke je Kurs

Choose a tag to compare

@ChristianKarlConsulting ChristianKarlConsulting released this 17 Jul 05:54

Die Kursliste nannte die Stundeneinheit falsch. Der Code verglich hours_unit gegen 'stunden'; in der Datenbank stehen Zeitstunden (176 Kurse) und unterrichtsstunden (5). Der Vergleich traf keinen von beiden — also stand bei allen Kursen "UE". Ein Kurs mit 2 Zeitstunden (120 Min.) erschien damit als "2 UE" (90 Min.). Wir haben unsere Kurse öffentlich kürzer dargestellt, als sie sind; bei Pflichtunterweisungen ist diese Zahl die Nachweisgrundlage.

Neu je Kurs: die Regelwerke mit Fassung — "Grundlage: TRBA 250 (Ausgabe November 2025) · BioStoffV (Fassung 2013)". Bewusst eine Tatsache, keine Prüfbehauptung: Campus Connect v3.171.0 hat "Rechtsstand geprüft" aus 355 Kursinhalten entfernt, weil es ein Stempel war. Wer die Fassung nennt, sagt etwas Nachprüfbares — und ein Wettbewerber auf der 2018er TRBA 250 kann diesen Satz nicht schreiben.

Quelle: public_bundle_courses (Campus Connect v3.175.0). Gepflegt unter Einstellungen → Kurse → Regelwerke und im Kursdialog.

v1.40.0 – Der Preis sagt, worauf er sich bezieht

Choose a tag to compare

@ChristianKarlConsulting ChristianKarlConsulting released this 16 Jul 20:30

Auf den Ticket-Seiten stand „348,00 € / Jahr" — direkt neben einem Rechner, der auf 10 Beschäftigte voreingestellt ist, aber ohne einen Halbsatz, der die beiden Zahlen zueinander ins Verhältnis setzt.

Ein Erstbesucher las daraus „348 € pro Kopf" und rechnete sich das PflichtTicket bis zu 15-fach zu teuer. Tatsächlich sind 348 € der Pauschalpreis für bis zu 15 Personen — 1,93 € je Person und Monat. Die Seite versteckte damit ausgerechnet ihr stärkstes Argument. Aufgelöst wurde es bislang nur in einer zugeklappten FAQ am Seitenende, die nicht einmal Zahlen nannte („bis zu einer bestimmten Teamgröße").

Neu

  • Faktenbox: „ab 348,00 € / Jahr — für die ganze Einrichtung, bis 15 Beschäftigte" (Grenze aus max_users, nicht hartkodiert)
  • Variantenzeile: „Gesamtpreis für alle 10 Beschäftigten · entspricht 29,00 € / Monat" + „das sind 2,90 € pro Person und Monat"
  • Staffeltabelle „So rechnet sich das" unter dem Rechner — die Staffel stand vorher nirgends auf der Seite
  • Rechner-Hinweis benennt, dass der Preis immer der Gesamtpreis fürs Team ist und nicht mit der Kopfzahl multipliziert wird

Warum alles abgeleitet und nichts hartkodiert ist

Nur das PflichtTicket hat überhaupt eine Pauschale. KomplettTicket (99 €/Person/Jahr) und RollenTicket (49 €/Person/Jahr) rechnen ab der ersten Person pro Kopf — ein hartkodiertes „für die ganze Einrichtung" wäre dort falsch und hätte das gespiegelte Missverständnis erzeugt. Darum liefert livento_cc_scope_note() den Bezug aus dem pricing_mode, und die Staffeltabelle rendert nur, wo es wirklich eine Staffel gibt.

Die neuen Textbausteine kommen wie Netto- und Steuerhinweis fertig formatiert vom Server — im Browser wird weiterhin kein Preis gerechnet.

Der FAQ-Text „Zahle ich pro Person oder pauschal?" ist parallel in product_families.faq mit den echten Zahlen hinterlegt.

v1.39.0 – Hero-Band randlos ueber die volle Seitenbreite

Choose a tag to compare

@ChristianKarlConsulting ChristianKarlConsulting released this 16 Jul 17:54

Das Hero-Band auf den Ticket-Detailseiten (/e-learning/pflicht-ticket/, /komplett-ticket/, /rollen-ticket/) laeuft jetzt randlos ueber die ganze Seitenbreite, statt im 1200-Pixel-Container zu stecken. Der Inhalt im Band bleibt dabei exakt buendig zum Rest der Seite — geprueft von 390 bis 1920 Pixel Breite.

Warum das hier ueberhaupt Arbeit ist: Die Vorbildseite /foerdermoeglichkeiten/ steht auf Astras Full-Width-Template, ihr Container deckelt gar nicht erst — dort ist der Hero gratis randlos. Die Ticket-Seiten stehen auf dem normalen Container (ast-plain-container, 1200 Pixel) und muessen ausbrechen: margin-inline:calc(50% - 50vw) zieht das Band an die Raender, padding-inline:max(1.25rem, calc(50vw - 37.5rem)) holt den Inhalt wieder auf die 1200-Pixel-Spur.

Die Falle: 100vw zaehlt die Scrollbar mit, 100% nicht — auf Windows mit klassischer Scrollbar ragt das Band dadurch rund 15 Pixel ueber den Viewport und erzeugt Querscroll. Dagegen steht html{overflow-x:clip}. Bewusst clip und nicht hidden: hidden macht das Element zum Scroll-Container und bricht damit die klebende Faktenbox (position:sticky) und die Ankersprunge zum Preisrechner; clip kappt nur den Ueberstand. Untergrenze dafuer ist Safari 16 — darunter bleibt der Querscroll, das ist bewusst in Kauf genommen.

Verworfene Alternative: die drei Seiten auf das Full-Width-Template stellen (derselbe Mechanismus wie die Vorbildseite, ohne vw und ohne globale Regel) — haette einen manuellen Handgriff je Seite gebraucht.

Vollstaendiger Changelog: siehe readme.txt.

v1.38.0 – Hero-Band auf den Ticket-Seiten

Choose a tag to compare

@ChristianKarlConsulting ChristianKarlConsulting released this 16 Jul 15:23

Der Kopf der Ticket-Detailseiten (/e-learning/pflicht-ticket/, /komplett-ticket/, /rollen-ticket/) traegt jetzt dieselbe Bildsprache wie die Orientierungsseiten /kurse/ und /foerdermoeglichkeiten/: ein Band mit demselben warmen Verlauf, Eyebrow "E-Learning-Ticket", Ueberschrift in Qurova und CI-Gruen, Lead in derselben Groesse. Inhaltlich fehlte hier nichts — Ueberschrift, Claim, Beschreibung, Leistungen und Faktenbox stehen seit 1.36.0 — es fehlte die Fassung: alles lag als nackter Text auf Weiss. Die weisse Faktenbox setzt sich jetzt vom Verlauf ab.

Bewusst anders als die Orientierungsseiten: kein zentrierter, luftiger 80-Pixel-Hero und keine CTA-Buttons im Kopf. Wer auf einer Ticket-Seite landet, kam ueber /e-learning/ und will wissen, was drin ist und was es kostet — ein hoher Hero schoebe Preis und CTA unter die Falz. Die Faktenbox haelt beides schon oben.

Enthaelt ausserdem 1.37.0, das seinerzeit nie als Release ausgeliefert wurde: Die Danke-Seite versprach "gleich zwei E-Mails" — die zweite kam nie, seit Campus Connect v3.169.0 kommt EINE Mail mit Zugangsdaten und Team-Link zusammen. Diese Korrektur war bis jetzt nicht live.

Vollstaendiger Changelog: siehe readme.txt.