Entwickler Version
Bitte testen Sie es immer vor dem Stellen einer Frage auch mit der aktuellen Entwicklerversion.
| Autor | |
| 8-02-11 09:44:14 | sr_feuserregister und eigene hoks |
|
Andreas Deitmer |
Hallo Forum, schlage mich schon seit geraumer zeit mit einem problem herum, dass ich irgendwie nicht gelöst bekomme. Verwende hier die sr-feuserregister in der aktuellen Version. Für ein projekt habe ich nun relativ viele Vorgaben, Benutzereingaben auf Falscheingaben zu prüfen, die dem nutzer direkt bei der eingabe durch Fehlermeldungen angezeigt werden. So soll beispielsweise der vorname aus Buchstaben bestehen und lediglich einen Bindestrich enthalten dürfen und vieles mehr. Habe dafür den Ansatz gehabt, die sr_feuserregister mit eigenen Hooks zu bestücken. Alle meine Hoks prüfen generell wie gewollt. Leider taucht die Fehlermeldung häufig mehrfach hintereinander auf (zwei, vier oder achtmal). Möchte meine Vorgehensweise mal anhand der Vornamensüberprüfung erklären: Im Verzeichnis typo3conf/ext/sr_feuserregister/hooks eine Datei mit dem namen class.tx_srfeuserregister_firstname.php angelegt. Diesen habe ich im ts-setup aufgerufen und auch eine entsprechende fehlermeldung definiert, welche grundsätzlich ja auch angezeigt wird. Dann wird der hook in der ext_localconf.php aufgerufen: $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['sr_feuser_register']['tx_srfeuserregister_pi1']['model'][] = 'EXT:sr_feuser_register/hooks/class.tx_srfeuserregister_firstname.php:&tx_srfeuserregister_firstname'; Ein Blick in die doku der sr_feuserregister ließ mich zweifeln ob der aufruf so stimt. Hier ist von mehreren hoktypen die rede die alle an verschiedenen Stellen aufgerufen werden wobei der noch am passendste typ registrationProcess_beforeConfirmCreate" zu sein scheint: this hook is invoked just BEFORE the front end user record is filled for preview by the user. Wie ich das genau anwende bleibt mir aber leider verschlossen. ein Aufruf wie: $TYPO3_CONF_VARS['EXTCONF']['sr_feuser_register']['tx_srfeuserregister_pi1']['evalvalues'][] = 'EXT:sr_feuser_register/hooks/class.tx_srfeuserregister_firstname.php'; bewirkt nun, dass meine hooks jetzt gar nicht mehr erkant werden. Folgend mein grundgerüst für hooks: class tx_srfeuserregister_firstname { function evalValues($theTable, $dataArray, $origArray, $markContentArray, $cmdKey, $requiredArray, $theField10, $cmdParts, $invokingObj){ // default return value - if an empty string is returned no error is given for this field in class.tx_srfeuserregister_data.php $theField10 = ''; // Reference to the invoking Object $plugin = &$invokingObj; // Get first name $firstname = $dataArray['first_name']; // check if first name is empty if(!empty($firstname)){ // und hier die bedingungen die zu prüfen sind. und die aufgerufenen fehler im ts. } } if (defined('TYPO3_MODE') && $GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/sr_feuser_register/hooks/class.tx_srfeuserregister_firstname.php']) { include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/sr_feuser_register/hooks/class.tx_srfeuserregister_firstname.php']); } Verzeihung für den langen post und vielen dank schon jetzt für alle antworten vg Andi |
| 9-02-11 09:54:41 | Hook für evalValues |
|
Franz Holzinger |
Der Code in sr_feuser_register zur Ermittlung des Hooks ist: $hookClassArray = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$extKey][$prefixId]['model']; Die Aktivierung des Hooks über eine eigene Extension müsste dann so erfolgen: $TYPO3_CONF_VARS['EXTCONF']['sr_feuser_register']['tx_srfeuserregister_pi1']['model'][] = 'EXT:eigene_extension/hooks/class.tx_srfeuserregister_firstname.php'; In dieser Datei gibt es dann die Funktion function evalValues($theTable, $dataArray, $origArray, $markContentArray, $cmdKey, $requiredArray, $theField, $cmdParts, &$pObj){ ... } In PHP 5 genügt ein $pObj hinten und es sollte vorne ein public stehen. |
| 9-02-11 12:30:46 | re: hkis evalvalue |
|
Andreas Deitmer |
Hallo, vielen dank zunächst für die antwort. Als etwas unerfahren in diesem gebiet habe ich aber noch ein zwei fragen: $hookClassArray = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$extKey][$prefixId]['model']; dieser code kommt in die ext_localconf.php? Zitat: Die Aktivierung des Hooks über eine eigene Extension müsste dann so erfolgen: $TYPO3_CONF_VARS['EXTCONF']['sr_feuser_register']['tx_srfeuserregister_pi1']['model'][] = 'EXT:eigene_extension/hooks/class.tx_srfeuserregister_firstname.php'; habe bisher die hooks in die sr_feuserregister gespeichert. In welchen fällen braucht es dazu denn eine eigene extension? Zitat: In PHP 5 genügt ein $pObj hinten habe diess synchron zum $envokingopbj aus meinem beispiel erzeugt: function evalValues($theTable, $dataArray, $origArray, $markContentArray, $cmdKey, $requiredArray, $theField10, $cmdParts, &$pObj){ ){ // default return value - if an empty string is returned no error is given for this field in class.tx_srfeuserregister_data.php $theField10 = ''; // Reference to the invoking Object $plugin = &$cObj; // und ab hier meine bedingungen ist das so richtig? Vielen dank noch mal und viele Grüße Andi |
| 9-02-11 12:58:46 | eigene Extension |
|
Franz Holzinger |
Jede Code Erweiterung zu sr_feuser_register sollte unbedingt in eine eigene Extension erfolgen, damit der Code bei eine Update nicht überschrieben wird. Und außerdem gibt es genau deshalb die Hooks, damit sr_feuser_register über mehrere verschiedene Extensions gleichzeitig erweitert werden kann. Der Code scheint zu stimmen und ist für PHP4 geschrieben. Eigentlich wäre es an der Zeit, immer PHP5 zu verwenden. Dann wird der Referenz Operator '&' beim Objekt nicht mehr benötigt, weil ein Objekt automatisch als Referenz auf ein Objekt behandelt wird. |
| 10-02-11 09:56:35 | Hooks für evalvalue geht leider immer noch nicht |
|
Andreas Deitmer |
Hallo, Habe nun in der ext_localconf.php versucht, den hookk zum ermitteln und die folgende Code-zeile hinzugefügt: $GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$extKey][$prefixId]['model']; auch in der class.tx_srfeuserregister_data.php ist die Zeile: $hookClassArray = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$extKey][$prefixId]['model']; Ansonsten habe ich wie oben empfohlen die Änderungen durchgeführt. Leider erscheinen meine Fehlermeldungen der Hooks immer noch doppelt und teilweise vierfach. Evtk bicg henabd eube Udeewirab es gajeb jllbbte? Vielen Dank und viele Grüße Andi |
| 10-02-11 10:21:41 | Änderungen an sr_feuser_register |
|
Franz Holzinger |
Zur Aktivierung eines Hooks von sr_feuser_register dürfen keine Änderungen am PHP Code von sr_feuser_register gemacht werden! Die Zeile "$GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$extKey][$prefixId]['model'];" bewirkt gar nichts. Ich habe das vorhin bereits beschrieben, wie man in dieses Array den Dateinamen der eigenen Extension einfügen muss. |
| 11-03-11 09:47:48 | sr_feuserregister über hoks |
|
Andreas Deitmer |
Hallo, nach längerer zeit komme ich nun wieder dazu mich mit meinem oben genannnten Problem zu beschäftigen und leider will es immer noch nicht so recht klappen. Folgendes habe ich gemacht: - sämtliche Hook-aufrufe aus der ext_localconf.php der sr_feuserregister entfernt - habe eine eigene extension felder_anlegen, die mir ursprünglich zum erweitern der fe_user-tabelle um eigene felder diente. - In dieser befinden sich meine hoks unter typo3conf/ext/felder_anlegen_hooks - in der ext_localconf.php der felder_anlegen rufe ich die hooks in der form auf: $TYPO3_CONF_VARS['EXTCONF']['sr_feuser_register']['tx_srfeuserregister_pi1']['model'][] = 'EXT:felder_anlegen/hoo/class.tx_srfeuserregister_firstname.php'; Sobald ich jedoch diese Zeile eingebe, erhalte ich beim abschicken des Formulars in meiner xampp-testumgebung folgende Fehlermeldung. Fatal error: require_once() [ function.require]: Failed opening required 'C:/xampp/htdocs/demo/EXT' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\demo\t3lib\class.t3lib_div.php on line 5343 Was habe ich hier noch übersehen? Vielen Dank für alle Antworten und viele Grüße Andi |
| 11-03-11 19:39:04 | class.t3lib_div.php |
|
Franz Holzinger |
Was befindet sich in der Datei class.t3lib_div.php in der Zeile 5343? Am besten debuggen (debug - Anweisung einfügen z.B. mit der Extension fh_debug), von wo das aufgerufen wird und welche Variablenwerte dort gesetzt sind. |
| 14-03-11 12:50:24 | debuger ergebnis |
|
Andreas Deitmer |
Hallo, in besagter Zeile 5443 steht folgendes: requireOnce($requireFile) { global $T3_SERVICES, $T3_VAR, $TYPO3_CONF_VARS; require_once ($requireFile); } bzw. nur require_once ($requireFile); Folgendes Ergebnis liefert der debuger wenn ich in das Feld des vornamens etwas eintrage und abschicke: |Object:tslib_feUserAuth Object ( [session_table] => fe_sessions [name] => fe_typo_user [get_name] => ftu [user_table] => fe_users [username_column] => username [userident_column] => password [userid_column] => uid [lastLogin_column] => lastlogin [enablecolumns] => Array ( [deleted] => deleted [disabled] => disable [starttime] => starttime [endtime] => endtime ) [formfield_uname] => user [formfield_uident] => pass [formfield_chalvalue] => challenge [formfield_status] => logintype [formfield_permanent] => permalogin [security_level] => normal [auth_include] => [auth_timeout_field] => 6000 [lifetime] => 0 [sessionDataLifetime:protected] => 86400 [sendNoCacheHeaders] => 0 [getFallBack] => 1 [getMethodEnabled] => 1 [usergroup_column] => usergroup [usergroup_table] => fe_groups [groupData] => Array ( [title] => Array ( ) [uid] => Array ( ) [pid] => Array ( ) ) [TSdataArray] => Array ( [0] => ) [userTS] => Array ( ) [userTSUpdated] => 0 [showHiddenRecords] => 0 [sesData] => Array ( [feuser] => Array ( [sr_feuser_register] => Array ( [token] => ecf32051373b82509ec272f5876439ec ) ) ) [sesData_change] => 0 [userData_change] => 0 [sessionDataTimestamp:protected] => [global_database] => [gc_time] => 6000 [gc_probability] => 1 [writeStdLog] => [writeAttemptLog] => [hash_length] => 32 [lockIP] => 2 [lockHashKeyWords] => useragent [warningEmail] => [warningPeriod] => 3600 [warningMax] => 3 [checkPid] => 1 [checkPid_value] => 0 [id] => f4c2930cca8442e44d9ab5e46a5d309f [cookieId] => f4c2930cca8442e44d9ab5e46a5d309f [loginFailure] => [loginSessionStarted] => [get_URL_ID] => [newSessionID] => [forceSetCookie] => [dontSetCookie] => [challengeStoredInCookie] => [loginType] => FE [svConfig] => [writeDevLog] => [is_permanent] => 1 [user] => ) | Fatal error: require_once() [ function.require]: Failed opening required 'C:/xampp/htdocs/demo/EXT' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\demo\t3lib\class.t3lib_div.php on line 5343 Viele Grüße und danke für die Hilfe Andi |
| 6-06-11 07:46:59 | $requireFile |
|
Franz Holzinger |
Die Variable '$requireFile' sollte debuggt werden. Was steht da drin? Auch der Aufrufpfad wäre interessant. |
| 30-03-12 10:59:31 | mal wieder evalvaluehooks |
|
Andreas Deitmer |
Hallo, nach langem versuche ich mich mal wieder an den Hooks für evalvalues. Für die Validierung der Registrierungseingaben wurde ein entsprechender Hook implementiert: class tx_srfeuserregister_evalvalues { function evalValues($theTable, $dataArray, $origArray, $markContentArray, $cmdKey, $requiredArray, $theField, $cmdParts, $pObj) { echo "evalValues<br />"; echo "gettype($pObj)<br />"; ... $pObj->inError[$theField] = TRUE; $pObj->failureMsg[$theField][] = $pObj->getFailureText($theField, $theRule, $label); ... } } Der Hook wird erfolgreich aufgerufen (erste Testausgabe). Allerdings ist $pObj angeblich ein boolean (zweite Testausgabe). Laut Beispielen sollen allerdings die darauf folgenden Methodenaufrufe im Falle einer fehlerhaften Benutzereingabe möglich sein, was darauf schließen lässt, dass $pObj eigentlich vom Typ tx_srfeuserregister_data sein sollte. Woran kann dieser Fehler (boolean statt tx_srfeuserregister_data) liegen? |
| < Zurück zum Forum | |