Liebe Community,
eigentlich hatte ich ein Problem und wollte nach Stunden und Tagen gerade die Community fragen, fand aber beim Schreiben noch einen Syntaxfehler im Input-Tag, an dem es wohl (u.A.?) lag, dass etwas nicht funktionierte - so kann es manchmal gehen
Da ich aber bei meiner Recherche wenig zum Thema fand, lasse ich meinen Beitrag mal als Mini-Tutorial hier stehen - evtl. hilft es bald jemanden weiter.
Meine Aufgabe war es, dass Registrierungsformular um ein Checkbox-Feld zu erweitern. Dazu fand ich auch zwei Links, die sich damit befassen:
http://forum.oxid-esales.com/showthread.php?t=9015
Entsprechend der Anleitung fügte ich im Template das Feld hinzu. Datei form/register.tpl:
<form class="js-oxValidate" action="[{ $oViewConf->getSslSelfLink() }]" name="order" method="post">
[...]
<h3 class="blockHead">My Headline</h3>
<ul class="form">[{ include file="form/fieldset/user_myadditionalfields.tpl" }]</ul>
[...]
</form>
Datei form/fieldset/user_myadditionalfields.tpl:
<li>
<label for="awpartner">Partner werden?</label>
<input type="hidden" name="invadr[oxuser__oxawpartner]" value="0" />
<input id="awpartner" type="checkbox" class="checkbox" name="invadr[oxuser__oxawpartner]" value="1" [{if $invadr.oxuser__oxawpartner }]checked[{/if}]>
<span class="inputNote">Ich möchte Partner werden.</span>
</li>
In die DB-Tabelle oxuser erstellte ich entsprechend ein Feld:
OXAWPARTNER tinyint(1) DEFAULT '0' NOT NULL
Beim Registrierungsvorgang wird nun der Wert des Feldes in der Datenbank gespeichert.
(Hier lag mein Problem, wusste mir aber nicht so recht zu helfen, da ich mich im MVC von Oxid und der Klassenhierarchie und Philosophie nicht auskenne - bin neu mit OXID unterwegs. Eine Debug-Ausgabe in den Controllern/Models gelang mir leider nicht (Headers allready sent…). [{ debug }] im Frontend ging auch nicht gut wegen dem Redirect nach der Registrierung. Ohne Redirect erhielt ich eh keinen Debug-Wert für $invadr - egal erstmal…)
Nun sollte es noch so sein, dass die Checkbox auch im Backend auftaucht. Dazu musste ich nur die passende Template-Datei finden und das Formular erweitern (eigentlich so easy wie im Frontend):
Datei admin/tpl/user_main.tpl:
<form name="myedit" id="myedit" action="[{ $oViewConf->getSelfLink() }]" method="post" onSubmit="return chkInsert()">
[...]
<tr>
<td class="edittext" width="90">Partner</td>
<td class="edittext">
<input class="edittext" type="checkbox" name="editval[oxuser__oxawpartner]" value='1' [{if $edit->oxuser__oxawpartner->value == 1}]checked[{/if}] [{ $readonly }]>
</td>
</tr>
Das war es erstmal vom Mini-Tutorial.
Fragen am Rande:
Wo finde ich etwas über das Definieren von Datenbank-Felder und z.B. die Validierung der Felder in Formularen? Woher weiß das Model, welche Properties (aus der DB) es gibt, wo findet das Mapping der DB-Felder auf das Model statt? Wo wird im register-Controller der User erstellt (in der Parent-Class User wohl auch nicht)?
Über Links, die mich dem Thema näher bringen wäre ich dankbar.