Teil 1 "ClassOverloading" aus der Serie "updatesichere Anpassungen in GX2"

Thema wurde von Nonito (Gambio), 31. Januar 2012 erstellt.

  1. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    Ich LIEBE diese Erweiterung!
     
  2. hf

    hf Mitglied

    Registriert seit:
    1. Juni 2012
    Beiträge:
    22
    Danke erhalten:
    0
    Danke vergeben:
    2
    #62 hf, 19. Dezember 2012
    Zuletzt bearbeitet: 19. Dezember 2012
    Hallo,

    ich wollte eben mal die Beispielerweiterung testen (das hello-world Beispiel). Ich habe den Beispielordner ApplicationBottomExtenderComponent genommen und vom Ordner _samples in den Ordner overloads kopiert. Leider passiert danach überhaupt nix. Was muss man noch machen, damit es funktioniert? In dem _samples Ordner sind ja alle Bezeichungen eigentlich korrekt.

    EDIT: Hat sich erledigt. Man muss im Backend erstmal den Cache löschen.
     
  3. hf

    hf Mitglied

    Registriert seit:
    1. Juni 2012
    Beiträge:
    22
    Danke erhalten:
    0
    Danke vergeben:
    2
    Hallo,

    doch noch eine kurze Frage:
    wenn in der Klasse auch noch eine Javascript Datei benötigt wird, wo wird diese untergebracht? Auch im Overloads Ordner oder eher im usermod-Verzeichnis?
     
  4. Kai Schoelzke

    Kai Schoelzke Beta-Held

    Registriert seit:
    30. März 2016
    Beiträge:
    3.803
    Danke erhalten:
    548
    Danke vergeben:
    248
    Hallo hf,
    schau mal hier rein templates/EyeCandy/usermod/javascript dann in den Ordner für den passenden Bereich, wenn du es auf allen Seiten benutzen möchtest in den Ordner global
     
  5. hf

    hf Mitglied

    Registriert seit:
    1. Juni 2012
    Beiträge:
    22
    Danke erhalten:
    0
    Danke vergeben:
    2
    super danke :)

    Leider gibt es mit dem Überladen noch ein kleines Problem.

    Wie sieht es denn aus, wenn ich in meine eigene Klasse Parameter übergeben will? Für die Erfassung mit etracker benötige ich z.B. Produktdaten. Dazu habe ich die Klasse ApplicationBottomExtenderComponent erweitert mit einer eigenen Klasse (um die Ausgabe am Ende der Seite zu haben). Die benötigten Parameter stehen z.B. auf der checkout_sucess.php. Dann müsste ich doch in diese Datei meine eigenen Aufrufe schreiben ($meineKlasse->setVar('foo')) um die Variablen zu erhalten oder gibt es noch eine andere Möglichkeit? Dann wäre man jedoch nicht updatesicher, da in der Datei ja meine eigenen Aufrufe stehen.
     
  6. Kai Schoelzke

    Kai Schoelzke Beta-Held

    Registriert seit:
    30. März 2016
    Beiträge:
    3.803
    Danke erhalten:
    548
    Danke vergeben:
    248
    ich glaube das kannst Du ganz einfach im admin unter gambio SEO /Tracking-Codes schreiben
     
  7. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    hf, schau mal in Posting #20 dieses Threads, vielleicht hilft dir das weiter.
     
  8. hf

    hf Mitglied

    Registriert seit:
    1. Juni 2012
    Beiträge:
    22
    Danke erhalten:
    0
    Danke vergeben:
    2
    So richtig irgendwie nicht. Ich müsste von aussen die Variablen an die Klasse übergeben können, denn sonst kann ich den Tracking-Code ja nicht dynamisch befüllen.
     
  9. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Das nutzt Dir natürlich gar nichts, die "ApplicationBottomExtenderComponent" zu überladen, da diese ja überhaupt keine Infos zur Order hat...

    Ich würde die "proceed"-Methode der "system\Extender\CheckoutSuccessExtenderComponent.inc.php" überladen.

    Da hast Du Zugriff auf die Order-Daten, kannst daraus das nötige Javascript konstruieren, dieses einer Template-Variablen zuweisen und im "checkout_success" -Template dann ausgeben.
     
  10. hf

    hf Mitglied

    Registriert seit:
    1. Juni 2012
    Beiträge:
    22
    Danke erhalten:
    0
    Danke vergeben:
    2
    Hallo Avenger,

    das hilft mir schon mal ein ganzes Stück weiter.
    Der Code soll aber nicht nur im Bestellprozess, sondern z.B. auch auf den Produktseiten, Content-Seiten usw. eingesetzt werden. Dort würde mir ja das Überladen der CheckoutSuccessExtenderComponent nicht viel nützen. Mus man dann jeweils andere Klassen überladen? Gibt es denn eine Möglichkeit den Javascript-Schnipsel an einer zentralen Stellen auszulagern und dann jeweils die benötigten Javascript-Variablen dynamisch zu füllen?
     
  11. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Das kommt darauf an....

    Normalerweise braucht der Codeschnipsel an unterschiedlichen Stellen unterschieliche Daten (Kategorie, Artikel, Warenkorb,...), und da muss man dann die entsprechenden Klassen überladen.
     
  12. hf

    hf Mitglied

    Registriert seit:
    1. Juni 2012
    Beiträge:
    22
    Danke erhalten:
    0
    Danke vergeben:
    2
    ok, das werde ich mir mal ansehen. Kann ich denn auch noch eine Art Basisklasse anlegen, in der ich den Javascript Code reinsetze? Damit müsste ich nich bei jeder Klasse, die ich überladen will, diesen Code mehrfach reinschreiben.
     
  13. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Der javascript-Code wird ja, bis z.B. auf die Einbindung des Basis-Javascripts, auch unterschiedlich sein...

    Die Aufbereitung der Warenkorbdaten als Javascript-Daten, ist sicher anders, als die für z.B. eine Kategorie oder Artikel....

    Viel wird man da nicht einsparen können.
     
  14. hf

    hf Mitglied

    Registriert seit:
    1. Juni 2012
    Beiträge:
    22
    Danke erhalten:
    0
    Danke vergeben:
    2
    Die Ausgabe erfolgt aber dann wohl auch immer in dem Template, was die überladene Klasse nutzt? Ich würde den Code gern immer am Ende der Seite haben, was mit der zuerst überladenen Klasse auch ganz gut klappt (ApplicationbottomExtendercomponent). Könnte ich im Falle das Warenkorbes die Ausgabe ebenfalls ans Seitenende verlagern?
     
  15. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Also nun muss mir mal jemand meine Kopflogik korrigieren!

    Ich überlade die OrderDetailsCartContentView.inc.php
    Dort die function get_html weil ich darin einen zusätzlichen Code bauche.
    Das mache ich mit der Indiv_OrderDetailsCartContentView.inc.php was auch funktioniert.

    Codeausschnitt:

    PHP:
    class Indiv_OrderDetailsCartContentView extends Indiv_OrderDetailsCartContentView_parent
    {

        function 
    get_html($p_products_array)
    Jetzt möchte ich die gleiche Klasse für ein anderes Projekt wieder überladen! Und auch hier betrifft es die function get_html

    Codeausschnitt:

    PHP:
    class IndivWK_OrderDetailsCartContentView extends IndivWK_OrderDetailsCartContentView_parent
    {

        function 
    get_html($p_products_array)
    So weit so gut! Solange die Überladungen einzeln im user_classes/overload/OrderDetailsCartContentView/ Ordner liegen geht das top! Nur verwende ich beide ist mit der obersten Schicht im Schacht! Die wird nicht beachtet!

    Also nun der Gedanke die get_html Funktionen umzubenennen. Ja nun nun greift nix mehr......

    Da hab ich doch sicherlich wieder mal ein Wald -> Bäume-Syndrom......... :(
     
  16. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Da hast Du vermutlich in beiden das "parent::get_html($p_products_array);" vergessen....
     
  17. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Oh Sch..... Wie deletantisch! Danke.......
     
  18. kryd

    kryd Neues Mitglied

    Registriert seit:
    15. April 2013
    Beiträge:
    2
    Danke erhalten:
    0
    Hallo allerseits!

    Wie weiß ich ob ich einen Extender überladen soll oder einen View? Also zum einen möchte ich in einer Textdatei Ereignisse mitloggen, also sobald z.B. eine Produktdetailseite aufgerufen wird (und mit welchem Artikel). Zum anderen möchte ich Login- und Registrierungsvorgänge in dieser Datei mitloggen. Für die Produktdetailseite habe ich ProductInfoContentView überladen; für die Anmeldung LoginExtenderComponent. Sinnvoll bis dahin? Oder suboptimal? Für die Registrierung schließlich habe ich überhaupt keinen Ansatzpunkt gefunden, was ich überladen müsste. Was übersehe ich?

    Danke & VG
    Ranjan
     
  19. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    schubs
     
  20. Pascal

    Pascal Aktives Mitglied

    Registriert seit:
    5. Februar 2012
    Beiträge:
    40
    Danke erhalten:
    0
    Danke vergeben:
    5
    Hallo,

    Frage, ich habe nirgend was gelesen über die klassen unter dem Bereich Admin. Ich nehme an dass diese noch nicht so mit "updatesicher" implementiert sind? ..oder liege ich da falsch?

    Gruss