v4.8.. Neukunde im Backend - CustomerExtender und Ansicht

Thema wurde von MJ, 12. Juli 2023 erstellt.

  1. MJ

    MJ Erfahrener Benutzer

    Registriert seit:
    28. April 2011
    Beiträge:
    544
    Danke erhalten:
    56
    Danke vergeben:
    101
    #1 MJ, 12. Juli 2023
    Zuletzt bearbeitet: 12. Juli 2023
    Guten Tag liebe Gambianer,

    in der neuen Version 4.8 werden neue Kunden im Backend über den Button "+ Kunden erstellen" im Modal angelegt.

    Wie kann ich da per Extender eingreifen, hat sich das geändert?

    Ich habe bisher immer diese Datei benutzt: /GXModules/Name/AdminCustomers/Admin/Overloads/CustomerExtenderComponent/nameCustomerExtender.php

    Mit folgendem Inhalt passiert bei mir genau nichts - mache ich was falsch?
    PHP:
    class name_CustomerExtender extends name_CustomerExtender_parent
    {
        public function 
    proceed()
        {
            
    parent::proceed();
            
    // logic for handling POST data like storing it
            // logic for getting data to prefill fields
            
    $this->addPersonalField('Middle name:''<input type="text" name="middle_name" maxlength="32" />');
            
    $this->addCompanyField('Location:''<input type="text" name="location" maxlength="32" />');
            
    $this->addAddressField('Floor:''<input type="text" name="floor" maxlength="32" />');
            
    $this->addContactField('Mobile number:''<input type="tel" name="mobile_number" />');
            
    $this->addAdditionalField('Reference Code:''<input type="text" name="reference_code" />');
            
    $this->addExtraHtml('<div><p>Some extra HTML</p></div>');
        }
    }
    - Cache wurde selbstverständlich alles gelöscht
    - Der Beispielcode ist unverändert der aus der \system\extender\CustomerExtenderComponent.inc.php

    Vielleicht kann mir jemand helfen. Ich sitze auf dem Schlauch. Vielen Dank.


    -- PS ----------------
    Ich schreibe noch dazu, was ich überhaupt erreichen möchte:

    Beim Erstellen eines Kunden übers Backend muss im Tab 2 (der mit dem E-Mail Input-Feld) ein Javascript ausgeführt werden. In der Nähe das E-Mailfelds muss ich einen Button platzieren, der eine JS-Funktion ausführt. Der kann auch nach Erstellung des Modals injiziert werden.
     
  2. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    1.171
    Danke erhalten:
    1.055
    Danke vergeben:
    366
  3. Anonymous

    Anonymous Administrator
    Mitarbeiter

    Registriert seit:
    26. April 2011
    Beiträge:
    1.757
    Danke erhalten:
    1.370
    Danke vergeben:
    305
    Man kann auf der neuen Kundenübersicht und Profil Seite auch einige Smarty Blöcke benutzt um eigenes JavaScript auszuführen. Dazu kann man den Block
    HTML:
    {block name="below_gambio_dashboard"}{/block}
    in der Datei /GambioAdmin/Modules/Customer/ui/overview.html benutzen.

    Eine eigene Datei im Pfad sollte das möglich machen:
    GXModules/<Vendor>/<Module>/Admin/Html/<AdminModuleName>/ui/<PathToTemplate>/<TemplateName>.html

    Beispiel:
    GXModules/<Vendor>/<Module>/Admin/Html/Customer/ui/overview.html

    (Link nur für registrierte Nutzer sichtbar.)
     
  4. MJ

    MJ Erfahrener Benutzer

    Registriert seit:
    28. April 2011
    Beiträge:
    544
    Danke erhalten:
    56
    Danke vergeben:
    101
    Vielen Dank @Dominik - Das hatte ich bei der Suche nicht gefunden, ist aber genau das Thema.

    Danke @Till (Gambio) - Das klappt so sehr gut. Jedoch benötigen wir auch dynamische Variablen, ganz so wie in den verlinkten Threads von Dominik. Ich schreibe mein Zeug jetzt erst mal direkt in die OverviewAction (VuePageAction), da ich keinen Weg gesehen habe, die aus GXModules zu erweitern.

    Und ich bin jetzt diesbezüglich ebenfalls in freudiger Erwartung auf die v4.9.


    Danke für eure Zeit und liebe Grüße
    MJ
     
  5. Anonymous

    Anonymous Administrator
    Mitarbeiter

    Registriert seit:
    26. April 2011
    Beiträge:
    1.757
    Danke erhalten:
    1.370
    Danke vergeben:
    305
    @MJ Bitte teile uns doch mal ein konkretes Beispiel mit, mit Code wie du es jetzt gelöst hast, damit wir uns das mal ansehen können und schauen ob wir noch irgendwo was möglich machen müssen.
     
  6. MJ

    MJ Erfahrener Benutzer

    Registriert seit:
    28. April 2011
    Beiträge:
    544
    Danke erhalten:
    56
    Danke vergeben:
    101
    @Till (Gambio)

    Als ich mich bedankt hab, hatte ich erstmal nur auf die Schnelle getestet, Javascript ins Template zu bekommen. Das klappt über die Smarty Blöcke {block name="below_gambio_dashboard"} wie von dir vorgeschlagen.

    Wir benötigen nur die Bearbeiter Id (admin_id). Die holen wir uns aus der Session. Bisher hatte ich das alles über den
    CustomerExtender mit addExtraHtml gemacht. Da kann man alles gemütlich mit PHP ermitteln und verpacken.
    Das habe ich nun direkt in die \GambioAdmin\Modules\Customer\App\Actions\Vue\OverviewAction.php public handle() geschrieben.

    PHP:
    // Bearbeiter ID
    $mj_admin_id $_SESSION['customer_id'];
          
            return 
    $response->write($this->render($this->translate('overview_title'self::DOMAIN),
                                                  
    dirname(__DIR__3) . '/ui/overview.html', [ 'customers_per_page' => $customerPerPage 'mj_admin_id' => $mj_admin_id]));
    Ich wollte das testen mit den E-Mails beim Anlegen im Backend. Die E-Mail setzt sich zusammen aus Datum-Zeit-AdminId und ist nur nötig, wenn der Kunde am Telefon keine parat hat (passiert bei uns sehr häufig).
    Mein Plan war, die im Smartyblock mit JS zusammengesetzte E-Mail ins Inputfeld zu schreiben, bereits automatisch mit der generierten Mail vorzubelegen. Wenn der Kunde am Telefon eine Mail angibt, kann die vom Bearbeiter ja überschrieben werden.

    upload_2023-7-17_16-19-44.png

    Also eigentlich ein ganz simples Beispiel. Jetzt später hab ich erst bemerkt, dass die Felder komplett dynamisch generiert und verarbeitet werden, und die E-Mail-Variable nicht bleibt. Ich vermute, das wird mit keydown/up direkt weiterverarbeitet für die Fehlerprüfung. Da muss ich erst mal durchsteigen, wie ihr das verarbeitet.

    Die Frage von dir zielte wohl darauf ab, wo ich was vorbereiten oder erweitern möchte.

    Liebe Grüße
    MJ (Jens)


    PS - nur zur Info: Ich oute mich hier als Autodidakt. Ich arbeite zwar schon seit 25 Jahren mit PHP aber eben nicht studiert, bin also weit weg von eurem Wissensstand und Dominiks oder Walter.
     
  7. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    1.171
    Danke erhalten:
    1.055
    Danke vergeben:
    366
    Nur für die Admin-ID brauchst Du aber eigentlich nichts an der PHP-Datei ändern. Die sollte Dir im Smarty-Template auch so zur Verfügung stehen in

    Code:
    {$smarty.session.customer_id}
    Wie sieht denn Dein Code im below_gambio_dashboard-Block aus?
     
  8. MJ

    MJ Erfahrener Benutzer

    Registriert seit:
    28. April 2011
    Beiträge:
    544
    Danke erhalten:
    56
    Danke vergeben:
    101
    #8 MJ, 17. Juli 2023
    Zuletzt bearbeitet: 13. September 2024
    Hallo Dominik,

    danke (!) für diese Info. Die hätte mir in der Vergangenheit an anderen Stellen viel Zeit erspart. :)
    Dass man diese Variablen im {debug} Fenster nicht sieht, ist vermutlich Absicht?!

    Im Smartyblock habe ich nur einen <script> Block mit click event auf den Erstellen-Button, daraufhin dann einen click event auf den 'Nächstes' Button und dieser füllt mein Feld. (mit jQuery / siehe Screenshot oben).

    Per .val() fülle ich das input-Feld (iMail) .
    Code:
    if (val == "") { iMail.val(email); }
    Wenn ich jetzt jedoch ins Telefonfeld klicke, verschwindet der Eintrag aus E-Mail, was ich wiederum seltsam finde. Das hat mit dem error-check des Formulars zu tun. Ich hatte bisher noch keine Zeit, das ausgiebiger zu testen, steht morgen Vormittag auf dem Plan. Ich hatte es schon versucht mit trigger.blur() oder keydown, keyup oder einem zusätzlichen .attr('value',$wert), aber das war's nicht. Deshalb morgen der Check wie das weiterverarbeitet wird. Ich sollte mir mal die customers.js ansehen.


    Was mich gerade total triggert, ist, dass ich das mit dem $smarty.session nicht kannte. Ich mache vermutlich zu viele Sachen auf einmal. Von mir aus könnte der Tag 36h haben..

    Liebe Grüße
    MJ

    Man lernt nie aus: https://www.smarty.net/docsv2/de/language.variables.smarty.tpl


    ------------------------
    Als Zusatz für Leute, die später auf diesen Thread stoßen. Das Formular wird mit vue.js erstellt. Die Daten per Script zu verändern, ist schwierig, da sie ein Binding mit dem vue dataset haben.