Kontaktformular mit Daten aus Profil befüllen

Hier gilt es mehrere Hürden zu überwinden.

Zum einem muss das jeweilige Formular genau bestimmt werden, damit man auf die einzelnen Felder zugreifen kann. Leider hat es Shopware bis heute nicht geschafft, die Formulare mit einer ID oder CSS Klasse zu versehen. Das ist wichtig, weil es ja auch andere Formulare gibt und alle benutzen die selben Templates. Ich persönlich habe mich damit beholfen in meinen eigenen Theme eine Template einzupflegen:

/MeinTheme/frontend/forms/index.tpl

{extends file="parent:frontend/forms/index.tpl"}

{block name='frontend_forms_index_form_elements'}
  
  {$smarty.block.parent}
  
{/block}

Damit wird um das Formular ein DIV plaziert mit der ID des Formulares. Damit kann ich jedes Formular gezielt ansprechen. Vielleicht gibt es ja auch eine andere Möglichkeit, aber mir reicht es vollkommen aus.

Jetzt kommt der schwierige Teil:

Wenn der Benutzer eingeloggt ist stehen die Daten in Session - Beispiel {$smarty.session.Shopware.userInfo.firstname}

Diese müssen jetzt irgendwie den Feldern übergeben werden. Meine Idee hierzu das über JavaScript zu machen, denn direkt im Template geht das nicht, weil die Inhalte sehr dynamisch sind. Vielleicht könnte man das oben angelwegte Template erweitern:

{extends file="parent:frontend/forms/index.tpl"}

{block name='frontend_forms_index_form_elements'}
  
  {$smarty.block.parent}
  

  
  var form_gender = '{$smarty.session.Shopware.userInfo.salutation}';
  var form_firstname = '{$smarty.session.Shopware.userInfo.firstname}';
  var form_lastname = '{$smarty.session.Shopware.userInfo.lastname}';
  var form_mail = '{$smarty.session.Shopware.userInfo.email}';
  

{/block}

Nun im eigenen Theme die Variablen übergeben. Das Kontaktformular hat in der Regel die ID5. Damit im eigenen Theme eine JS-Datei anlegen und die Daten übermitteln:

/* Kontakformular ID5 */
if ( form_gender == 'mr' ) { $('.form5 #anrede').val('Herr'); }
if ( form_gender == 'ms' ) { $('.form5 #anrede').val('Frau'); } 
$('.form5 #vorname').val( form_firstname );
$('.form5 #nachname').val( form_lastname );
$('.form5 #email').val( form_mail );

 

Das ist jetzt nur eine Idee, keine komplette und ausgereifte Lösung!