15.06.2011 TYPO3
Schwarzes Brett für FE-User
Aufgabenstellung
Frontend-User sollen die Möglichkeit bekommen, kurze Nachrichten auf einer Website zu veröffentlichen. Überschrift, Text, Links und der Upload von bis zu drei Dateien sollen möglich sein und der User soll bestimmen können, ob die News für alle oder nur für eingeloggte User sichtbar sein soll. Ausserdem sollen die Beiträge von einem Admin vorab kontrolliert und dann freigeschaltet werden.
Für die Umsetzung verwende ich tt_news und den formhandler.
Nachdem formhandler und tt_news installiert sind, erstelle ich zuerst zwei News-Kategorien: "alle Besucher" und "nur eingeloggte". Danach erstelle ich folgendes Formulartemplate für die Eingabe der News im Frontend:
<div class="newsform">
<form method="post" action="###REL_URL###" enctype="multipart/form-data">
<fieldset>
<input type="hidden" name="formhandler[submitted]" value="1" />
<dl>
<dt>
<label for="category">Category</label>
</dt>
<dd>
<select name="formhandler[category]">
<option value="1" ###selected_category_2### >All visitors</option>
<option value="2" ###selected_category_1### >Only members</option>
</select>
<p>You can select if the notice is only be visible FE members or to everyone visiting this site.</p>
</dd>
<dt>###error_title###
<label for="title">Title</label>
</dt>
<dd>
<input type="text" name="formhandler[title]" id="title" value="###value_title###"/>
</dd>
<dt>###error_bodytext###
<label for="bodytext">Text</label>
</dt>
<dd>
<textarea name="formhandler[bodytext]" id="bodytext" rows="30">###value_bodytext###</textarea>
<p>Max. 1000 characters</p>
</dd>
<dt>###error_links###
<label for="links">Related Links</label>
</dt>
<dd>
<textarea name="formhandler[links]" id="bodytext">###value_links###</textarea>
<p>Related links (optional). Only one link per line. Start each line with http://</p>
</dd>
<dt>
###error_picture###
<label for="picture">Attach a document (optional)</label>
</dt>
<dd>
<input type="file" name="formhandler[picture]" id="picture" value="###value_picture###"/>
<br />
<input type="submit" value="Upload file now" ###submit_reload### /><br />
<p>Maximum size: ###picture_maxSize###<br />
Allowed types: ###picture_allowedTypes###<br />
###picture_fileCount###/###picture_maxCount###<br />
###picture_remainingCount### files left to upload<br />
File: ###picture_uploadedFiles###</p>
</dd>
<dt> </dt>
<dd>
<input type="submit" value="Send" ###submit_nextStep###/>
</dd>
</dl>
</fieldset>
</form>
</div>
Dieses Formular packe ich nun auf die Website und stelle den Zugriff der Seite oder des Inhaltselements auf "Anzeigen, wenn angemeldet". Das Typoscript für die Seite sieht dann wie folgt aus:
plugin.Tx_Formhandler.settings.predef.singlestep_example {
# Common configuration
name = Example SingleStep
debug = 0
addErrorAnchors = 1
formValuesPrefix = formhandler
# HTML wrapping by validation error
errorListTemplate {
totalWrap = <ul>|</ul>
singleWrap = <li class="error">|</li>
}
singleErrorTemplate {
singleWrap = <span class="error">|</span><br />
}
files {
clearTempFilesOlderThanHours = 24
uploadFolder = uploads/media/
enableAjaxFileRemoval = 1
}
# Validators configuration
validators {
1 {
class = Tx_Formhandler_Validator_Default
config {
fieldConf {
title {
errorCheck.1 = required
errorCheck.2 = maxLength
errorCheck.2.value = 150
}
bodytext {
errorCheck.1 = required
errorCheck.2 = maxLength
errorCheck.2.value = 1000
}
picture {
errorCheck.1 = fileAllowedTypes
errorCheck.1.allowedTypes = doc,pdf
errorCheck.2 = fileMinSize
errorCheck.2.minSize = 10000
errorCheck.3 = fileMaxSize
errorCheck.3.maxSize= 5120000
errorCheck.4 = fileMaxCount
errorCheck.4.maxCount = 3
}
}
}
}
}
# Interceptors configuration
initInterceptors {
1 {
class = Tx_Formhandler_Interceptor_Filtreatment
}
}
# Finishers configuration
finishers {
1 {
class = Tx_Formhandler_Finisher_DB
config {
table = tt_news
key = uid
fields {
title {
mapping = title
if_is_empty = None given
}
bodytext {
mapping = bodytext
}
links {
mapping = links
}
news_files {
mapping = picture
}
author {
mapping = TEXT
mapping {
data = TSFE:fe_user|user|name
}
}
author_email {
mapping = TEXT
mapping {
data = TSFE:fe_user|user|email
}
}
hidden = 1
pid = 76
category = 1
datetime.special = sub_tstamp
crdate.special = sub_tstamp
tstamp.special = sub_tstamp
}
}
}
2.class = Tx_Formhandler_Finisher_DB
2.config {
table = tt_news_cat_mm
fields {
uid_local.special = inserted_uid
uid_local.special.table = tt_news
uid_foreign.mapping = category
}
}
3.class = Tx_Formhandler_Finisher_Mail
3.config {
limitMailsToUser = 5
admin {
to_email = beispiel@beispiel.org
to_name = Mein Name
subject = Mein Subject
sender_email = TSFE:fe_user|user|email
sender_name = TSFE:fe_user|user|name
replyto_email = TSFE:fe_user|user|email
replyto_name = TSFE:fe_user|user|name
}
}
4.class = Tx_Formhandler_Finisher_Redirect
4.config {
redirectPage = 78
}
}
}
Wichtig ist die Zeile 20, hier kommt der Wert "upload/media" hinein, der Ordner, in dem auch tt_news die angehängten Dateien ablegt. Dann braucht es noch ein paar Validatoren und drei Finisher. Der erste speichert die Formularwerte Titel, Bodytext, Links und Dateien, die Werte des eingeloggten Users username und -mail sowie die statischen Werte pid, hidden und datetime in die Tabelle "tt_news". Der zweite speichert die ausgewählte Kategorie in die Tabelle "tt_news_cat_mm". Die dritte versendet eine Nachricht an den Admin. Das formhandler-Mailtemplate schaut wie folgt aus:
<!-- ###TEMPLATE_EMAIL_ADMIN_HTML### begin --> Hello Admin,<br /><br /> a user has just filled out the form for the Notice-Board. <br /> Title: ###value_title###<br /> Text: ###value_bodytext###<br /> Links: ###value_links### <!-- ###TEMPLATE_EMAIL_ADMIN_HTML### end -->
Der Admin kann daraufhin ins BE gehen, sich den Beitrag noch einmal ansehen und dann sichtbar schalten.
Auf der Site kann man nun überall tt_news einbinden und die Beiträge anzeigen lassen. Wobei man immer jede Ansicht zweimal anlegen muss, einmal mit der Zugriffseinstellung "Anzeigen, wenn angemeldet" und beiden Kategorien und einmal mit der Zugriffseinstellung "Nach Anmeldung verbergen" und nur der Kategorie "Alle Besucher".
Versionen: TYPO3 4.5.3, tt_news 3.0.1, formhandler 0.9.14
- 0 Kommentar(e)




Mein Kommentar