Zum Inhalt springen

sr_feuser_register zusätzliches feld (gruppen-code für automatische gruppenzuweisung) -> hooks

Erstellt am 12. August 2012 · 1 Antwort · letzte Antwort am 13. August 2012

Tags: Frage

Longnose ·

Hi Champs

Versuche einen Hook für sr_feuser_register zu schrieben, stehe aber grundlegend an einigen Punkten an.

I) IDEE DES HOOKS
Admins können FE_GROUPS erstellen und bei jeder Gruppe einen beliebigen Code hinterlegen (eine art referenzcode). Der Code soll bei der User-Registration wie folgt zum Zuge kommen: die FE_GROUPS sind Arbeitsgruppen. Der Arbeitsgruppen-Manager kann seinen Teilnehmern einen Code aushändigen. Wenn sich die Teilnehmer nun registrieren, können Sie den Code eingeben und werden automatisch der Arbeitsgruppe des jeweiligen Arbeitsgruppen-Managers zugeordnet. Der Code muss und soll nicht beim User gespeichert werden.

II) INSTALLATION / KONFIGURATION
Versionen und Einstellungen
TYPO3: Ver. 4.7.0
EXTENSIONS: sr_feuser_register (Ver. 3.0.1), fe_groups_fields (Ver. 0.0.0 - eigenentwicklung)

fe_groups_fields ist Dreh- und Angelpunkt für die Integration des Hooks:

typo3conf/ext/fe_groups_fields/ext_localconf.php:

<?php

if (!defined ('TYPO3_MODE')) {
     die ('Access denied.');
}
$TYPO3_CONF_VARS['EXTCONF']['sr_feuser_register']['tx_srfeuserregister_pi1']['confirmRegistrationClass'][] = 'EXT:fe_groups_fields/hooks/class.registrationHooks.php:®istrationHooks';

$TYPO3_CONF_VARS['EXTCONF']['sr_feuser_register']['tx_srfeuserregister_pi1']['addGlobalMarkers'][] = 'EXT:fe_groups_fields/hooks/class.registrationHooks.php:®istrationHooks';

if (TYPO3_MODE=='FE'){
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['sr_feuser_register']['extendingTCA'][] = 'dtnewmarker';
}
?>

typo3conf/ext/fe_groups_fields/hooks/class.registrationHooks.php

<?php

class registrationHooks {
    public function registrationProcess_beforeConfirmCreate(&$recordArray, &$controlDataObj) {
 		echo '<h1>registrationProcess_beforeConfirmCreate</h1>';
		
		var_dump($recordArray);
    }
 
    public function registrationProcess_afterSaveEdit($recordArray, &$invokingObj) {
		echo '<h1>registrationProcess_afterSaveEdit</h1>';
		var_dump($recordArray);
    }
 
    public function registrationProcess_beforeSaveDelete($recordArray, &$invokingObj) {
		echo '<h1>registrationProcess_beforeSaveDelete</h1>';
		var_dump($recordArray);
    }
 
    public function registrationProcess_afterSaveCreate($recordArray, &$invokingObj) {
 		echo '<h1>registrationProcess_afterSaveCreate</h1>';
		var_dump($recordArray);
    }
 
    public function confirmRegistrationClass_preProcess(&$recordArray, &$invokingObj) {
		echo '<h1>confirmRegistrationClass_preProcess</h1>';
		var_dump($recordArray);
    }
 
    public function confirmRegistrationClass_postProcess($recordArray, &$invokingObj) {
		echo '<h1>confirmRegistrationClass_postProcess</h1>';
		var_dump($recordArray);
    }
 
    public function addGlobalMarkers(&$markerArray, &$invokingObj)    {
		echo '<h1>addGlobalMarkers</h1>';
		Tx_Extbase_Utility_Debugger::var_dump($recordArray, 'FrontendUserGroup controller createAction - newFrontendUserGroup', 25);
		var_dump($recordArray);
		
    }
}
?>

III) PROBLEME

a) HOOKS reagieren nicht.
Problem 1: Ich erkenne trotz löschen aller Caches keinen Output.
Schreibe ich jedoch direkt in die Datei "sr_feuser_register/hooks/class.tx_srfeuserregister_hooksHandler" in den entsprechenden Hook, so erhalte ich die gewünschten ausgaben.

b) Eigene Felder ohne DB?
Problem 2: Ich habe bislang nirgends was gefunden, wie ich via Hook einen Marker komplett überschreiben / erstellen kann.

sprich wie ich die Werte hier bearbeiten kann habe ich mittlerweile raus - halt eben via Hook.: Wie aber komme ich an die effektive Ausgabe ran und kann entsprechend eingreifen und z.B. ein Pulldown-Menü erstellen?

<?php
markerArray:

Array
(
    [###FIELD_module_sys_dmail_html###] => 0
    [###FIELD_usergroup###] => [b][u]7[/u][/b]
    [###FIELD_disable###] => 1
    ....
    [###FIELD_by_invitation###] => 0
    [###FIELD_name###] => 
    [###FIELD_image###] => 
)

?>

c) ANREDE SELECT-Menü statt radio
Problem 3: Die Formatierung der Radio-Buttons ist ehrlichgesagt schlecht. (Mehr verwirrend als hilfreich!) Kennt jemand eine Möglichkeit, den Radio-Button zu einem Select-Menü umzuformen?

Danke für eure Hilfe
Aloha

Longnose

Longnose ·

III-b) -> ANTWORT zu eigene Felder ohne DB

Folgendes ist dazu notwendig:

1.) MARKER IM TEMPLATE SETZEN

<!-- ###SUB_INCLUDED_FIELD_myselector### -->
    <dt>
    	<label for="tx-srfeuserregister-pi1-myselector">###LABEL_MYSELECTOR###</label>
    </dt>
    <dd>
        ###TCA_INPUT_myselector###
    </dd>
    <!-- ###SUB_INCLUDED_FIELD_myselector### -->

2.) SETUP DAZU IM TYPOSCRIPT

plugin.tx_srfeuserregister_pi1.extraLabels (
	myselector,
    tooltip_myselector,
    missing_myselector,
    evalErrors_twice_myselector
)

plugin.tx_srfeuserregister_pi1._LOCAL_LANG.default {
    myselector = Liebling auswählen
    tooltip_myselector = Wählen Sie Ihren Liebling
    missing_myselector = missing info
    #evalErrors_twice_myselector = error message...
}

3.) IM HOOK IHR SCRIPT ERGÄNZEN...

<?php
class tx_srfeuserregister_hooksHandler {
public function addGlobalMarkers (&$markerArray, &$invokingObj) {
$sql	= 'SELECT * FROM fe_groups WHERE hidden = 0 AND deleted = 0 AND tx_myvars_grouptype = 3 ORDER BY title';
							
$result	= mysql_query($sql);
if(!mysql_error()){
			
$liebling = '<select name="selectbox">';
    while($row = mysql_fetch_assoc($result)){
        $liebling	.= '<option value="'.$row['uid'].'">'.$row['title'].'</option>';
    }
    $liebling .= '</select>';
    $markerArray['###TCA_INPUT_myselector###'] =  $liebling;
}else{
    echo 'fehler in :'.$sql.' -> '.mysql_error();
}

}
}
?>

1/3 der Anforderungen wurden also gelöst. Nun beim entsprechenden Marker / die zusätzlichen Abfragen ergänzen.

Mit Hilfe des folgenden Tutorials bin ich darauf gekommen:
http://davdenic.tumblr.com/post/7762863249/add-twice-email-to-sr-feuser-register-typo3-extension