Hi zusammen,
ich stehe gerade etwas auf dem Schlauch, und hoffe stark, dass ihr mir helfen könnt. Ich bin wahrlich kein Profi in Sachen PHP, deshalb vermute ich einen offensichtlichen Fehler als Ursache.
Kernpunkt meines Anliegens ist, das Kommentar-Formular um ein zusätzliches Feld zu erweitern. Das Modul soll als eine Art Pinnwand in einem Intranet genutzt werden. Daher brauche ich - für den Start - ein zusätzliches Feld "Betreff". Felder wie "Email" und "Website" werden ausgeblendet bzw. als hidden fields übergeben. Die angemeldeten Mitglieder sollen also "Betreff" und "Nachricht" ausfüllen können, und die Nachricht wird an die Wand geheftet.
Dazu habe ich mir unter contao/dca zunächst einen File "tl_comments.php" anlegt:
PHP-Code:
<?php
$GLOBALS['TL_DCA']['tl_comments']['palettes']['default'] = str_replace
(
'comment',
'cf_subject, comment',
$GLOBALS['TL_DCA']['tl_comments']['palettes']['default']
);
$GLOBALS['TL_DCA']['tl_comments']['fields']['cf_subject'] = array
(
'label' => &$GLOBALS['TL_LANG']['tl_comments']['cf_subject'],
'exclude' => true,
'search' => true,
'inputType' => 'text',
'eval' => array('maxlength'=>64),
'sql' => "varchar(64) NOT NULL default ''"
);
Unter contao/languages/de entsprechend eine default.php:
PHP-Code:
<?php
$GLOBALS['TL_LANG']['tl_comments']['cf_subject'] = [
'Betreff',
'...'
];
Das funktioniert soweit auch alles wunderbar. Die Palette im BE sieht gut aus; alles ist da, wo es sein soll. Allerdings sollen die Angaben ja direkt im FE über das mod_comments-Formular erfasst werden (und dann bei Bedarf im Backend von einem Admin editierbar sein).
Folgendes liegt unter src/CommentsExtended als "CommentsExtended.php":
PHP-Code:
<?php
namespace App\CommentsExtended;
class CommentsExtended extends \Comments
{
protected function renderCommentForm(FrontendTemplate $objTemplate, \stdClass $objConfig, $strSource, $intParent, $varNotifies)
{
$arrFields = array
(
'name' => array
(
'name' => 'name',
'label' => $GLOBALS['TL_LANG']['MSC']['com_name'],
'value' => trim($this->User->firstname . ' ' . $this->User->lastname),
'inputType' => 'text',
'eval' => array('mandatory'=>true, 'maxlength'=>64)
),
'email' => array
(
'name' => 'email',
'label' => $GLOBALS['TL_LANG']['MSC']['com_email'],
'value' => $this->User->email,
'inputType' => 'text',
'eval' => array('rgxp'=>'email', 'mandatory'=>true, 'maxlength'=>255, 'decodeEntities'=>true)
),
'website' => array
(
'name' => 'website',
'label' => $GLOBALS['TL_LANG']['MSC']['com_website'],
'inputType' => 'text',
'eval' => array('rgxp'=>'url', 'maxlength'=>128, 'decodeEntities'=>true)
),
'cf_subject' => array
(
'name' => 'cf_subject',
'label' => &$GLOBALS['TL_LANG']['tl_comments']['cf_subject'],
'inputType' => 'text',
'eval' => array('maxlength' => 64)
)
);
$arrSet = array
(
'tstamp' => $time,
'source' => $strSource,
'parent' => $intParent,
'name' => $arrWidgets['name']->value,
'email' => $arrWidgets['email']->value,
'website' => $strWebsite,
'member' => $intMember,
'comment' => $this->convertLineFeeds($strComment),
'ip' => Environment::get('ip'),
'date' => $time,
'published' => ($objConfig->moderate ? '' : 1),
'cf_subject' => $arrWidgets['cf_subject']->value
);
}
}
Wenn ich den Class Loader aktualisiere, sehe ich in der Console, dass die neue Klasse geladen wird.
Lasse ich mir aber die Variablen im FE ausgeben, kommt das neue Feld nicht an:
PHP-Code:
...
"fields" => array:5 [
"name" => Contao\FormTextField {#670}
"email" => Contao\FormTextField {#648}
"website" => Contao\FormTextField {#656}
"comment" => Contao\FormTextArea {#672}
"notify" => Contao\FormCheckBox {#673}
]
...
Erweitere ich $arrFields direkt in vendor/comments-bundle, stehen die neuen Felder über $this->showTemplateVars() wie gewünscht zur Verfügung.
Irgendwie wird die angepasste renderCommentForm() also ignoriert.
Hat jemand einen Tipp? Ich komme nach zig Ansätzen und ausgiebigem Querlesen echt nicht mehr weiter. Besten Dank vorab!
Lesezeichen