Ist es auch ... in doppelter Hinsicht! Spätestens nach dem nächsten SP haben sich deine Anpassungen "erledigt" (sprich: sie sind futsch)!
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?
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)
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.
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.
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...
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(); . . .
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.
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.
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
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.
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
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.
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).....
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....
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 ;-)