CustomerWriteService bei Registrierung

Thema wurde von javierfrangenheim, 15. Dezember 2017 erstellt.

  1. javierfrangenheim
    Registriert seit:
    7. Juli 2015
    Beiträge:
    16
    Danke erhalten:
    0
    Danke vergeben:
    3
    Hallo.

    Kann mir jemand erklären wie ich Zusatzfelder im CustomerWriteService einbaue?

    Es gibt die Musterdatei CustomerWriteServiceOverload. Da steht allerdings nur drin wie ein debug log geschrieben wird.

    Ich habe mit Overloads in CreateAccountContentControl und CreateAccountContentView jeweils ein neues Feld verbaut.
    Es wird aber leider nichts in der Datenbank gespeichert.
    Muß ich das noch in den CustomerWriteServiceOverload einfügen?
    Oder geht das über die addAddonValues?

    Gruß
     
  2. Developer
    Developer Erfahrener Benutzer
    Registriert seit:
    7. November 2012
    Beiträge:
    3.149
    Danke erhalten:
    718
    Danke vergeben:
    127
    Wie sieht deine Datei aus?
     
  3. javierfrangenheim
    Registriert seit:
    7. Juli 2015
    Beiträge:
    16
    Danke erhalten:
    0
    Danke vergeben:
    3
    /overloads/CreateAccountContentView

    PHP:
    class NEU_CreateAccountContentView extends NEU_CreateAccountContentView_parent
    {
       protected function 
    add_data()
       {
           
    $this->add_zusatzfeld();
           return 
    parent::add_data();
       }
       protected function 
    add_zusatzfeld()
       {  
           
    $this->content_array['form_data']['zusatzfeld'] = array();
           
    $this->content_array['form_data']['zusatzfeld']['name'] = 'zusatzfeld';
           
    $this->content_array['form_data']['zusatzfeld']['value'] = htmlspecialchars_wrapper($this->customer_data_array['zusatzfeld']);
           
    $this->content_array['form_data']['zusatzfeld']['required'] = 0;
       }
    }
    /overloads/CreateAccountContentControl

    PHP:
    class NEU_CreateAccountContentControl extends NEU_CreateAccountContentControl_parent
    {
       protected function 
    get_customers_data()
       {
           
    $this->customer_data_array['zusatzfeld'] = xtc_db_prepare_input($this->v_data_array['POST']['zusatzfeld']);
           return 
    parent::get_customers_data();
       }
       protected function 
    create_customer_sql_data_array()
       {
           
    $this->sql_data_array[TABLE_CUSTOMERS]['zusatzfeld'] = $this->customer_data_array['zusatzfeld'];
           return 
    parent::create_customer_sql_data_array();
       }
    }
    /template/module/create_account-USERMOD.html

    PHP:
    ..........
        <
    fieldset>
           <
    legend>
               
    Überschrift bla bla
           
    </legend>
           <
    div class="form-group">
               <
    label for="{$form_data.zusatzfeld.name}class="control-label col-sm-3">
                   
    Auswahl:
               </
    label>
                       <
    div style="" class="col-sm-9 col-lg-6 input-container">
                           <
    input type="text"
                                  
    placeholder="Eingabe"
                                  
    id="{$form_data.zusatzfeld.name}"
                                  
    name="{$form_data.zusatzfeld.name}"
                                  
    class="form-control" value="{$form_data.zusatzfeld.value}/>
                       </
    div>
           </
    div>      
       </
    fieldset>  
    ..........
     
  4. javierfrangenheim
    Registriert seit:
    7. Juli 2015
    Beiträge:
    16
    Danke erhalten:
    0
    Danke vergeben:
    3
  5. Anonymous
    Anonymous Administrator
    Mitarbeiter
    Registriert seit:
    26. April 2011
    Beiträge:
    1.954
    Danke erhalten:
    1.588
    Danke vergeben:
    340
    HI,

    du musst die Datei GXMainComponents/Extensions/Customers/CustomerInputToCollectionTransformer.inc.php überladen und dort mit der Methode _getCustomerAddonValuesFromInputArray deine eigenen Werte hinzufügen.
    Dazu legst eine neue Datei MyCustomerAddonValues.inc.php im Ordner GXUserComponents/overloads/CustomerInputToCollectionTransformer/ an mit folgendem Inhalt:

    PHP:
    <?php

    class MyCustomerAddonValues extends MyCustomerAddonValues_parent
    {
        protected function 
    _getCustomerAddonValuesFromInputArray(array $inputArray)
        {
            
    $myAddonValues = array('zusatzfeld1'=>$inputArray['zusatzfeld'];
            return 
    MainFactory::create('EditableKeyValueCollection'$myAddonValues);
        }
    }
    Das ersetzt die Datei /overloads/CreateAccountContentControl, die wird nicht mehr benötigt.
     
  6. javierfrangenheim
    Registriert seit:
    7. Juli 2015
    Beiträge:
    16
    Danke erhalten:
    0
    Danke vergeben:
    3
    #6 javierfrangenheim, 5. Januar 2018
    Zuletzt bearbeitet: 5. Januar 2018
    Danke,

    bei ...$inputArray['zusatzfeld']); hat eine schließende Klammer gefehlt.
    zusatzfeld1 hab ich geändert in zusatzfeld

    Aber leider wird nichts in der Datenbank gespeichert...
     
  7. Anonymous
    Anonymous Administrator
    Mitarbeiter
    Registriert seit:
    26. April 2011
    Beiträge:
    1.954
    Danke erhalten:
    1.588
    Danke vergeben:
    340
    Hi,

    die Daten werden automatisch in der Datenbank in der Tabelle "addon_values_storage" gespeichert.
     
  8. javierfrangenheim
    Registriert seit:
    7. Juli 2015
    Beiträge:
    16
    Danke erhalten:
    0
    Danke vergeben:
    3
    Super!
    Stimmt.
    Die container_id entspricht der customers_id...

    Jetzt müsste ich das nur noch in der Kundenübersicht auslesen...