Quantcast
Channel: OXID Community Forum
Viewing all articles
Browse latest Browse all 6951

Registrierungsformular/User-DB Erweitern v4.8.1

$
0
0
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://wiki.oxidforge.org/Tutorials/...o_registration
http://forum.oxid-esales.com/showthread.php?t=9015

Entsprechend der Anleitung fügte ich im Template das Feld hinzu. Datei form/register.tpl:
HTML Code:

<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:
HTML Code:

<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:
PHP Code:

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:
HTML Code:

<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.

Viewing all articles
Browse latest Browse all 6951

Trending Articles