Franz Holzinger

Verse of the day

Denn so du mit deinem Munde bekennst Jesum, daß er der HERR sei, und glaubst in deinem Herzen, daß ihn Gott von den Toten auferweckt hat, so wirst du selig. Denn so man von Herzen glaubt, so wird man gerecht; und so man mit dem Munde bekennt, so wird man selig.
Roemer 10:9-10

© Bible Gateway's Verse of the Day


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