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:
    2.884
    Danke erhalten:
    617
    Danke vergeben:
    113
    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.656
    Danke erhalten:
    1.261
    Danke vergeben:
    300
    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.656
    Danke erhalten:
    1.261
    Danke vergeben:
    300
    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...