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:
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
Kommentare
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
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?
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!
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
}
}
}
Hallo MS,
vielen Dank für das Posten der Lösung!
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]
}
Hallo Tobias, schau mal ein paar Kommentare oberhalb.
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
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
}
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
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
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
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
Weitere Beiträge
TYPO3 | Frontend Sprachwechsler realURL konform nur mit TypoScript
CSS3 Animation mit CSS Transitions
Einführung in React.js für Anfänger 2024
TYPO3 | Breadcrumb Navigation mit Startseiten Icon