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: <?phpclass 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
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'] : ''; } } ?>
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: <?phpclass DitC_ProductListingContentControl extends DitC_ProductListingContentControl_parent{ public function add_product_data(array &$p_products_array, array $p_product_array, product $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'] : ''; }}