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

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

  1. Manni_HB

    Manni_HB G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.538
    Danke vergeben:
    908
    Ort:
    Bremen
    Ist es auch ... in doppelter Hinsicht!
    Spätestens nach dem nächsten SP haben sich deine Anpassungen "erledigt" (sprich: sie sind futsch)! :)
     
  2. Gerd Schoolmann

    Gerd Schoolmann Erfahrener Benutzer

    Registriert seit:
    23. August 2012
    Beiträge:
    165
    Danke erhalten:
    23
    Danke vergeben:
    21
    Hallo Manfred,

    also bisher habe ich es immer so gemacht, dass ich nur die relevanten Änderungen aus den SP´s herauskopiert und in meine Dateien eingesetzt habe. Habe ich bis jetzt für einfacher erachtet, als mich mit irgendwelchen Klassen herumzuärgern. Ist aber wohl nicht ganz "sauber", oder?
     
  3. Dennis (MotivMonster.de)

    Dennis (MotivMonster.de) G-WARD 2013/14/15/16

    Registriert seit:
    22. September 2011
    Beiträge:
    30.422
    Danke erhalten:
    5.917
    Danke vergeben:
    1.061
    Beruf:
    Mann für alles :)
    Ort:
    Weilburg
    Ich schau mal ob ich es erklären kann.

    Du hast die Standard Funktion vom Shop - sagen wir Adressbuch speichern
    Durch das overload hängst du an diese Funktion noch einen Befehl hinten dran - Packstation Feld

    Jetzt aktuallisiert Gambio die Funktion Adressbuch z.B. das die Hausnummer ein extra Feld bekommt.
    Deine Änderungen in der Dateie müsstest jetzt noc mal neu machen, durch den overload hängt der Shop deine Overload Anweisung einfach wieder hinten dran. Du musst nix machen.

    (Man möge mich korigieren wenn da was nicht ganz korrekt erklärt ist)
     
  4. Gerd Schoolmann

    Gerd Schoolmann Erfahrener Benutzer

    Registriert seit:
    23. August 2012
    Beiträge:
    165
    Danke erhalten:
    23
    Danke vergeben:
    21
    soweit ok, aber muss ich jetzt jede Datei mit einem overlaod ausstatten?
     
  5. Dennis (MotivMonster.de)

    Dennis (MotivMonster.de) G-WARD 2013/14/15/16

    Registriert seit:
    22. September 2011
    Beiträge:
    30.422
    Danke erhalten:
    5.917
    Danke vergeben:
    1.061
    Beruf:
    Mann für alles :)
    Ort:
    Weilburg
    nein, das ja nur eine Option um dir die Updates später leichter zu machen, weil dich nicht drum kümmern musst die Änderung wieder einzubauen.
     
  6. HolgerNils (xycons.de)

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

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.958
    Danke erhalten:
    449
    Danke vergeben:
    367
    Juhuu! Die Hausnummer kommt!!! <hehehe>
    und <flitz>....
     
  7. Manni_HB

    Manni_HB G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.538
    Danke vergeben:
    908
    Ort:
    Bremen
    Ist ein Mengenproblem. :) Kommt darauf an, wie viele Corefiles von Dir geändert wurden. Ich bin für jede Datei dankbar, die ich nicht mehr updaten/merchen muss.
     
  8. Gerd Schoolmann

    Gerd Schoolmann Erfahrener Benutzer

    Registriert seit:
    23. August 2012
    Beiträge:
    165
    Danke erhalten:
    23
    Danke vergeben:
    21
    also bis jetzt ist der Shop noch jungfräulich, da ich ja immer noch vor dem Problem mit dem Datenimport aus oscommerce nach Gambio stehe....bin ja mal gespannt, wann ich von Daniel eine Antwort bekomme...
     
  9. Laceno

    Laceno Erfahrener Benutzer

    Registriert seit:
    29. Juni 2012
    Beiträge:
    52
    Danke erhalten:
    4
    Danke vergeben:
    12
    Ich habe mich nun auch mal an die Überladung getraut... Ich möchte eine kleine Änderung in der Klasse class ProductInfoContentView extends ContentView in der Funktion function get_html() als Overload abspeichern. (Ich habe dort das Kriterium herausgenommen, welches beim Modus "Preisanfrage" eines Artikels die Anzeige von "woanders günstiger" unterdrückt.) Die Änderung direkt getestet, tut, was sie soll. Aber als Overload abgelegt, passiert nichts... Es gibt nichtmal einen Fehler, was ich schon verdächtig finde. Ich habs also wohl noch nicht richtig. Könnt ihr mal draufschauen bitte?

    Die Datei heißt af_ProductInfoContentView.inc.php und liegt im Ordner .../user_classes/overloads/_samples/ProductInfoContentView.

    Das ist der Inhalt der Datei (nur der Anfang, weil Restfunktion im Grunde komplett übernommen...bis auf kleine Anpassung):

    class af_ProductInfoContentView extends af_ProductInfoContentView_parent{

    function get_html($p_coo_product, $p_current_category_id = 0)
    {
    parent::__construct();
    $t_html_output = '';

    $xtPrice = new xtcPrice($_SESSION['currency'], $_SESSION['customers_status']['customers_status_id']);
    $main = new main();
    .
    .
    .
     
  10. Moritz (Gambio)

    Moritz (Gambio) Administrator
    Mitarbeiter

    Registriert seit:
    26. April 2011
    Beiträge:
    5.329
    Danke erhalten:
    2.380
    Danke vergeben:
    776
    Hallo Laceno,

    die Datei muss im Ordner user_classes/overloads/ProductInfoContentView/ gespeichert werden. Bevor sie wirksam wird, muss im Adminbereich auch noch der Modul-Cache unter dem Menüpunkt "Cache leeren" geleert werden.
     
  11. Laceno

    Laceno Erfahrener Benutzer

    Registriert seit:
    29. Juni 2012
    Beiträge:
    52
    Danke erhalten:
    4
    Danke vergeben:
    12
    Vielen Dank, nun gehts!
     
  12. Laceno

    Laceno Erfahrener Benutzer

    Registriert seit:
    29. Juni 2012
    Beiträge:
    52
    Danke erhalten:
    4
    Danke vergeben:
    12
    #52 Laceno, 30. Oktober 2012
    Zuletzt bearbeitet: 30. Oktober 2012
    Es funktioniert nur, wenn ich statt so:

    class af_ProductInfoContentView extends af_ProductInfoContentView_parent{

    function get_html($p_coo_product, $p_current_category_id = 0)
    {
    parent::__construct();
    $t_html_output = '';

    $xtPrice = new xtcPrice($_SESSION['currency'], $_SESSION['customers_status']['customers_status_id']);
    $main = new main();
    .
    .
    das so gestalte:
    class af_ProductInfoContentView extends af_ProductInfoContentView_parent{

    function af_ProductInfoContentView($p_template = 'default')
    {
    if ($p_template == '' or $p_template == 'default') {
    $files = array ();
    if ($dir = opendir(DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/module/product_info/')) {
    while ($file = readdir($dir)) {
    if (is_file(DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/module/product_info/'.$file) and ($file != "index.html") and (substr($file, 0, 1) !=".")) {
    $files[] = array ('id' => $file, 'text' => $file);
    } //if
    } // while
    closedir($dir);
    }
    $c_template = basename($files[0]['id']);
    }
    else
    {
    $c_template = basename($p_template);
    }

    $this->set_content_template('module/product_info/' . $c_template);
    $this->set_flat_assigns(true);
    }

    function get_html($p_coo_product, $p_current_category_id = 0)
    {
    $t_html_output = '';

    $xtPrice = new xtcPrice($_SESSION['currency'], $_SESSION['customers_status']['customers_status_id']);
    $main = new main();
    .
    .
    .

    Ich dachte, ich kann den Konstruktur per parent::__construct(); mitnutzen... aber dann fehlt mir die Anzeige von "Preis anfragen" auf der Artikelübersichtsseite. Na, Hauptsache, es funktioniert.
     
  13. HolgerNils (xycons.de)

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

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.958
    Danke erhalten:
    449
    Danke vergeben:
    367
    Nonito & All,
    ich bekomme die Klasse "gmOrderPDF" und die Funktionen der /admin/gm/classes/gmOrderPDF.php nicht überladen. Irgendwie zieht er die einfach nicht an. Hast Du einen Tipp für mich oder jemand aus dem Forenkreis?
    DANKE!
    Holger
     
  14. Moritz (Gambio)

    Moritz (Gambio) Administrator
    Mitarbeiter

    Registriert seit:
    26. April 2011
    Beiträge:
    5.329
    Danke erhalten:
    2.380
    Danke vergeben:
    776
    Hallo Holger,

    die Klassen aus dem admin-Verzeichnis können standardmäßig noch nicht überladen werden. Daran arbeiten wir noch. Avenger hat das vor längerer Zeit für sich schon gelöst und im Forum vorgestellt, wenn ich mich recht entsinne. Ich habe aus dem Stegreif jetzt nicht den Link dazu parat.
     
  15. HolgerNils (xycons.de)

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

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.958
    Danke erhalten:
    449
    Danke vergeben:
    367
    Hi Moritz,
    vielen Dank für die Antwort. Gibts da schon einen zeitlichen Horizont, oder ruht das im Moment im Hintergrund? Um die Sache "rund" zu machen wär das natürlich prima und würde sicher vielen helfen, da liegt ja nicht nur die PDF-Geschichte sondern eine Menge Holz in der Hütte :cool:
     
  16. Moritz (Gambio)

    Moritz (Gambio) Administrator
    Mitarbeiter

    Registriert seit:
    26. April 2011
    Beiträge:
    5.329
    Danke erhalten:
    2.380
    Danke vergeben:
    776
    In diesem Monat arbeiten wir nicht konkret daran. Was das Refactoring angeht, ist noch viel zu tun. Viel wird 2013 passieren. Genauer stehts noch nicht fest.
     
  17. 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 kann man auch....
     
  18. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Ich halte Eure Priorisierung immer noch für falsch....

    Die Klassenüberladung für den Admin-Bereich ist m.E. auch ein sehr wichtiges Thema (und auch gar nicht so schwer zu realisieren).....
     
  19. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Ich löse das für mich so (und da Du ja das USERMOD-Konzept verwendest, kannst Du das auch machen,,,):

    Ich lege das Admin-Programm, in dem ich eine Klasse überladen will, in den USERMOD-Bereich.

    Dann wird in dieser Version der Aufruf der Klasse (z.B. "categories.php") geändert zum Aufruf von "pt_categories.php".

    Die Klassendefinition von "pt_categories.php" sieht dann so aus:

    PHP:
    include(DIR_WS_CLASSES."categories.php");

    class 
    pt_categories extends categories {
        function 
    __construct()
        {
            
    parent::__construct();
        }
        
        
    //Neue und oder geänderte Methoden/Eigenschaften.
    }
    Und in der "USERMOD"-Variante des Programms schreibe ich dann

    statt

    PHP:
    $categories=new categories;
    PHP:
    $categories=new pt_categories;
    Nicht besonders elegant, aber es funktioniert....
     
  20. HolgerNils (xycons.de)

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

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.958
    Danke erhalten:
    449
    Danke vergeben:
    367
    Vielen Dank!!
    Das wäre die Option, yepp. Hatte gehofft, dass eine Überladaung möglich ist, was die "sauberste" Lösung wäre, da aus dem Standard entstammende Lösung. Wird Zeit, dass sich Gambio mal zu deinem USERMOD-Konzept - welches bravurös funktioniert - committed, damit man das nicht länger als durchaus grandioses aber dennoch lt. seinem aktuellen Status Zugeständnis eingruppiert... Deshalb auch hier jetzt für mich die UserMod-Variante! ;-)

    @Gambio, Eurer Statement ist gefragt ;-)