Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Klassenerweiterung product.php

    awids

    • Experte
    • Beiträge: 3.803
    • Geschlecht:
    Klassenerweiterung product.php
    am: 02. Mai 2017, 07:39:04
    Guten Morgen,

    eine kleine Expertenfrage in Sachen Klassenerweiterung zum Wachwerden. :D

    Ich möchte gerne die product.php erweitern und habe mir die notwendige Datei erstellt. Erfreulicherweise werden (lt. Smarty-Debug-Konsole) die gewünschten Werte auch erzeugt, nur habe ich Probleme, die Daten zusammen zu führen. Habe bisher nie eine Klassenerweiterung geschrieben und hab auch keine Vorlage gefunden.

    Hier mein Code:

    Code: PHP  [Auswählen]
      function buildDataArray($productData,$array,$image) {
       
        if($array['var1'] != '' && $array['var2']!='' && $array['var3']!='default' ) {
          $var1 = xtc_image('images/ordner1/dateien/'.$array['var1'], $array['var4'], 'auto', '21px');
          $var2 = xtc_image('images/ordner2/dateien/'.$array['var2'], $array['var5'], 'auto', '30px');
          $var3 = '<a class="klasse" href="url">'.$var1.'</a>';    
        }
       
        $productData = array();
        foreach((array)$array as $key => $entry) {                  
          $productData[strtoupper($key)] = $entry;
        }
       
        $productDataAdds = array (
          'VAR1'  => $var1,
          'VAR2'  => $var2,
          'VAR3'  => $var3,
        );
       
        $productData = array_merge($productData,$productDataAdds);

        return $productData;
      }

    In der productModules.class.php ist diese Funktion wie folgt dargestellt:

    Code: PHP  [Auswählen]
        function buildDataArray($productData,$array,$image)
        {
            $this->function_call = 'buildDataArray';
            return $this->call_module_method($productData,$array,$image); //Return parameter must be in first place
        }

    Meine Frage lautet konkret, wie ich die Daten aus meiner Erweiterung mit dem bereits vorhandenem $productDataAdds zusammenführen kann. Denn auf meine o. g. Weise werden meine $productDataAdds zwar erzeugt und angezeigt, die in der product.php vorhandenen aber nicht mehr erzeugt.

    Danke für jede Hilfe.

    LG Alex

    P.S.: Das ist meine 1. Klassenerweiterung, als haut nicht zu fest zu. :D

    Linkback: https://www.modified-shop.org/forum/index.php?topic=37165.0

    web28

    • modified Team
    • Beiträge: 9.404
    Re: Klassenerweiterung product.php
    Antwort #1 am: 02. Mai 2017, 13:44:37
    Es gibt 2 Beispiele für Klassenerweiterungen im Shopsystem:

    includes\modules\order\productTagsOnCheckout.php

    admin\includes\modules\categories\catCopyProductName.php

    Das hilft Dir bei der Grundstruktur einer Klassenerweiterung und den Methoden.

    Gruss Web28

    awids

    • Experte
    • Beiträge: 3.803
    • Geschlecht:
    Re: Klassenerweiterung product.php
    Antwort #2 am: 02. Mai 2017, 14:51:19
    Danke Ronald,

    die beiden Dateien habe ich natürlich schon gefunden. Die haben mir nur leider nicht wirklich weiter geholfen, außer beim Konstrukt, um es überhaupt als Klassenerweiterung installieren zu können. Hatte daher wirklich gehofft, dass mir jemand speziell für die Klasse product.php und der Function buildDataArray ein Beispiel geben könnte.

    Naja, ein Mensch muss seine Grenzen kennen - und ich wohl gerade meine erreicht.

    Liebe Grüße

    Alex

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: Klassenerweiterung product.php
    Antwort #3 am: 02. Mai 2017, 15:11:35
    [...]
    Ich möchte gerne die product.php erweitern und habe mir die notwendige Datei erstellt.
    [...]

    Was wo und mit welcher Intention hast du ganz genau erstellt?

    Vielleicht hilft dir folgender Link weiter, die Zeilen 8-13 im ersten Codebeispiel könnten für dich interessant sein, insbesondere dieser Code 'parent::HelloWorld();'.
    https://www.php-einfach.de/experte/objektorientierte-programmierung-oop/vererbung/

    Gruss
    Hanspeter

    awids

    • Experte
    • Beiträge: 3.803
    • Geschlecht:
    Re: Klassenerweiterung product.php
    Antwort #4 am: 02. Mai 2017, 15:54:11
    Intention:
    Ich möchte den $module_content im Produktlisting um weitere Variablen bereichern. Dies dient einem Modul, dass ich komplett updatesicher für die 2.0 anpassen möchte. Es scheitert wirklich nur noch an der Zusammenführung des vorhandenen mit dem Neuen.

    Was?/Wo?:
    Es soll der vorhandene function-Block "buildDataArray(&$array, $image='thumbnail')" manipuliert/erweitert werden. Dazu gibt es ja auch in der "productModules.class.php" diese Erweiterungs-Function:

    Code: PHP  [Auswählen]
        function buildDataArray($productData,$array,$image)
        {
            $this->function_call = 'buildDataArray';
            return $this->call_module_method($productData,$array,$image); //Return parameter must be in first place
        }
     
    Dazu habe ich mir unter /includes/modules/product/ eine Klassenerweiterungsdatei angelegt.

    Der beispielhafte Code funktioniert einwandfrei, wenn ich ihn direkt in der product.php ins vorhandene $productDataAdds (und ein Stück weiter oben die Definitionen) eingebe.

    Eine zusätzliche sql-Query, wie z. B. in der Klassenerweiterung "productTagsOnCheckout" braucht es nicht, da ja bereits über $array['var1'] die benötigten Datenbankfelder abgerufen werden können.

    Ich habe mich die ganze Zeit vor Klassenerweiterungen gedrückt und jetzt weiß ich auch wieder, warum. :D

    Die verlinkte Seite hilft mir mit ihren extends leider auch nicht wirklich weiter. Trotzdem danke für die Hilfe.

    Liebe Grüße

    Alex

    web28

    • modified Team
    • Beiträge: 9.404
    Re: Klassenerweiterung product.php
    Antwort #5 am: 02. Mai 2017, 21:11:35
    Hallo Alex, diesen Teil in Deiner Erweiterung einfach weglassen:

    Code: PHP  [Auswählen]
        $productData = array();
        foreach((array)$array as $key => $entry) {                  
          $productData[strtoupper($key)] = $entry;
        }

    $productData soll ja nur erweitert oder geändert werden, und nicht komplett neu erstellt werden.
    Und $array enthält nur die reinen DB Felder.

    Und mit

    Code: PHP  [Auswählen]
    $productData = array_merge($productData,$productDataAdds);

        return $productData;

    wird $productData ja erweitert und zurückgegeben.

    Gruss  Web28

    awids

    • Experte
    • Beiträge: 3.803
    • Geschlecht:
    Re: Klassenerweiterung product.php
    Antwort #6 am: 02. Mai 2017, 21:35:49
    Guten Abend Ronald,

    danke für deine Ausführungen. :-) Hab es vorhin schon mit viel ausprobieren selbst hinbekommen. ;-)

    In meinem Endergebnis habe ich lediglich:

    Code: PHP  [Auswählen]
    $productData = array_merge($productData,$productDataAdds);

        return $productData;
    zusammengefasst:

    Code: PHP  [Auswählen]
    return $productData = array_merge($productData,$productDataAdds);

    Gar nicht so schwierig, wenn man es einmal hinbekommen hat und die Zusammenhänge versteht. Das bringt mich bei meinen Modulanpassungen für 2.0.X.X auf eine neue Ebene.  :thumbs:

    Einen schönen Abend euch allen und liebe Grüße

    Alex
    4 Antworten
    2774 Aufrufe
    27. April 2021, 13:09:29 von pdfil12
    43 Antworten
    6897 Aufrufe
    02. Oktober 2020, 12:07:00 von Karl1
    4 Antworten
    4266 Aufrufe
    15. Januar 2012, 19:37:20 von Q
    12 Antworten
    3295 Aufrufe
    06. Februar 2019, 23:02:39 von noRiddle (revilonetz)