FE-User sollen tt_news-Beiträge erstellen
Ein User muss sich erst mal registrieren und dann anmelden um einen Beitrag erstellen zu können. Da die Registrierung außer einer email-Verifikation nicht weiter eingeschränkt ist, könnte die Option News-Beiträge zu erstellen sicher auch zu SPAM und Code-Injection benutzt werden.
Damit kein Missbrauch möglich wird, werden die Beiträge erst mal versteckt gespeichert und ein Admin per Mail benachrichtigt, dass er einen neuer Beitrag freigeschalten muss.
Weitere Besonderheiten:
jede News soll einer von sechs Themenkategorien zugeordnet sein. Außerdem gibt es Redaktionskategorien: eine für News, die über das FE angelegt werden und eine für News von BE-Redakteuren.
Das ist die Vorgabe, die mit folgender Konfiguration mit der formhandler Extrension gelöst wurde:
HTML
mastertemplate.html
erweitert um:
<!-- ###master_category### --> ###error_category### <div class="type-text"> <label for="category" ###is_error_category###>###LLL:category### ###required_category###</label> <select id="category" name="###formValuesPrefix###[category]" class="select"> <option value="">---</option> <option value="3" ###selected_category_3###>###LLL:cat_1###</option> <option value="4" ###selected_category_4###>###LLL:cat_2###</option> <option value="5" ###selected_category_5###>###LLL:cat_3###</option> <option value="6" ###selected_category_6###>###LLL:cat_4###</option> <option value="7" ###selected_category_7###>###LLL:cat_5###</option> <option value="8" ###selected_category_8###>###LLL:cat_6###</option> </select> ###validate_category### </div> <!-- ###master_category### --> <!-- ###master_checkbox### --> ###error_###fieldname###### <div class="type-check"> <input type="checkbox" id="###fieldname###" name="###formValuesPrefix###[###fieldname###]" value="1" ###checked_###fieldname###_1### /> <label for="###fieldname###" ###is_error_###fieldname######>###LLL:###fieldname###### ###required_###fieldname###### </div> <!-- ###master_checkbox### -->
Die Values entsprechen den UIds der Kategoriendatensätze.
leider habe ich noch keine Möglichkeit gefunden diese Werte einfach aus der Datenbank auszulesen.
step-1.html
<!-- ###TEMPLATE_FORM1### begin--> ###master_multipart-form-start_globalo_news-form### ###master_section-start### ###master_input_title### ###master_textarea_short### ###master_textarea_bodytext### ###FORM_RTE_ENTRY### ###master_section-end### ###master_section-start### ###master_category### ###master_input_author### ###master_input_keywords### Maximal 4 Begriffe kommagetrennt eingeben ###master_section-end### ###master_section-start### ###master_file_image### ###master_input_imagecaption### ###master_section-end### ###master_section-start### <p class="annotation">Hinweise an den System-Administrator:</p> ###master_textarea_annotation### <br /> ###master_checkbox_agb### <br /> ###master_submit### ###master_section-end### ###master_form-end### <!-- ###TEMPLATE_FORM1### end --> <!-- ###TEMPLATE_SUBMITTEDOK### begin --> Vielen Dank für ihren Beitrag.<br> Wenn alles überprüft wurde wird ihr Beitrag veröffentlicht. <!-- ###TEMPLATE_SUBMITTEDOK### end --> <!-- ###TEMPLATE_EMAIL_ADMIN_PLAIN### begin --> Eine neue News mit dem Titel "###value_title###" wurde eingetragen. Bitte überprüfen und frei schalten. zusätzliche Anmerkungen: ###value_annotation### <!-- ###TEMPLATE_EMAIL_ADMIN_PLAIN### end --> <!-- ###TEMPLATE_EMAIL_ADMIN_HTML### begin --> <p>Eine neue News mit dem Titel "###value_title###" wurde eingetragen. Bitte überprüfen und frei schalten.</p> <p>zusätzliche Anmerkungen:</p> <div style="border:2px solid #800; padding:10px;">###value_annotation###</div> <!-- ###TEMPLATE_EMAIL_ADMIN_HTML### end -->
Typoscript
nach
includeLibs.rte = fileadmin/formhandler/scripts/rte.php plugin.Tx_Formhandler.settings.predef.default.finishers.1 > plugin.Tx_Formhandler.settings.predef.default.finishers.2 > plugin.Tx_Formhandler.settings { additionalIncludePaths = fileadmin/templates/scripts masterTemplateFile = fileadmin/formhandler/html/mastertemplate.html langFile = fileadmin/formhandler/lang/lang.xml cssFile = fileadmin/formhandler/css/formhandler.css jsFile = fileadmin/formhandler/js/formhandler.js #debug = 1 requiredSign = * // attachments: files.uploadFolder = uploads/tx_ttnews/ // images: files { uploadFolder = uploads/pics/ search = ä,ö,ü,ß,Ä,Ö,Ü replace = ae,oe,ue,ss,Ae,Oe,Ue } validators { 1 { class = Validator_Default #disable = 1 config.fieldConf { title.errorCheck.1 = required bodytext.errorCheck.1 = required author.errorCheck.1 = required image.errorCheck { 1 = fileAllowedTypes 1.allowedTypes = jpg,jpeg,png,gif,tiff 2 = fileMaxCount 2.maxCount = 1 3 = fileMaxSize # 5 MB 3.maxSize = 5242880 } agb.errorCheck.1 = required } } 1.config { fieldConf { } } } predef.default.finishers { #disable = 1 1 > 1.class = Finisher_DB 1.config { table = tt_news key = uid fields { #<db_field>.mapping = <form_field> title.mapping = title short.mapping = short bodytext.mapping = bodytext author.mapping = author keywords.mapping = keywords image.mapping = image imagecaption.mapping = imagecaption # es werden zwei Kategorien eingetragen sein: category.postProcessing = TEXT category.postProcessing.value = 2 pid.postProcessing = TEXT pid.postProcessing.value = 433 hidden.postProcessing = TEXT hidden.postProcessing.value = 1 tstamp.special = sub_tstamp crdate.special = sub_tstamp datetime.special = sub_tstamp } } 2.class = Finisher_DB 2.config { table = tt_news_cat_mm fields { uid_local.special = inserted_uid uid_local.special.table = tt_news uid_foreign.postProcessing = TEXT # 10 = Kategorie uid - FE user erstellte news uid_foreign.postProcessing.value = 10 sorting.postProcessing = TEXT # 1 = erste eingetragene kategorie sorting.postProcessing.value = 1 } } 3.class = Finisher_DB 3.config { table = tt_news_cat_mm fields { uid_local.special = inserted_uid uid_local.special.table = tt_news # Kategorie aus dem Formular uid_foreign.mapping = category sorting.postProcessing = TEXT # 2 = zweite eingetragene kategorie sorting.postProcessing.value = 2 } } 4.class = Finisher_Mail 4.config { admin { subject = TEXT subject.data = LLL:fileadmin/formhandler/lang/lang.xml:email_admin_subject sender_email = website@example.com attachment = #attachment = image } # user bekommt keine Mail user > #user { # to_email = email # subject = TEXT # subject.data = LLL:fileadmin/formhandler/lang/lang.xml:email_user_subject # sender_email = email@example.tld #} } 5.class = Finisher_SubmittedOK 5.config { returns = 1 } } }