TYPO3 – Eine News mit Kategorien über Powermail-Formular erstellen

Wer seinen Besuchern ermöglichen möchte, selbst News zu erstellen, wird dieses Snippet lieben. Wir benutzen in diesem Fall ein Powermail Formular, dass die eingetragenen Werte in die News Datenbanktabelle schreibt. Benutzer von den System Kategorien in TYPO3 kommen hierbei auch nicht zu kurz.

plugin.tx_powermail.settings.setup {
  dbEntry {
    1 {
      _enable = TEXT
      _enable.value = 1

      _table = TEXT
      _table.value = tx_news_domain_model_news

      # Die ID des Sys-Ordners in der die News gelistet werden
      pid = TEXT
      pid.value = 22

      tstamp = TEXT
      tstamp.data = date:U

      crdate = TEXT
      crdate.data = date:U

      cruser_id = TEXT
      cruser_id.value = 1

      # value 1 = News ist verborgen und muss erst freigegeben werden
      hidden = TEXT
      hidden.value = 1

      # ueberschrift ist die Powermail Variable ohne {}
      title = TEXT
      title.field = ueberschrift

      # untertitel ist die Powermail Variable ohne {}
      teaser = TEXT
      teaser.field = untertitel

      # beschreibung ist die Powermail Variable ohne {}
      bodytext = TEXT
      bodytext.field = beschreibung

      datetime = TEXT
      datetime.data = date:U

      # name ist die Powermail Variable ohne {}
      author = TEXT
      author.field = name

      # e_mail ist die Powermail Variable ohne {}
      author_email = TEXT
      author_email.field = e_mail

      # kategorie ist die Powermail Variable ohne {}
      categories = TEXT
      categories.field = kategorie
      }

    2 {
      _enable = TEXT
      _enable.value = 1

      _table = TEXT
      _table.value = sys_category_record_mm

      tablenames = TEXT
      tablenames.value = tx_news_domain_model_news

      fieldname = TEXT
      fieldname.value = categories

      sorting_foreign = TEXT
      sorting_foreign.value = 1

      uid_local = TEXT
      uid_local.field = kategorie

      uid_foreign = TEXT
      uid_foreign.field = uid_1
      }
   }
}

#Radiobutton Kategorien im Formular
lib.newsCategory = CONTENT
lib.newsCategory {
  table = sys_category
  select {
    # Die ID des Sys-Ordners mit den Kategorien
    pidInList = 22
  }
  renderObj = COA
  renderObj {
    10 = TEXT
    10.field = title

    20 = TEXT
    20.value = |

    30 = TEXT
    30.field = uid

  stdWrap.wrap = |[\n]
  }
}

Im TYPO3 Backend muss nur noch dem Powermail Formular-Feld „Kategorie“ unter Erweitert bei „Aus TypoScript generieren“ noch „lib.newsCategory“ eingetragen werden:

Mit Powermail News erstellen

Auswahl TYPO3 Kategorien begrenzen

Unser Skript gibt alle Kategorien aus die erstellt wurden. Wer jetzt nur bestimmte im Formular anzeigen lassen möchte, kann im select Bereich noch mit uidInList die Auswahl begrenzen:

...
select {
  pidInList = 22
  uidInList  = 2,3
}
...

 

Getestet mit TYPO3 8.7.15, Powermail 6.0 und News 7.0.4

* Werbung/Affiliate Link
Aktien und ETFs kaufen

Kommentare

  • Dirk
    26.10.2018 - 10:29 Uhr

    Leider werden diese so ausgegeben:
    Restaurant|1Café|2Bekleidung Damen| 3Bekleidung Männer|4Optiker|5Werbeagentur|6Rechtsanwälte| 7Küchenstudios|8Druckerei|9Krankenhaus| 10Friseur|11Juwelier|12Metzgerei| 13Supermarkt|14Bank|15Bücherei| 16Einkaufen|17Stadtwerke| 18Therme Schwimmbad|19Weingut|20S

    Antworten
    • Markus
      10.11.2018 - 16:26 Uhr

      Hallo Dirk,
      kannst du mir Details liefern?
      Welche TYPO3 Version, Powermail Version und News Version verwendest du?
      Und deine Ausgabe bezieht sich auf die Kategorien oder?

      Antworten
  • MS
    24.07.2019 - 17:47 Uhr

    Wie sähe das ganze aus, wenn man dazu noch ein Bild der News hinzufügen möchte?

    Hat das schonmal jemand bewerkstelligt?

    Danke und viele Grüße!

    Antworten
  • MS
    25.07.2019 - 14:12 Uhr

    Ok, habs selber hinbekommen Bilder zur News zu speichern:

    # Deaktiviert das Speichern von Powermail-Datensätzen
    plugin.tx_powermail.settings.setup.db.enable = 0

    # Setzt den Speicherort für die Bilder
    plugin.tx_powermail.settings.setup.misc.file.folder = fileadmin/dein/Ordner/
    module.tx_powermail.settings.uploadPath = fileadmin/dein/Ordner/

    plugin.tx_powermail.settings.setup {
    dbEntry {
    1 {
    _enable = TEXT
    _enable.value = 1

    _table = TEXT
    _table.value = tx_news_domain_model_news

    # Die ID des Sys-Ordners in der die News gelistet werden
    pid = TEXT
    pid.value = 22

    tstamp = TEXT
    tstamp.data = date:U

    crdate = TEXT
    crdate.data = date:U

    cruser_id = TEXT
    cruser_id.value = 1

    # value 1 = News ist verborgen und muss erst freigegeben werden
    hidden = TEXT
    hidden.value = 1

    # ueberschrift ist die Powermail Variable ohne {} in diesem Fall „title“
    title = TEXT
    title.field = title

    # untertitel ist die Powermail Variable ohne {} in diesem Fall „shortsummary“
    teaser = TEXT
    teaser.field = shortsummary

    # beschreibung ist die Powermail Variable ohne {} in diesem Fall „text“
    bodytext = TEXT
    bodytext.field = text

    datetime = TEXT
    datetime.data = date:U

    # name ist die Powermail Variable ohne {} in diesem Fall „author“
    author = TEXT
    author.field = author

    # Bildzuweisung aktivieren
    fal_media = TEXT
    fal_media.value = 1
    }
    2 {
    _enable = TEXT
    _enable.value = 1

    _table = TEXT
    _table.value = sys_file

    pid = TEXT
    pid.value = 0

    tstamp = TEXT
    tstamp.data = date:U

    missing = TEXT
    missing.value = 0

    # Die ID des Storage
    storage = TEXT
    storage.value = 1

    # Typ 2 = Bilder
    type = TEXT
    type.value = 2

    metadata = TEXT
    metadata.value = 0

    name = TEXT
    name.field = picture

    # Pfad relativ zum Storage definieren
    identifier = TEXT
    identifier.field = picture
    identifier.wrap = /dein/Ordner/|

    creation_date = TEXT
    creation_date.data = date:U

    modification_date = TEXT
    modification_date.data = date:U
    }
    3 {
    _enable = TEXT
    _enable.value = 1

    _table = TEXT
    _table.value = sys_file_reference

    tablenames = TEXT
    tablenames.value = tx_news_domain_model_news

    fieldname = TEXT
    fieldname.value = fal_media

    sorting_foreign = TEXT
    sorting_foreign.value = 1

    uid_local = TEXT
    uid_local.field = uid_2

    table_local = TEXT
    table_local.value = sys_file

    uid_foreign = TEXT
    uid_foreign.field = uid_1

    showinpreview = TEXT
    showinpreview.value = 1

    tstamp = TEXT
    tstamp.data = date:U

    crdate = TEXT
    crdate.data = date:U

    cruser_id = TEXT
    cruser_id.value = 1

    # Die ID des Sys-Ordners in der die News gelistet werden
    pid = TEXT
    pid.value = 22
    }
    }
    }

    Antworten
  • Markus
    25.07.2019 - 17:26 Uhr

    Hallo MS,

    vielen Dank für das Posten der Lösung!

    Antworten
  • Tobias Kasprak
    30.03.2020 - 17:26 Uhr

    Hallo,
    gibt es hier noch eine Möglichkeit, ein in den Ressourcen hinterlegtes Bild einzufügen:
    so als:
    40 = IMAGE..

    renderObj = COA
    renderObj {
    10 = TEXT
    10.field = title

    20 = TEXT
    20.value = |

    30 = TEXT
    30.field = uid

    stdWrap.wrap = |[\n]
    }

    Antworten
    • Markus
      30.03.2020 - 18:52 Uhr

      Hallo Tobias, schau mal ein paar Kommentare oberhalb.

      Antworten
  • Martin
    06.12.2023 - 15:29 Uhr

    Hallo,
    seit langer langer Zeit liegt diese Seite in meinem Lesezeichen, weil ich dachte: Das brauchst Du bestimmt mal. Und tatsächlich, heute ist es soweit. Das Eintragen der News hat auch prima geklappt, nur will ich Veranstaltungstermine eintragen lassen (+eventnews). Allein der Umgang mit den Datumsfeldern macht mir Schwierigkeiten.
    Aus dem Formular kommt das Datum im Format „01.02.2024 17:10“. tx_news speichert das Datum allerdings als Timestamp. In Deinem Beispielscript wird das aktuelle Datum entsprechend umgewandelt:
    tstamp.data = date:U
    Nur wie mache ich das mit meinem datetime aus dem Formular?
    Über einen Tipp würde ich mich freuen und gebe dann gerne Nachricht, obs geklappt hat.
    Danke und Grüße

    Antworten
    • Markus
      06.12.2023 - 19:29 Uhr

      Hi Martin, ich nutze Powermail schon eine ganze Weile nicht mehr. Aber ich denk dein Vorhaben lässt sich mit DataProcessor umsetzen.
      Vielleicht reicht dir dass aber auch schon:
      myDateField {
      data = GP:tx_powermail_pi1|field|myDateField|date : U
      # "myDateField" ist der Name deines Datumsfelds im Formular
      # "date : U" formatiert das Datum in Unix-Timestamp
      }

      Antworten
  • Martin
    11.12.2023 - 11:26 Uhr

    Hallo Markus,
    danke für die Antwort. Leider nimmt TYPOSCRIPT bei date U nicht als Parameter; auch %S geht nicht. Ich habe eine userFunc gebaut, die direkt im Page-Object in der der Ausgabe auch funktioniert. Leider erscheint im Newsartikel immer noch 01:18 01-01-1970 als Datum.
    datetime = USER_INT
    datetime {
    userFunc = Fischhase\Sitepackage\Utility\DateToTimestamp->convert
    field = datetime
    }

    Selbst wenn die UserFunc einen festen TC als String zurück gibt, wird dieser nicht korrekt in die Datanbak eingetragte:

    public function convert(string $content = “, array $conf = []):string {
    return „1706277600“;
    }

    Wenn ich hingegen in TS
    datetime = USER_INT
    datetime {
    value = 1706277600″
    }
    eintrage gehts …

    Was kann da schief laufen. Sollte die Rückgabe der UserFunc nicht genau so in die Datenbank übergeben werden wie der value?

    Danke und Grüße
    Martin

    Antworten
  • Martin
    09.01.2024 - 19:00 Uhr

    Hallo,
    hier zur Uhrzeit eine Rückmeldung. So funktionierts:
    datetime = TEXT
    datetime.data = date:d.m.Y
    datetime.strtotime = 1
    datetime.field = datetime

    event_end = TEXT
    event_end.data = date:d.m.Y
    event_end.strtotime = 1
    event_end.field = event_end

    Grüße

    Antworten
  • Martin
    11.01.2024 - 12:28 Uhr

    Hallo MS,
    zur Einbindung eines Bildes habe ich eine Rückfrage:
    Ich habe es soweit hinbekommen, dass das Bild im Newsdatensatz erscheint. Allein die Bilddimensionen werden nicht erkannt, weshalb der crop nicht funktioniert: „Bilddimensionen konnten nicht bestimmt werden. Bildmanipulation ist nicht verfügbar, weil die Dimensionen des Originalbildes unbekannt sind.“
    Wie schaffe ich es, dass die Bilddimensionen auch hinterlegt werden?

    Und ein Hinweis zur Kombination von Bild und Kategorien:
    da die Anleitung für die Bilder im Objekt dbEntry ebenfalls wie die Kategorien die Position 2 nutzt, müssen die Positionen bei der Bildanleitung von 2 -> 3 und von 3 -> 4 geändert werden. Dabei ändert sich aber auch der Eintrag für die file_references (dann Position 4) von
    uid_local.field = uid_2 zu uid_local.field = uid_3

    Danke und Grüße

    Antworten
  • Martin
    11.01.2024 - 12:58 Uhr

    Hallo MS,
    noch ein Nachtrag zur Bildeinbindung: Die Größe könnte man über den Task „File Abstraction Layer: Update storage index“ ergänzen lassen. Problem: Wenn ich den Task auslöse, wird in der Datenbank sys_files eine Kopie mit neuer UID angelegt. Das hat dann zwar die Bildgröße, der Newsartikel verweist aber natürlich weiterhin auf die alte UID. Zudem hat man dann eine Datei mit zwei Einträge, was beim Löschen ärger machen wird, weil natürlich die Referenz-Abfrage nicht mehr stattfindet :-/
    Das Thema ist zumindest noch nicht abgeschlossen.
    Grüße
    Martin

    Antworten

Schreibe einen Kommentar

Erforderliche Felder sind entsprechend markiert.

Wird nicht veröffentlicht.