Hallo zusammen,
ich bin gerade erst dabei, mich in die Extension Entwicklung mit Extbase und Fluid einzuarbeiten, dabei bastel ich gerade testweise an einer Simplen Frontend-Benutzerregistrierung herum. Die Registrierung eines Benutzers selbst krieg ich schon ganz gut hin.
Nun möchte ich allerdings das Registrierungsformular um einige Felder erweitern. Diese Felder sollen beim Anlegen des Benutzers nicht in die Datenbank gespeichert, sondern lediglich per E-Mail verschickt werden. Dabei stehe ich allerdings vor einem Problem:
Zwar könnte ich alle gewünschten Zusatzvariablen manuell in mein Model eintragen und für diese Variablen im Template dann eine entsprechende Textbox oder sonstige Fom-Viewhelper generieren lassen, allerdings halte ich das für recht mühselig, insbesondere weil sich diese Variablen je nach Anwendungsfall ändern können und sollen.
Der Optimalfall wäre also, wenn ich über das Fluid-Template festlegen könnte, welche und wieviele zusätzliche Felder abgefragt werden sollen. Diese Werte müssen dann in irgendeiner Weise mit dem User-Object gemeinsam zurück- bzw weitergegeben werden. Leider habe ich im Moment keine Ahnung, wie sich das anstellen ließe.
Wenn ich im Model eine leere Array-Variable test erstelle und dann versuche, im Fluid-Template das Array mit property="test.abonummer" dynamisch zu befüllen, schmeißt mir Extbase jede Menge Fehler.
Hat also jemand eine Idee wie ich das bewerkstelligen könnte?
Vielen Dank und Grüße
Was ist denn Dein User-Ausgangsmodell? Am einfachsten ist diese Variante:
Class Tx_Meineext_Domain_Model_User extends Tx_Extbase_Domain_Model_FrontendUser
{
}
Die leere Klasse reicht schonmal, innerhalb dieses Models stehen die alle Eigenschaften des fe_users zur Verfügung. Da Fluid ein intaktes Model benötigt würde ich an Deiner stelle nun hingehen und in dieses Model alle Attribute eintragen die Du benötigst. Wenn Fluid sein rendering macht und Du beispielsweise auf test.attribut zugreifen will, sollte das Attribut im Model gesetzt sein und auch ein Getter für dieses Attribut sollte vorhanden sein. Wenn Du die Daten nicht in der DB benötigst brauchst Du die Attribute auch nicht in Deiner TCA/sql führen.
Gruß Manfred
Hallo Manfred,
danke für deine Antwort. Naja, dass ich vom FrontendUser Model erben kann weiß ich, aber das löst leider nicht meine Probleme. Ich möchte ja über das Template steuern können, welche und wieviele Attribute (außerhalb der Standard-Attribute des Models) zwar im Formular abgefragt werden, aber nicht in der Datenbank gespeichert sondern einfach per Mail verschickt werden.
Die Attribute / Input-Felder sollen wirklich erst über das Template definiert werden, das können ja je nach Formular Bankdaten wie Kontonummer und Bankleitzahl oder Vereinszugehörigkeiten oder meinetwegen der Name des Haustiers sein. Das heißt sie können sowohl in der Art als auch in der Anzahl je nach Formular stark variieren. Ich kann ja nicht das User-Model manuell um alle denkbaren und undenkbaren Attribute erweitern um alle Eventualitäten auszuschließen.
Da muss es doch irgendeine Lösung geben...? Kann man die Attribute vielleicht über Typoscript gegenüber der Extension registrieren oder so was ähnliches?
Viele Grüße
Wenn Du die Daten im User-Objekt mitgeliefert bekommen willst (egal ob sie gespeichert werden sollen oder nicht), musst Du sie auch in der Model-Klasse registrieren. Also so wie BlackPixel es auch schon geschrieben hat.
Ansonsten darfst Du das Formular nicht an das User-Objekt binden. Dann musst Du aber auch nach dem Submit Dein zu speicherndes User-Objekt selber zusammenbauen (in der Action)...
kainobi schrieb
Wenn Du die Daten im User-Objekt mitgeliefert bekommen willst (egal ob sie gespeichert werden sollen oder nicht), musst Du sie auch in der Model-Klasse registrieren. Also so wie BlackPixel es auch schon geschrieben hat.
Ansonsten darfst Du das Formular nicht an das User-Objekt binden. Dann musst Du aber auch nach dem Submit Dein zu speicherndes User-Objekt selber zusammenbauen (in der Action)...
Hallo kainobi,
okay, soweit versteh ich das, ich muss mein Formular also als allgemeines Formular anlegen, das einfach irgendwelche Daten zurückgibt und erst beim Annehmen der Daten diese trennen und mit der einen Hälfte manuell den Benutzer anlegen und die anderen dann per Mail verschicken. Soweit so gut. Aber wie sage ich meinem Fluid Formular bzw meiner Submit-Action dass hier ein Array ohne ein Model im Hintergrund übergeben werden soll?
Grüße
mad_eye
Ich muss das Thema hier noch einmal pushen.
Die Frage, die ich mir nach wie vor stelle ist, wie gebe ich Formular-Werte an eine Action weiter, ohne das Formular an ein Model zu binden? Geht das? Wenn ja, wie? Ich habe es bislang nicht hinbekommen.
Wäre toll wenn das irgendwer beantworten kann... ^^
Hi,
im Prinzip müsste das so gehen:
Die Controller-Methode, welche das Formular darstellt:
<?php
/**
* @param array $formValues
* @dontvalidate $formValues
*
* return string
*/
public function showFormAction($formValues=array()) {
$this->view->assign('formValues', $formValues);
}
?>
Folgende Controller-Methode wird beim Abschicken des Formulars aufgerufen. Hier kommen also die Daten aus dem Formular zur Weiterverarbeitung an:
<?php
/**
* @param array $formValues
*
* return string
*/
public function submitFormAction($formValues) {
// do something...
// debugging form data
t3lib_div::debug($formValues, 'Empfangene Formulardaten');
}
?>
Dein Fluid Template müsste so aussehen:
<f:form action="submitForm" name="formValues" object="{formValues}">
<f:form.textfield name="formValues[subject]" value=""/>
<f:form.submit name="submit" value="Send"/>
</f:form>
(Bin mir grad nicht sicher, ob das object-Attribut im Form-Tag nicht doch überflüssig ist?! Probier es mal mit und mal ohne diesem Attribut.)
Hallo Typo3Cuckoo,
super, es klappt, vielen Dank. 🙂
Grüße