ModifierGroupThemeContentView überladen

Dieses Thema im Forum "PHP" wurde erstellt von M. Zitzmann, 22. April 2020.

  1. M. Zitzmann

    M. Zitzmann Erfahrener Benutzer

    Hallo,

    ich versuche gerade die

    /GXMainComponents/View/ThemeContentViews/products/ModifierGroupThemeContentView.php

    zu erweitern.
    In der Templatedatei modifier_group_type_dropdown.html kommt das aber nicht an.
    Wenn ich die originale ModifierGroupThemeContentView.php erweitere funktioniert es.

    Ist das über den GXModules Ordner überhaupt möglich?
     
  2. Marvin (Gambio)

    Marvin (Gambio) Moderator Mitarbeiter

    Hallo,

    aktuell ist es nicht möglich diese Klassen zu überladen. Wir sind aber dabei dafür eine Lösung zu finden. Sobald ich dazu mehr Informationen habe werde ich in diesen Beitrag noch einmal schreiben.
     
  3. M. Zitzmann

    M. Zitzmann Erfahrener Benutzer

    Danke.

    Wäre es alternativ dazu möglich daß man für ein Theme unterdrückt daß die product_info_option_template_product_options_dropdown.html von der modifier_group_type_dropdown.html überschrieben wird?

    In der product_info_template_standard.html sind sowohl die {$MODULE_modifier_groups} als auch die {$MODULE_product_options} untereinander vorhanden, es werden aber nur die {$MODULE_modifier_groups} ausgegeben.
     
  4. Marvin (Gambio)

    Marvin (Gambio) Moderator Mitarbeiter

    Ich habe dazu mal ein Ticket erstellt. Die ModifierGroupThemeContentView und ModifierGroupsThemeContentView werden bald überladbar sein.
     
  5. M. Zitzmann

    M. Zitzmann Erfahrener Benutzer

    Im Ticket steht nun erledigt aber 0%.
    ?
    Ich habs mal getestet in der 4.1.1.0 - funktioniert.

    Noch eine Frage dazu:
    Mit welcher Variable kann ich in der ModifierGroupThemeContentView die Artikel-ID auslesen?
     
  6. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Wir nutzen das "erledigt" in unseren Tickets nicht.

    $this->sellingUnit->id()->productId()->value() führt zur Artikel-ID.
     
  7. M. Zitzmann

    M. Zitzmann Erfahrener Benutzer

    Stimmt, aber:

    Wenn ich in der originalen Datei die ID in der Funktion prepare_data() so hole kann ich die auch ausgeben.

    In meiner "Überladungsdatei" funktioniert das nicht:

    Code:
        
    public function prepare_data()
        {
            $productId = $this->sellingUnit->id()->productId()->value();
            return parent::prepare_data();
        }
    
    Fehlerlog:
    [2020-06-06 13:39:04 | ERROR] Uncaught Error: Call to a member function id() on null in /var/customers/xxxxx/GXModules/Name/MeinModul/Shop/Overloads/ModifierGroupThemeContentView/TEST_ModifierGroupThemeContentView.php:21
     
  8. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Da ist uns leider ein weiterer Fehler unterlaufen, nämlich dass
    $sellingUnit private statt protected ist. Somit hast du keinen Zugriff. Das müssen wir korrigieren.
     
    Zuletzt bearbeitet: 6. Juni 2020
  9. M. Zitzmann

    M. Zitzmann Erfahrener Benutzer

    OK.
    Wird es wohl nicht mehr in die 4.1.1.1 schaffen...
     
  10. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Weil du es bist, kommts mit der 4.1.1.1 ;).
     
  11. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Du kannst auch den Konstruktor überladen, um so an die $sellingUnit zu kommen.

    PHP:
    public function __construct(SellingUnitInterface $sellingUnitCustomersStatusShowPrice $showPriceStatus)
    {
        
    parent::__construct($sellingUnit$showPriceStatus);
        
    $this->mySellingUnit $sellingUnit;
    }

    public function 
    prepare_data()
    {
        
    $productId $this->mySellingUnit->id()->productId()->value();
        return 
    parent::prepare_data();
    }