Kontaktformular mit Daten aus Profil befüllen

Hallo,
wie kann ich im eingeloggten Zustand, beim Kontaktformular die Felder Name, E-Mail, Telefon etc. automatisch mit den Daten aus dem Profil befüllen?
Gibt es hierfür eine Variable die ich in den Formularen verwenden kann?

Macht ja eigentlich keinen Sinn, dass der Kunde die Daten nochmal eingeben muss. Eingeloggt, weiß der Shop ja, wer es ist.

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!

 

Guys i need i have been trying to edit my LESS theme but when i change the class nothing really happens even when i have cleared the cache on the backend , please can you help me with that ?

 

@kulani schrieb:

Guys i need i have been trying to edit my LESS theme but when i change the class nothing really happens even when i have cleared the cache on the backend , please can you help me with that ?

 

 Create a new thread for your question. This has nothing to do with this topic! 

Bitte benutz den oberen Code nicht 1:1 in Production. Sobald ein Kunde eingeloggt ist und bei leeren Http Cache die Seite aufruft werden seine Daten mitgecacht. Somit sieht jeder anderer Kunde seine Daten im Formular.
Am besten stellst du sicher, dass das Kontaktformular nicht gecacht wird dann

@Shyim schrieb:

Bitte benutz den oberen Code nicht 1:1 in Production. Sobald ein Kunde eingeloggt ist und bei leeren Http Cache die Seite aufruft werden seine Daten mitgecacht. Somit sieht jeder anderer Kunde seine Daten im Formular.
Am besten stellst du sicher, dass das Kontaktformular nicht gecacht wird dann

Da der Shop generell erst nach dem Login angezeigt wird, kann ich das ausfüllen der Felder bei jedem Formular machen. Ich habe das mal getestet und die beiden Controller
Forms und Newsletter aus dem Cache rausgenommen.

Cache/Performance -> Cache -> HTTP Cache
und dort habe ich den Controller frontend/forms und frontend/newsletter aus dem Cache rausgenommen. Als Tag jeweils index.

Ist das richtig?

Ich finde es auch superpeinlich dass der Kunde nochmals seine Daten eintippen muss, auch wenn der Browser evtl. die meisten Arbeit übernimmt (funktioniert leider auch nicht immer 100% genau). Gibt’s hier echt keine gescheite Lösung, damit man nicht extra programmieren muss?

@unikatgmbh schrieb:

@Shyim schrieb:

Bitte benutz den oberen Code nicht 1:1 in Production. Sobald ein Kunde eingeloggt ist und bei leeren Http Cache die Seite aufruft werden seine Daten mitgecacht. Somit sieht jeder anderer Kunde seine Daten im Formular.
Am besten stellst du sicher, dass das Kontaktformular nicht gecacht wird dann

Da der Shop generell erst nach dem Login angezeigt wird, kann ich das ausfüllen der Felder bei jedem Formular machen. Ich habe das mal getestet und die beiden Controller
Forms und Newsletter aus dem Cache rausgenommen.

Cache/Performance -> Cache -> HTTP Cache
und dort habe ich den Controller frontend/forms und frontend/newsletter aus dem Cache rausgenommen. Als Tag jeweils index.

Ist das richtig?

Hat das bei dir zum Erfolg geführt, oder hast du eine bessere Lösung? Ich hab das selbe Problem…