Da in der Kommentarklasse die Formularfelder „hard codiert“ sind, sind weitere Anpassungen des Kommentarformulars etwas tricky.
Wenn anonyme Kommentare erlaubt werden, sollte die Angabe eines Namens freiwillig sein.
Das Namensfeld ist aber ein Pflichtfeld und muss ausgefüllt sein, damit Contao den Kommentar speichert.
(Anonyme Kommentare sollten selbstverständlich nur erlaubt werden, wenn die Kommentare moderiert sind und vor der Veröffentlichung geprüft werden.)
Option 1: Namensfeld komplett ausblenden
Das Namensfeld kann im Template als verstecktes Feld mit einem voreingetragenen Wert eingefügt werden, auf die selbe Weise, wie es im vorherigen Beitrag für die E-Mail-Adresse gemacht wurde:
PHP-Code:
<!-- templates/mod_comment_form.html5 -->
[...]
<?php
echo '<input type="hidden" name="name" value="Anonym">';
echo '<input type="hidden" name="email" value="comment@example.com">';
foreach ( $this->fields as $field ) {
// Do not render the default fields 'name', 'email' and 'notify':
if ( !in_array($field->name, array('name', 'email', 'notify')) ) {
echo $field->parse();
}
}
?>
[...]
Dadurch kann der Verfasser allerdings keinen Namen mehr zu zusätzlich zum Kommentar angeben, falls er das möchte.
Option 2: Label des Namensfeldes anpassen
Die Feldbeschreibung (das Label) kann angepasst werden. Anstelle „Name“ könnte das Label z.B. „Dein Name oder Pseudonym (Angabe freiwillig)“ lauten.
Die Anpassungen können updatesicher in den Sprachdateien gemacht werden. Dazu beispielsweise /contao/languages/de/default.php anlegen (falls noch nicht vorhanden) und eigene Beschriftungen festlegen:
PHP-Code:
<?php
// contao/languages/de/default.php
// Angepasste Beschriftung für labels beim Kommentar-Formular:
$GLOBALS['TL_LANG']['MSC']['com_name'] = 'Dein Name oder Pseudonym (Angabe freiwillig):';
$GLOBALS['TL_LANG']['MSC']['com_comment'] = 'Dein Kommentar:';
$GLOBALS['TL_LANG']['MSC']['com_submit'] = 'Kommentar abschicken';
Bei mehrsprachigen Websites sollten die Labels aller verwendeten Sprachen angepasst werden, englisch z.B. in /contao/languages/en/default.php usw.
Contao rendert das Namensfeld dennoch als Pflichtfeld im Frontend:
HTML-Code:
<label for="ctrl_name_1" class="mandatory">
<span class="invisible">Pflichtfeld </span>Dein Name oder Pseudonym (Angabe freiwillig):<span class="mandatory">*</span>
</label>
Hier sollte man nun überlegen, ob man die von Contao erzeugten < span > Elemente per CSS mit display:none; ausblenden möchte oder nicht. Es sind weiterhin Pflichtfelder, daher sollte eigentlich weiterhin darauf hingewiesen werden. Das widerspricht aber dem Hinweis „Angabe freiwillig“.
Man könnte im Labeltext oder unter/über den Formularfeldern auch darauf hinweisen, dass der Nutzer „Anonym“ in das Namensfeld eintragen soll, wenn er seinen Namen nicht angeben möchte. Dadurch wird der Labeltext oder das Kommentarformular aber eventuell unnötig lang...
Option 3: Mit „Anonym“ vorausgefülltes Namensfeld (durch den Nutzer änderbar)
Eine Anpassung der Kommentar-Formularfelder per Data Container Array (DCA) in /contao/dca/tl_comments.php funktioniert leider nicht, weil die Felder, die im Frontend gerendert werden, innerhalb der Kommentarklasse fix definiert sind. Für das Namensfeld kann auf diese Weise kein Standardwert (default value) festgelegt werden.
Der Beitrag "Kommentar Formular mit Platzhaltern und CSS-Klassen ausstatten" brachte mich aber auf die Idee, auf ähnliche Weise den Standardwert des Namensfeldes im Formulartemplate anzupassen.
PHP-Code:
<!-- templates/mod_comment_form.html5 -->
[...]
<?php
echo '<input type="hidden" name="email" value="comment@example.com">';
// If the name field is empty, prefill it with the value "Anonym"
if ( empty($this->fields['name']->value) ) {
$this->fields['name']->value = 'Anonym';
}
// Render the fields
foreach ( $this->fields as $field ) {
// Do not render the default fields 'email' and 'notify':
if ( !in_array($field->name, array('email', 'notify')) ) {
echo $field->parse();
}
}
?>
[...]
Falls die Website mehrsprachig ist, können sprachabhängig unterschiedliche Begriffe verwendet werden, z.B.:
PHP-Code:
<!-- templates/mod_comment_form.html5 -->
[...]
<?php
echo '<input type="hidden" name="email" value="comment@example.com">';
// Language of the current page
$com_locale = \Contao\System::getContainer()->get('request_stack')->getCurrentRequest()->getLocale();
// If the name field is empty, prefill it with the value "Anonym"
if ( empty($this->fields['name']->value) ) {
if ( $com_locale == 'de' ) {
$this->fields['name']->value = 'Anonym';
} else {
$this->fields['name']->value = 'Anonymous';
}
}
// Render the fields
foreach ( $this->fields as $field ) {
// Do not render the default fields 'email' and 'notify':
if ( !in_array($field->name, array('email', 'notify')) ) {
echo $field->parse();
}
}
?>
[...]
Dadurch ist das Namenfeld mit „Anonym“ vorausgefüllt und der Verfasser des Kommentars kann selbst entscheiden, ob er es ändern möchte oder nicht...
Reihenfolge ändern: Erst das Kommentarfeld, dann das Namensfeld
Ergänzend zum vorherigen Beispiel noch ein Trick, wie die Reihenfolge der Formularfelder im Kommentartemplate geändert werden kann: Dazu beispielsweise das Kommentarfeld zuerst rendern und dieses Feld dafür bei der foreach-Schleife für die restlichen Felder ausschließen:
PHP-Code:
<!-- templates/mod_comment_form.html5 -->
[...]
<?php
echo '<input type="hidden" name="email" value="comment@example.com">';
// Render the 'comment' field first
echo $this->fields['comment']->parse();
// Language of the current page
$com_locale = \Contao\System::getContainer()->get('request_stack')->getCurrentRequest()->getLocale();
// If the name field is empty, prefill it with the value "Anonym"
if ( empty($this->fields['name']->value) ) {
if ( $com_locale == 'de' ) {
$this->fields['name']->value = 'Anonym';
} else {
$this->fields['name']->value = 'Anonymous';
}
}
// Render other fields
foreach ( $this->fields as $field ) {
// Do not render the default fields 'email', 'notify' and 'comment':
if ( !in_array($field->name, array('email', 'notify', 'comment')) ) {
echo $field->parse();
}
}
?>
[...]