Zum Inhalt springen

sr_feuser_register - eigene checkboxen und radio buttons

Erstellt am 23. Juni 2009 · 7 Antworten · letzte Antwort am 6. Mai 2012

Tags: TCA, Frontend-Benutzer, Frage

Twomaze ·

Hallo,

ich habe ein Problem mit der sr_feuser_register und hoffe Ihr könnt mir helfen.

Ich habe die sr_feuser_register nach dem Tutorial (Manual aus dem TER) installiert und sie funktioniert auch einwandfrei.

Anschließend habe ich sie wie im Tutorial beschrieben um einige Textfelder erweitert. Hier läuft ebenfalls alles.

Nun benötige ich neben den Textfeldern aber auch eine Checkbox und einige Radio Buttons.

Mit der Extension Kickstarter habe ich die Tabelle "fe_users" um die entsprechenden Spalten erweitert. Passiert ist noch nichts. Ich glaube verstanden zu haben, dass man mindestens noch die ext_tables.php erweitern muss. Stimmt das? Und wenn ja, ist das die einzige Datei oder müssen noch andere erweitert werden?

Findet in der ext_tables.php auch die Überprüfung statt? Also wird dort festgelegt ob das Formular in die Vorschau geht oder zurückgewiesen wird? (bzw. kann ich dies dort durch einen Wert festlegen ...).

Es ist sehr wichtig, dass das Formular nur akzeptiert wird, wenn die Checbox aktiviert ist (Pflichtfeld).

Es wäre toll wenn:

- Mir jemand sagen könnte was ich alles verändern muss. Die Checkbox ist erstmal das wichtigste.

- Mir jemand eine genauere Beschreibung liefern kann der Dinge welche ich machen soll. Es soll auch sein Schaden nicht sein. Ich habe leider so gut wie keine Kenntnisse in PHP geschweige denn im detailierten internen Aufbau von TYPO3.

- Wenn jemand, das schon gemacht hat und eventuell einige Minuten opfern könnte. Wäre das natürlich ideal und würde ordentlich entlohnt werden. PN bitte an mich.

Vielen Dank für eure Hilfe
twomaze

Twomaze ·

Bin schon etwas weiter. Habe Kickstarter nochmal ausgeführt und sehe jetzt, dass dort bereits der entsprechende PHP-Code für die ext_tables.php vorgegeben wird. Wenn ich diesen kopiere, habe ich schonmal die radio buttons (checkboxen werde ich gleich ausprobieren).

Als Code kommt folgendes raus:

<?php
if (!defined ('TYPO3_MODE')) {
    die ('Access denied.');
}
$tempColumns = array (
    'tx_formularerweiterung_placeofbirth' => array (        
        'exclude' => 0,        
        'label' => 'LLL:EXT:formularerweiterung/locallang_db.xml:fe_users.tx_formularerweiterung_placeofbirth',        
        'config' => array (
            'type' => 'input',    
            'size' => '30',
        )
    ),
    'tx_formularerweiterung_vertrag' => array (        
        'exclude' => 0,        
        'label' => 'LLL:EXT:formularerweiterung/locallang_db.xml:fe_users.tx_formularerweiterung_vertrag',        
        'config' => array (
            'type' => 'radio',
            'items' => array (
                array('LLL:EXT:formularerweiterung/locallang_db.xml:fe_users.tx_formularerweiterung_vertrag.I.0', '0'),
                array('LLL:EXT:formularerweiterung/locallang_db.xml:fe_users.tx_formularerweiterung_vertrag.I.1', '1'),
            ),
        )
    ),
);


t3lib_div::loadTCA('fe_users');
t3lib_extMgm::addTCAcolumns('fe_users',$tempColumns,1);
t3lib_extMgm::addToAllTCAtypes('fe_users','tx_formularerweiterung_placeofbirth;;;;1-1-1, tx_formularerweiterung_vertrag');
?>

Wovon ich aber nur diesen verwendet habe:

'tx_formularerweiterung_placeofbirth' => array (        
        'exclude' => 0,        
        'label' => 'LLL:EXT:formularerweiterung/locallang_db.xml:fe_users.tx_formularerweiterung_placeofbirth',        
        'config' => array (
            'type' => 'input',    
            'size' => '30',
        )
    ),
    'tx_formularerweiterung_vertrag' => array (        
        'exclude' => 0,        
        'label' => 'LLL:EXT:formularerweiterung/locallang_db.xml:fe_users.tx_formularerweiterung_vertrag',        
        'config' => array (
            'type' => 'radio',
            'items' => array (
                array('LLL:EXT:formularerweiterung/locallang_db.xml:fe_users.tx_formularerweiterung_vertrag.I.0', '0'),
                array('LLL:EXT:formularerweiterung/locallang_db.xml:fe_users.tx_formularerweiterung_vertrag.I.1', '1'),
            ),
        )
    ),

Für

t3lib_div::loadTCA('fe_users');
t3lib_extMgm::addTCAcolumns('fe_users',$tempColumns,1);
t3lib_extMgm::addToAllTCAtypes('fe_users','tx_formularerweiterung_placeofbirth;;;;1-1-1, tx_formularerweiterung_vertrag');

Konnte ich nicht zuordnen :-( ich finde zwar loadTCA, addTCAcolums und addToAllTCAtypes. Aber ich habe die erstmal ignoriert da ich nicht wirklich nachvollziehe was dort geschieht.

Twomaze ·

So, ich habe jetzt die Checkboxen und diese werden auch in die Datenbank geschrieben.

Nun muss ich es aber irgendwie schaffen, dass nicht nur bei leeren Inputfeldern die Ererormessage erscheint (was standardmässig funktioniert).

Sondern die Errormessage muss auch bei nicht angekreuzten Checkboxen erscheinen. (besser gesagt bei einer, aber da es keine anderen gibt spielt das keine rolle)

Ich denke, dass ich die passenden Stelle innerhalb der Extension gefunden habe.

Und zwar unter sr_feuser_register/model/class.tx_srfeuserregister_data

<?php
	/**
	* Gets the error message to be displayed
	*
	* @param string  $theField: the name of the field being validated
	* @param string  $theRule: the name of the validation rule being evaluated
	* @param string  $label: a default error message provided by the invoking function
	* @return string  the error message to be displayed
	*/
	function getFailureText ($theField, $theRule, $label) {
		if ($theRule && isset($this->conf['evalErrors.'][$theField.'.'][$theRule]))	{
			$failureLabel = $this->conf['evalErrors.'][$theField.'.'][$theRule];
		} else {
			$failureLabel='';
			if ($theRule)	{
				$labelname = 'evalErrors_'.$theRule.'_'.$theField;
				$failureLabel = $this->lang->getLL($labelname);
				$failureLabel = $failureLabel ? $failureLabel : $this->lang->getLL('evalErrors_'.$theRule);
			}
			if (!$failureLabel)	{ // this remains only for compatibility reasons
				$labelname = $label;
				$failureLabel = $this->lang->getLL($labelname);
			}
		}
		return $failureLabel;
	}	// getFailureText









/**
	* Applies validation rules specified in TS setup
	*
	* @param array  Array with key/values being marker-strings/substitution values.
	* @return void  on return, the ControlData failure will contain the list of fields which were not ok
	*/
	function evalValues ($theTable, &$dataArray, &$origArray, &$markContentArray, $cmdKey, $requiredArray) {
		global $TYPO3_DB, $TSFE;

		$displayFieldArray = t3lib_div::trimExplode(',', $this->conf[$cmdKey.'.']['fields'], 1);
		if($this->controlData->useCaptcha($cmdKey))	{
			$displayFieldArray[] = 'captcha_response';
		}
		// Check required, set failure if not ok.
		$failureArr = array();

		foreach ($requiredArray as $k => $theField)	{
			if (!trim($dataArray[$theField]) && trim($dataArray[$theField]) != '0') {
				if (isset($dataArray[$theField]))	{
					$failureArr[] = $theField;
					$this->missing[$theField] = TRUE;
				}
			}
		}
		$pid = intval($dataArray['pid']);








?>
Twomaze ·

Hab's durch Suche im Forum gelöst. Einfach mit

plugin.tx_srfeuserregister_pi1.create.evalValues.XXX = required

Im SETUP nicht in den CONSTANTS!

Damit wird die Checkbox überprüft und wenn sie leer ist eine Fehlermeldung ausgegeben.

Twomaze ·

Ich habe noch ein Problem.

Ich habe mit Kickstarter eine Extension erstellt welche die Tabelle fe_users und damit die sr_feuser_register erweitert. Das hinzufügen zum Formular war ebenfalls erfolgreich. Auch die entsprechenden Labels konnte ich erzeugen. Wenn ich jetzt aber bei sr_feuser_register die Preview (Zusammenfassung des Formulars bevor man bestätigt) nach Ausfüllen des Formulars aktiviere passiert etwas komisches.

Bei den Radio und Checkboxen werden die Values der Datenbank aber keine Labels ausgegeben.

Woran kann das liegen?

Der standardmässig mit der sr_feuser_register Extension gelieferte radio Wert "status" wird z.B. mit Labels versehen welche ich auch Verändern kann. Dann wird in der Preview nicht der Value 0 oder 1 gesetzt sondern ein Text angegeben. Bei meinen selbst erstellen radios und checkboxes wird in der Preview immer nur der Value übernommen.

Während

<label index="fe_users.status.I.0">...</label>
<label index="fe_users.status.I.1">...</label>

auch in der Preview angezeigt wird.

Wird
<label index="fe_users.tx_formular_auswahl.I.0">...</label>
<label index="fe_users.tx_formular_auswahl.I.1">...</label>

nur mit seinen Datenbankvalues in der Preview dargestellt.

Ich verstehe das nicht.

Für Hilfe wäre ich sehr dankbar!

jesuspresley ·
Twomaze schrieb
plugin.tx_srfeuserregister_pi1.create.evalValues.XXX = required

Im SETUP nicht in den CONSTANTS!

Danke, Danke, Danke, Danke, Danke, Danke, Danke, Danke, Danke!
Ich hab brutto drei Tage danach gesucht!

Knalltuete ·
Twomaze schrieb

Bei meinen selbst erstellen radios und checkboxes wird in der Preview immer nur der Value übernommen.

Habe gerade auch das Problem. Gibt es hierfür jetzt vielleicht eine Lösung?

jesuspresley ·
Knalltuete schrieb

Habe gerade auch das Problem. Gibt es hierfür jetzt vielleicht eine Lösung?

Weiß nicht - ich würde auch mal im HTML-Template schauen (wie werden die anderen Marker ersetzt?) und ggf. manuell die Beschriftungen ins HTML-Template eingeben. Bei selbsterweiterten Feldern ist sr_feuser_register noch etwas sperrig.