gelöst Daten hinzufügen im ProductListing

Thema wurde von Anonymous, 1. Oktober 2025 erstellt.

  1. Anonymous
    Anonymous Erfahrener Benutzer
    Registriert seit:
    15. Mai 2017
    Beiträge:
    823
    Danke erhalten:
    183
    Danke vergeben:
    208
    #1 Anonymous, 1. Oktober 2025
    Zuletzt bearbeitet: 1. Oktober 2025
    Ich möchte im Produktlisting eine Variable hinzufügen, die ich dann über einen Smarty Block anzeigen lasse.
    Smarty etc. bekomme ich alles hin, die benötigten Daten aufzubereiten, bekomme ich per SQL auch hin. Ich muss das Ergebnis (Variable: PRODUCTS_VARIANTS_HTML) "nur" noch an der richtigen Stelle zur Verfügung haben.

    Um mich der Sache zu nähern, habe ich dazu habe ich folgendes Script geschrieben und in
    GXModules/MeinShop/MeineAnpassungen/Shop/Overloads/ProductListingThemeContentView/
    abgelegt.

    DitC_ProductListingThemeContentView.inc.php
    PHP:
    <?php

    class DitC_ProductListingThemeContentView extends DitC_ProductListingThemeContentView_parent
    {
         function 
    _assignProductData()
        {
        
            
    $this->_assignVariants();
                
            return 
    parent::_assignProductData();
        }

     public function 
    _assignVariants()
        {
            
    $help $this->product->data['products_model'];
            
    $this->set_content_data('PRODUCTS_VARIANTS_HTML'$help);
        }
    }
    Ergbnis: nix.
    Die Variable PRODUCTS_VARIANTS_HTML wird offenbar nicht gefüllt-

    Meine Fragen:
    Liegt das Script an der richtigen Stelle?
    GXModules/MeinShop/MeineAnpassungen/Shop/Overloads/ProductListingThemeContentView/

    Ist die Belegung der Variable $help so korrekt?
    Ist die Belegung der Variable "PRODUCTS_VARIANTS_HTML" so korrekt?

    Danke für Eure Hilfe
     
  2. Anonymous
    Anonymous Erfahrener Benutzer
    Registriert seit:
    15. Mai 2017
    Beiträge:
    823
    Danke erhalten:
    183
    Danke vergeben:
    208
    Hmm keine Entwickler mehr im Forum?
     
  3. Anonymous
    Anonymous Erfahrener Benutzer
    Registriert seit:
    15. Mai 2017
    Beiträge:
    823
    Danke erhalten:
    183
    Danke vergeben:
    208
    Oh Mann, das ist vielleicht ein Brett, zumindest für mich.
    Bin jetzt mit viel Debug etc soweit, dass ich meine, mich auf dem richtigen Weg zu befinden.

    Der Overload wírd an der richtigen Stelle ausgeführt.
    SQL funktiioniert auch und liefert ein Ergebnis.

    Das EInzige was offenbar nicht funktioniert ist, dass "$p_product_array" nicht um meine neue Variable "PRODUCTS_VARIANTS_HTML" erweitert wird.

    Hier bräuchte ich bitte eine einen Tipp! Danke.

    GXModules/MeinShop/MeineAnpassungen/Shop/Overloads/ProductListingContentControl/
    Code:
    <?php
    
    class DitC_ProductListingContentControl extends DitC_ProductListingContentControl_parent
    {
        function add_product_data(array &$p_products_array, array $p_product_array, product $p_coo_product)
        {
            $product_id = (int)($p_product_array['products_id'] ?? 0);
    
            if ($product_id > 0) {
                $p_product_array['PRODUCTS_VARIANTS_HTML'] = $this->_loadVariantHtmlForProduct($product_id);
            }
            error_log("Products array: " . print_r($p_products_array, true));
    
            return parent::add_product_data($p_products_array, $p_product_array, $p_coo_product);
        }
    
        protected function _loadVariantHtmlForProduct(int $product_id): string
        {
            $language_id = (int)($_SESSION['languages_id'] ?? 2);
    
            $sql = "
                SELECT afvd.value AS html
                FROM additional_field_value_descriptions afvd
                JOIN additional_field_values afv
                  ON afvd.additional_field_value_id = afv.additional_field_value_id
                WHERE afv.additional_field_id = 10
                  AND afvd.language_id = {$language_id}
                  AND afv.item_id = {$product_id}
                LIMIT 1
            ";
    
            $query = xtc_db_query($sql);
    
            $result = xtc_db_fetch_array($query);
    
            return !empty($result['html']) ? $result['html'] : '';
        }
    }
    ?>
    
     
  4. Anonymous
    Anonymous Erfahrener Benutzer
    Registriert seit:
    15. Mai 2017
    Beiträge:
    823
    Danke erhalten:
    183
    Danke vergeben:
    208
    Habe es hingebastelt bekommen, falls es jemanden interessiert:

    Smarty Overload in product_listing_product.html:
    HTML:
    {block name="product_listing_product_description_rating" prepend}
        <p>{$module_data.PRODUCTS_VARIANTS_HTML}</p>
    {/block}
    Der Overload in GXModules/MeinShop/MeineAnpassungen/Shop/Overloads/ProductListingContentControl/:
    PHP:
    <?php
    class DitC_ProductListingContentControl extends DitC_ProductListingContentControl_parent
    {
        public function 
    add_product_data(array &$p_products_array, array $p_product_arrayproduct $p_coo_product)
        {
            
    parent::add_product_data($p_products_array$p_product_array$p_coo_product);

            
    $product_id = (int)($p_product_array['products_id'] ?? 0);

            if (
    $product_id 0) {
                
    $p_products_array[sizeof($p_products_array) - 1]['PRODUCTS_VARIANTS_HTML'] = $this->_loadVariantHtmlForProduct($product_id);
            }
        }

        protected function 
    _loadVariantHtmlForProduct(int $product_id): string
        
    {
            
    $language_id = (int)($_SESSION['languages_id'] ?? 2);

            if (
    $product_id 0)
            {
                
    $sql "
                    SELECT 
                     ...
                "
    ;

                
    $query xtc_db_query($sql);
                
    $result xtc_db_fetch_array($query);
            }
            
    $result preg_replace('/<\/?a[^>]*>/'''$result);
            return !empty(
    $result['html']) ? $result['html'] : '';
        }
    }