Skip to main content
Home
Schatzchaeschtli 2026

Main navigation

  • Home
User account menu
  • Log in

Breadcrumb

  1. Home

Modul: Feeds

By PierreAdmin , 15 September 2026

Basics für das Feedsmodul. Massgebend für das Tutorial ist die Erstellung einer Eventtabelle aus einer json Datei im Modestia Projekt.

Projektbeschrieb

Mittels events.json Datei, die vom Kunden zur Verfügung gestellt wird, soll automatisch eine Arbeistabelle erzeugt werden. 

Folgende Regeln gelten:

Felder: 

  • event_key: Eindeutige ID
  • event_date: Eventdatum
  • type: Eventtyp (Abkürzung 2-4 Buchstaben)
  • description: Eventbeschreibung
  • link: Eventlink zur Anmeldung

 

  1. Neuer event-key (Key) > neuer Node
  2. Bestehender Key, geänderte Daten > bestehender Node wird aktualsiert
  3. Unveränderter erneuter Import > Keine Duplikate
  4. Event fehlt im vollständigen Bestand > Node wird Unpublished, nicht gelöscht
  5. Event liegt in der Vergangenheit > Bleibt für das Archiv erhalten
  6. Zuvor entfernter Event erscheint wieder > Gewünschte Wiederveröffentlichung prüfen
  7. Fehlerhafter oder abgebrochener Import > Keine unbeabsichtigte 
  8. Massenänderung

Subdomain für json Datei einrichten

Am einfachsten richten wir für den Dateiaustausch in plesk eine Subdomain ein

  • Plesk > Subdomain eventfeed.modestia.ch einrichten
  • Im Rootverzeichnis ein Unterverzeichnis events einrichten
  • Dieses Verzeichnis mittes Passwortgescchütze Verzeichniss schützen
    • Im Feld «Titel des geschützten Bereiches» «Event-Import» oder ähnliches. Das wird im Loginfenster angezeigt.
    • Verzeichnis hinzufügen und durch anklicken den htaccess User und PW eingeben
  • SSL Zertifikat einrichten > Link anklicken und dort dann lets encript wählen. Keine weiteren Option anwählen
  • FTP-Benutzer für genau dieses Verzeichnis einrichten

Feeds Module installieren

Folgende Module sind nötig:

  • Feeds: (feeds)
    Steuert den Import, ordnet Qualldaten Drupal Feldern zu und erstellt, bzw. aktualisiert die erstellten Nodes.
  • Feeds Extensible Parsers: (feeds_ex)
    ergänzt den JSONPath-Parser, da das normale Feeds Modul nur CSV un d RSS kennt. Damit liest Feeds unsere JSON-Datei: $* wählt die einzelnen Events aus; das Mapping greift auf Felder wie event_key, title und event_date zu.
  • Feeds HTTP Auth Fetcher: (feeds_http_auth_fetcher)
    ermöglicht den Abruf einer passwortgeschützten HTTP-/HTTPS-Quelle. Der HTTP Auth Fetcher sendet Benutzername und Passwort im Authorization-Header statt in der URL. Dadurch landen die Zugangsdaten nicht versehentlich in kopierten Links oder üblichen URL-Zugriffsprotokollen.
    HTTPS verschlüsselt die gesamte Anfrage – inklusive Header und URL. Der Vorteil des Headers liegt also darin, dass Zugangsdaten weniger leicht unbeabsichtigt gespeichert oder weitergegeben werden.
  • Feeds Tamper: (feeds_tamper)
    Ergänzt Feeds um die Möglichkeit, Werte während des Imports zu bearbeiten, umzuwandeln oder durch feste Werte zu ersetzen, bevor sie in Drupal gespeichert werden. Die JSON-Datei bleibt dabei unverändert.
    Wir verwenden es, um für jedes gelieferte Event Published = 1 zu setzen. Damit können auch zuvor auf Unpublished gesetzte Events beim erneuten Import wieder veröffentlicht werden. 
    Was mit Events geschieht, die aus der JSON verschwinden, regelt weiterhin Feeds über Previously imported items.
composer require 'drupal/feeds:^3.2'
composer require 'drupal/feeds_ex:^1.0@beta'
composer require 'drupal/feeds_http_auth_fetcher:^2.0'
composer require 'drupal/feeds_tamper:^2.0@RC'

Danach Module im Backend oder mittesl Drush aktivieren.
Feeds Tamper benötigt Tamper und wird im Backend entsprechend gemeldet und aktiviert.

drushh en feeds feeds_ex feeds_http_auth_fetcher feeds_log feeds_tamper -y

Inhaltstyp erstellen

Wir erstellen einen eigenen Inhaltstyp «Event»

Folgende Einstellungen zu Event:

  • Preview before submitting: optional (final nicht nötig, aber für manuelle Tests sinnvoll)
  • Publishing options: Published genügt, Rest deaktivieren
  • Display author ... : Nicht nötig
  • Menu: Nicht nötig

 Felder gemäss json Datei erstellen.

  • Event Date: field_eve_event_date >  Datetime + required
  • Event Description: field_eve_event_description > Long text + Basic HTML
  • Event Key: field_eve_event_key > Short text + Required
  • Event Link: field_eve_event_link > Link + external links only + allow link text = disabled
  • Event Type: field_eve_event_type > Short text

Benuter und Rechte für Feeds einrichten

Damit wir für die Feeds einen ganz eigenständigen und frei konfigurierbaren Benutzer haben, müssen wir den zunächst einrichten. Zuerst richten wir unter People > Roles noch die Rolle Event-API ein, damit wir die gleich dem neuen Benutzer zufügen können.

Rolle einrichten

People > Roles > Add role > Event-API

Benutzer erstellen

People > List > Add user: 

  • Email address: event-api@per-net.ch
  • Username: Event-API
  • Password: ***
  • Status: Active
  • Roles: Event-API zu

Rechte vergeben

People > Permissions > Für User Event-API

  • Event: Create new content
  • Event: Edit own content – für spätere Aktualisierungen.
  • Use the Basic HTML text format – für unser Description-Mapping.

 

Feeds Konfigurieren

Neuen Feed erstellen

  • Structure > Feed Types > Add feed type
    • Name: Event Import (event_import)
    • Fetcher: Download from URL with Authorization
    • Parser: JsonPath
    • Processor: Node
    • Content type: Event
    • Settings:
      • Import period: Off (für Entwicklung und Debugging, damit wir sauber testen können)
        später je nach Kundenwunsch einrichten.
      • Allows import period per feed: Aus
    • Fetcher settings:
      • Auto detect feeds: Aus
        Wir geben später direkt die JSON-URL an. Feeds muss keine Feed-Adresse in der einer HTML-Seite suchen.
      • Use PubSubHubbub: Aus
        Ein Benachrichtigungsdienst für Änderungen an Feeds. Für unsere JSON-Quelle nicht benötigt.
      • Always download: Ein (Für Testing)
        Lädt die Datei bei jedem gestarteten Import erneut, auch wenn der Server sie als unverändert meldet.
      • Request timeout: 30 (Default Einstellung)
        Wartet maximal 30 Sekunden auf den Abschluss der HTTP-Anfrage.
    • Processor settings:
      • Language: English
      • Insert new content items: Insert new content items
        Neue Event Keys erzeugen neue Nodes
      • Update existing content items: Update existing content items
        Bestehende Events werden über das Mapping aktualisiert.
      • Previously imported items: Keep (Vorerst)
        Fehlende Events zunächst behalten. Unpublish testen wir später gezielt.
      • Expire content items: Never
        Keine automatische Löschung nach einer bestimmten Zeit.
      • Owner: Feed author: Aus
        Wir wollen einen festen Autor verwenden.
      • Owner: Event-API (Der Benutzer den wir oben neu angelegt haben)
      • Advanced settings
        • Skip validation: Aus
          Pflichtfelder und Feldwerte sollen geprüft werden.
        • Authorize: Ein
          Die Berechtigungsprüfung bleibt aktiv.
        • New revision: Aus
          wie beim Content type eingestellt
    • Log settings:
      • Alles Ein

Mapping definieren

Structure > Feed types > Event import > edit > Mapping

  • Context: $[*]
    $[*] bedeutet: Jeden Event aus der äusseren JSON-Liste einzeln verarbeiten.
  • Jedem Feld das wir importieren wird nun ein Feld aus dem Node Event zugeordnet
    • Select a target: Das zu verknüpfende Feld aus neuen Node «Event» auswählen
      • Danach «Select Source» > New Jason source > Json Feldname eintragen
        WICHTIG: Hat man hier einen Fehler gemacht und löscht eine Zeile bleibt der Eintrag von New Jason Source stehen und kann ab dann direkt aus dem Pulldown-Menu gewählt werden. Also nicht nochmal new Source wählen, sonst reklamiert Drupal, dass das Feld schon existiert
    • Beim Feld Description haben wir im Node als Format «Basic HTML» gewählt, das muss hier auch noch in den Settings zu diesem Feld angepasst werden.
  • WICHTIG: Um unpublished Status nach erneutem hinzufügen eines gelöschten Datensatzes wieder auf published zu setzen, brauchen wir das Feeds Tamper Modul. Oben bereits dokumentiert.
    Ein zusätzlicher Target «Published (status)» erstellen und «new blank target» hinzufügen und einen sinnvollen Wert wie z.B. force_published eingeben. 
    • Danach in Tamper (neuer Tab oben, erscheint nach installation des Moduls) dem Mapping mit «Add Plugin» > Set value or default value auswählen und als Value 1 eingeben.
      Diese Einstellung von Tamper überschreibt damit den Taraget und bewirkt, dass wenn eine Datensatz in json wieder auftaucht, der vorher nicht mehr da war, dass der node status mit der 1 wieder auf published gesetzt wird. Ohne Tamper ändert sich zwar der Eintrag, oder bleibt wenn er unverändert ist auch unverändert, stellt aber status nicht auf published zurück. 
  • Wenn alle Felder definiert sind, die Mappings sichern

Feed erstellen

Wir erstellen nun den effektiven Feed, der den oben erstellten Feed Type «Event Import» nutzt.

  • Content > Reiter Feeds > + Add Feed
    • Feed «Event Import» auswählen
      Wichtig: Wenn mehrere Feed Typen vorhanden sind, den richtigen auswählen. Wenn nur einer da ist, wird der automatisch gewählt und das Auswahlfeld fehlt
    • Title: Modestia Events
    • Feed URL: [PFAD EINGEBEN]
    • Authorization Header Key: Authorization (ist default)
    • Authorization Header Token: (BASE64 CODIERUNG)
      • User und PW müssen wir mit Base64 codieren. Das können wir im Terminal machen.
        Folgenden Code ins Terminal. Dann kommt die Abfrage nach Benutzername und PW. Das Ergebnis wird in die Zwischenablage kopiert und nicht im Terminal ausgegeben. Resultat dann ins Feld kopieren
        Sieht dann irgendwie so aus: Basic ZmVlZHMtbW9kaS1ldmVudHM6NTcmN3VVVXotLW45OQ==
      • (
          read "feed_user?Benutzername: "
          read -s "feed_pass?Passwort: "
          printf '\n'
          printf 'Basic %s' "$(printf '%s:%s' "$feed_user" "$feed_pass" | base64 | tr -d '\n')" | pbcopy
        )
    • Accept encoding headers: leer lassen
    • Import options: 
      • Active: An
      • Log: An
    • Authoring information: 
      • Authored by: Event-API
      • Authored on: So lassen
    • Speichern und importieren

Testen und finale Settings 

Jetzt können wir den Import testen. Wenn nach dem Import soviele Nodes erstellt wurden, wie in der Json hinterlegt, ist schon mal alles gut.

  • Test 1: Normaler import. Sollte gleiche Anzahl Nodes erzeugen, wie in der Json Datei (10) sind: Check
  • Test 2: Nochmaliger Import ohne Änderung. Danach sollte alles so bleiben wie vorher und immer noch 10 Nodes da sein: Check
  • Test 3: Erster Eintrag in Json ändern und erneut importieren. Immer noch 10 Einträge und der geänderte mit neuem Datum und gemachter Korrektur. Check
  • Test 4: Neuer Eintrag. In JSon einen weiteren Eintrag hinzugfügen. Nun sollten 11 Einträge da sein und der neue mit aktuellem Datum. Check
  • Test 5: Gelöschter Eintrag. In JSON den neu erstellten Event wieder löschen und importieren. 
    WICHTIG: Zuerst noch folgende Anpassung im Feed Type machen, die für die ersten Tests noch ok war, für finale Version aber angepasst werden muss. 
    • Structure > Feed Type > Event Import > Processor settings > Previously imported items > Unpublish content item
      Danach sind immer noch 11 Nodes da, aber der gelöschte ist unpublished: Check
  • Test 6: Gelöschter Eintrag wieder in json legen und erneut importieren. FAIL
    • Node bleibt unpublished. Problemlösung: Feeds Tamper Modul. In Mapping Target = Published (status), Source leer und sinnvollen Namen geben. Danach in Tamper (Reiter neben Mapping oben) Plugin «set value or default value» wählen und auf 1 setzen. Beim nächsten Import werden zuerst alle Datensätze auf 1 (published) gesetzt was alle Daten gleich macht, danach aber Verhalten wie zuvor. Nur geänderte Nodes erhalten das aktuelle Datum: Check
  • Test 7: Inhalt eines Wertes (z.B. Linkfeld leer) löschen. Danach darf Link nicht mehr da sein: Check
  • Test 8: json nicht erreichbar. Falsch benannt oder fehlende Datei erzeugt nach dem import ein Error. Nach erneuter umbenennung wieder alles ok. Check
  • Test 9: defekte json Datei. Nicht komplette json Datei erzeugt error. Es darf sich am besteehenden nichts ändern. Check
  • Test 10: leere [] json. Sollte alle Einträge auf unpublished stellen und danach wieder auf published setzen.

 

  • feeds
  • modul
  • drupal
  • drupal 11
Module

Tag Suche

Categories (Taxonomie-Menu)

  • Drupal
    • Module
    • Theming
    • Views
  • Webentwicklung
    • Composer
    • CSS/SCSS
    • Deployment
    • Drush
    • Git
    • HTML
    • JavaScript
    • PHP
    • SSH
    • SVG
    • VS Code
  • Datenbank
    • mySQL
  • Server
    • Apache
    • DNS
    • Domains
    • Plesk
    • SSL/TLS
  • System
    • Mac
    • Unix
    • Windows