unikatgmbhunikatgmbh MemberComments: 7 Received thanks: 0 Member since: May 2019 edited July 2019

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.

Answers

  • R4MR4M MemberComments: 2544 Received thanks: 401 edited July 2019 Member since: April 2014

    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'}
      <div class="form{$id}">
      {$smarty.block.parent}
      </div>
    {/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'}
      <div class="form{$id}">
      {$smarty.block.parent}
      </div>
    
      <script type="text/javascript">
      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}';
      </script>
    
    {/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!

     

  • kulanikulani MemberComments: 4 Received thanks: 0 Member since: June 2019

    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 ?

     

  • Moritz NaczenskiMoritz Naczenski AdministratorsComments: 9315 Received thanks: 2790 Member since: September 2013

    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! 

  • ShyimShyim MemberComments: 1181 Received thanks: 481 edited July 2019 Member since: May 2015

    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

  • unikatgmbhunikatgmbh MemberComments: 7 Received thanks: 0 Member since: May 2019

    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?

  • siebenundsiebzigsiebenundsiebzig MemberComments: 3 Received thanks: 0 Member since: June 2017

    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?

  • designhuettedesignhuette MemberComments: 8 Received thanks: 0 Member since: April 2014

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

Sign In or Register to comment.