Zitat von
wsa
Servus Tim G,
vielen Dank für deinen Input. Habe deinen Code übernommen und erhalte nach wie vor denselben
Allerdings muss ich gestehen, dass ich nicht sicher bin, ob ich dich richtig verstanden habe.
Frage 1: Muss ich den Hook-Code direkt in die Form.php einbauen? Und - falls ja - wie updatesicher ist das Ganze dann?
Frage 2: wohin muss dann der Code?
Code:
$GLOBALS['TL_HOOKS']['storeFormData'][] = array('EfgCallbacks', 'storeFormData_mdb');
In die localconfig.php? Oder in die dcaconfig.php?
Frage 3: Kannst du bitte enäher erläutern, was
bedeutet? Da verstehe ich nämlich nur Bahnhof.
Vielen Dank im Voraus!
GLG wsa
Hallo wsa,
ziemlich verwirrende Mischung hier ;-/
Um die Daten in eine Catalog-Tabelle zu speichern, hilft Dir EFG (bzw. dessen Hook) nicht wirklich weiter.
Einfacher ist dies mit der Standard-Option "Eingaben speichern", die Du ganz offensichtlich auch nutzt.
Da Dein ganzes Procedere eigentlich mit EFG nichts zu tun hat, würde ich auch die Dateien/Klassen/Methoden nicht mit "EFG" benennen.
Zu Frage 1)
Deinen "Hook-Code" musst Du in einer Klasse speichern. Der Parse-Error kommt daher, dass in Deiner Datei "/system/modules/EfgCallbacks/EfgCallbacks.php" keine Klasse definiert wird.
Weitere Fehler in Deiner Funktion:
Du darfst nicht $arrForm verändern und zurückgeben (das wäre das Formular-Objekt), sondern das geänderte Array $arrData
Statt:
PHP-Code:
<?php
// unserialze Arrays repertoire and medien (from EFG-Format to Catalog-Format)
public function storeFormData_mdb($arrData,$arrForm)
{
echo '<p>Catalogdaten werden bearbeitet</p>';
echo '<p>'.$arrForm['repertoire'].'<br /><br />';
$arrForm['repertoire'] = unserialze($arrForm['repertoire']);
echo $arrForm['medien'].'/p>';
$arrForm['medien'] = unserialze($arrForm['medien']);
return $arrForm;
}
?>
wäre korrekt (Umbenennung noch nicht berücksichtigt):
PHP-Code:
<?php
class EfgCallbacks extends Backend
{
// unserialze Arrays repertoire and medien (from Form-/POST-Format to Catalog-Format)
public function storeFormData_mdb($arrData, $objForm)
{
$arrData['repertoire'] = implode(',', deserialze($arrData['repertoire'], true)); // ohne implode hättest Du ein Array statt einer kommaseparierten Liste
$arrData['medien'] = deserialze($arrData['medien']); // auch hier ggf. per implode in kommasep. Liste wandeln
return $arrData;
}
}
?>
Zu Frage 2)
Niemals in die Datei localconfig.
Entweder in die dcaconfig.php oder in eine config.php im Modulverzeichnis, in Deinem Fall also (vor vernünftiger Umbenennung):
system/modules/config/config.php
Zu Frage 3)
Damit meint Tim:
Gesetzt den Fall, eine andere Erweiterung hätte bereits unter demselben Schlüssel einen callback registriert, z.B.
PHP-Code:
$GLOBALS['TL_HOOKS']['storeFormData']['callback_01'] = array('TimsCallbacksKlasse', 'timsTutIrgendwasMethode');
würde Deine Zeile
PHP-Code:
$GLOBALS['TL_HOOKS']['storeFormData']['callback_01'] = array('EfgCallbacks', 'storeFormData_mdb');
Tim's Eintrag überschreiben oder aber Dein Eintrag würde von Tim's überschrieben (falls Tim's Modulverzeichnis nach Deinem folgt)
Daher schlägt Tim vor, per
PHP-Code:
$GLOBALS['TL_HOOKS']['storeFormData'][] = array('EfgCallbacks', 'storeFormData_mdb');
einfach zu "pushen". Soll heißen Deinen Eintrag an das bestehende Array als weiteren Eintrag anzuhängen.
@Tim: im EFG-Beispiel befindet sich der Eintrag allerdings in der dcaconfig.php, welche u.U. mehrfach geladen wird ...
Schöne Grüße
Tom
Lesezeichen