@Wilken Also, wenn ich das richtig verstehe unter GX_2.1.x.x kann man alle Dateien, die im Ordner "admin/includes/classes" sind können überladen werden. Heißt das auch die Dateien, die keine ".inc.php" sind, sind überladbar? Jetzt nehmen wir an, wir möchten die Datei "categories.php" überladen um die Daten von neu eingefügten Feldern "Extra-Felder" zu speichern. Wie macht man das? Ich habe die folgende Methode benutzt. Es funktioniert aber nicht! Was habe ich wo falsch eingegeben? PHP: <?phpclass extrafield_categories extends extrafield_categories_parent { function insert_product($products_data, $dest_category_id, $action = 'insert') { $sql_data_array = array('products_inhalt' => xtc_db_prepare_input($products_data['products_inhalt']), 'products_herkunft' => xtc_db_prepare_input($products_data['products_herkunft']), 'products_verpackung' => xtc_db_prepare_input($products_data['products_verpackung']), 'products_anfertigung' => xtc_db_prepare_input($products_data['products_anfertigung']), 'products_geschmack' => xtc_db_prepare_input($products_data['products_geschmack']), 'products_kaesesorte' => xtc_db_prepare_input($products_data['products_kaesesorte']), 'products_milchsorte' => xtc_db_prepare_input($products_data['products_milchsorte']), 'products_milchbehandlung' => xtc_db_prepare_input($products_data['products_milchbehandlung']), 'products_laktose' => xtc_db_prepare_input($products_data['products_laktose']), 'products_fett' => xtc_db_prepare_input($products_data['products_fett']), 'products_reifezeit' => xtc_db_prepare_input($products_data['products_reifezeit']), 'products_kalorien' => xtc_db_prepare_input($products_data['products_kalorien']), 'products_eiweiss' => xtc_db_prepare_input($products_data['products_eiweiss']), 'products_kh' => xtc_db_prepare_input($products_data['products_kh']), 'products_calcium' => xtc_db_prepare_input($products_data['products_calcium'])); return $products_data; }}?>
@Cyrus: Das Verzeichnis ist wichtig. Ein Overload für die categories-Klasse muss in user_classes/overloads/categories/ liegen. Vergiss in deinem Beispiel den Aufruf von parent::insert_product() nicht! Bzw. unter Umständen musst du auch die ganze Funktion kopieren, je nachdem, was du da tun willst.
Danke für die schnelle Antwort. Dazu habe ich ein Paar Fragen: 1: Muss die Overload-Datei dann im Format "xxx_categories.inc.php" gespeichert werden? oder "xxx_categories.php"? 2: Ich habe 15 Extra-Felder für die Produkte eingefügt. Diese sollen es ermöglichen extra Informationen über die Produkte zu ermitteln. Genau so wie die vorhandene Informationen. Zum Beispiel: PHP: $sql_data_array = array('products_quantity' => xtc_db_prepare_input($products_data['products_quantity']), 'product_type' => xtc_db_prepare_input($products_data['product_type']), 'products_model' => xtc_db_prepare_input($products_data['products_model']),usw. Diese funktioniert auch richtig, wenn ich es direkt in die Datei /admin/includes/classes/categories.php eingebe: PHP: $sql_data_array = array('products_quantity' => xtc_db_prepare_input($products_data['products_quantity']), 'product_type' => xtc_db_prepare_input($products_data['product_type']), 'products_model' => xtc_db_prepare_input($products_data['products_model']), 'products_ean' => xtc_db_prepare_input($products_data['products_ean']), 'products_price' => xtc_db_prepare_input($products_data['products_price']), 'products_sort' => xtc_db_prepare_input($products_data['products_sort']), 'products_shippingtime' => xtc_db_prepare_input($products_data['shipping_status']), 'products_discount_allowed' => xtc_db_prepare_input($products_data['products_discount_allowed']), 'products_date_available' => $products_date_available, 'products_weight' => xtc_db_prepare_input($products_data['products_weight']), 'products_status' => $products_status, 'products_startpage' => xtc_db_prepare_input($products_data['products_startpage']), 'products_startpage_sort' => xtc_db_prepare_input($products_data['products_startpage_sort']), 'products_tax_class_id' => xtc_db_prepare_input($products_data['products_tax_class_id']), 'product_template' => xtc_db_prepare_input($products_data['info_template']), 'options_template' => xtc_db_prepare_input($products_data['options_template']), 'manufacturers_id' => xtc_db_prepare_input($products_data['manufacturers_id']), 'products_fsk18' => xtc_db_prepare_input($products_data['fsk18']), 'products_vpe_value' => xtc_db_prepare_input($products_data['products_vpe_value']), 'products_vpe_status' => xtc_db_prepare_input($products_data['products_vpe_status']), 'products_vpe' => xtc_db_prepare_input($products_data['products_vpe']), 'gm_show_date_added' => xtc_db_prepare_input($products_data['gm_show_date_added']), 'gm_show_price_offer' => xtc_db_prepare_input($products_data['gm_show_price_offer']), 'gm_price_status' => xtc_db_prepare_input($products_data['gm_price_status']), 'gm_show_qty_info' => xtc_db_prepare_input($products_data['gm_show_qty_info']), 'gm_min_order' => $gm_min_order, 'gm_show_weight' => xtc_db_prepare_input($products_data['gm_show_weight']), 'gm_graduated_qty' => $gm_graduated_qty, 'gm_priority' => xtc_db_prepare_input($products_data['gm_priority']), 'gm_changefreq' => xtc_db_prepare_input($products_data['gm_changefreq']), 'gm_sitemap_entry' => xtc_db_prepare_input($products_data['gm_sitemap_entry']), 'gm_options_template' => xtc_db_prepare_input($products_data['gm_options_template']), 'nc_ultra_shipping_costs' => xtc_db_prepare_input($products_data['nc_ultra_shipping_costs'])); Wie kann ich das Updatessicher durch Überladung machen?
Der Name der überladenden Klasse muss mit dem Dateinamen übereinstimmen, d.h. PHP: meine_tolle_categories extends meine_tolle_categories_parent { ...} muss in user_classes/overloads/categories/meine_tolle_categories.inc.php stehen. Ansonsten werden wir gerade übel off-topic, ich schlage Verlegung in die Entwicklerecke vor.
Dein Code baut ja nur den "sql_array" auf (lokal in der Routine...) und gibt dann eine "$products_data" zurück. Ohne mich damit jetzt genauer auseinander gesetzt zu haben, würde ich vermuten, dass man folgendes machen muss: Statt PHP: $sql_data_array = array('products_inhalt' => xtc_db_prepare_input($products_data['products_inhalt']),.... muss man PHP: $products_data=array_merge($products_data,array('products_inhalt' => xtc_db_prepare_input($products_data['products_inhalt']),....) D.h., man packt die eigenen Felder zu den schon definierten dazu.
Das ist das Problem, das ich schon die ganze Zeit an unterschiedlichsten Stellen bemängele... Wenn ich eine ganze Funktion überladen muss (wie in diesem Fall), ist die m.E. nicht mehr als "updatesicher" zu bezeichnen.... Hier helfen nur zusätzliche Methoden, direkt bevor die Daten in die Datenbank geschrieben werden. z.B. PHP: $sql_array=$this->add_user_data($sql_array) Und in der Methode "add_user_data" muss ich dann wirklich nur noch die Daten dazu packen, die wirklich meine sind....
In diesem speziellen Fall ist das aber nicht so schlimm, denn categories::insert_product() liefert in 2.1+ die betroffene products_id zurück. Man kann also so etwas machen: PHP: class my_categories extends my_categories_parent{ public function insert_product($products_data, $dest_category_id, $action = 'insert') { $products_id = parent::insert_product($products_data, $dest_category_id, $action); $my_data = array( 'products_foo' => 'is a foo', 'products_bar' => 'is a bar', 'products_answer' => 42, ); xtc_db_perform('products', $my_data, 'update', 'products_id = \''.(int)$products_id.'\''); return $products_id; }} Der eine zusätzliche Query tut nicht so weh, dass man da größeren Aufwand betreiben müsste, um ihn zu vermeiden.
@Marco Vielen Dank. Das ist genau was ich gebraucht habe. Es funktioniert PRIMA! PHP: <?phpclass extrafield_categories extends extrafield_categories_parent { public function insert_product($products_data, $dest_category_id, $action = 'insert') { $products_id = parent::insert_product($products_data, $dest_category_id, $action); // BOF products_extrafields $extra_data = array('products_inhalt' => xtc_db_prepare_input($products_data['products_inhalt']), 'products_herkunft' => xtc_db_prepare_input($products_data['products_herkunft']), 'products_verpackung' => xtc_db_prepare_input($products_data['products_verpackung']), 'products_anfertigung' => xtc_db_prepare_input($products_data['products_anfertigung']), 'products_geschmack' => xtc_db_prepare_input($products_data['products_geschmack']), 'products_kaesesorte' => xtc_db_prepare_input($products_data['products_kaesesorte']), 'products_milchsorte' => xtc_db_prepare_input($products_data['products_milchsorte']), 'products_milchbehandlung' => xtc_db_prepare_input($products_data['products_milchbehandlung']), 'products_laktose' => xtc_db_prepare_input($products_data['products_laktose']), 'products_fett' => xtc_db_prepare_input($products_data['products_fett']), 'products_reifezeit' => xtc_db_prepare_input($products_data['products_reifezeit']), 'products_kalorien' => xtc_db_prepare_input($products_data['products_kalorien']), 'products_eiweiss' => xtc_db_prepare_input($products_data['products_eiweiss']), 'products_kh' => xtc_db_prepare_input($products_data['products_kh']), 'products_calcium' => xtc_db_prepare_input($products_data['products_calcium'])); // EOF products_extrafields xtc_db_perform('products', $extra_data, 'update', 'products_id = \''.(int)$products_id.'\''); return $products_id; }} Das einzige was offen bleibt ist das Kopieren eines Produktes. Hier muß vermute ich im Bereich:- PHP: // duplicates a product by id into specified category by id function duplicate_product($src_products_id, $dest_categories_id) { auch die Daten für Extrafelder eingegeben werden. Also:- PHP: // BOF products_extrafield 'products_inhalt' => $product['products_inhalt'], 'products_herkunft' => $product['products_herkunft'], 'products_verpackung' => $product['products_verpackunfg'], 'products_anfertigung' => $product['products_anfertigung'], 'products_geschmack' => $product['products_geschmack'], 'products_kaesesorte' => $product['products_kaesesorte'], 'products_milchsorte' => $product['products_milchsorte'], 'products_milchbehandlung' => $product['products_milchbehandlung'], 'products_laktose' => $product['products_laktose'], 'products_fett' => $product['products_fett'], 'products_reifezeit' => $product['products_reifezeit'], 'products_kalorien' => $product['products_kalorien'], 'products_eiweiss' => $product['products_eiweiss'], 'products_kh' => $product['products_kh'], 'products_calcium' => $product['products_calcium'], // EOF products_extrafield Ich wäre sehr dankbar, wenn du mir auch eine Lösung dazu zeigen würdest, oder einen Tipp geben würdest.
Hallo, das ist ein kleines bisschen schwieriger, weil bei duplicate_product() die Rückgabe der erzeugten products_id fehlt. Ich schlage daher vor, erst einmal am Ende von duplicate_product() direkt in admin/includes/categories.php die Zeile PHP: return $dup_products_id; einzufügen. Ich habe das auch gerade hier intern als Merge Request hinterlegt. Danach kann man dann so etwas machen (Beispiel von oben erweitert): PHP: class my_categories extends my_categories_parent{ public function insert_product($products_data, $dest_category_id, $action = 'insert') { $products_id = parent::insert_product($products_data, $dest_category_id, $action); $my_data = array( 'products_foo' => 'is a foo', 'products_bar' => 'is a bar', 'products_answer' => 42, ); xtc_db_perform('products', $my_data, 'update', 'products_id = \''.(int)$products_id.'\''); return $products_id; } function duplicate_product($src_products_id, $dest_categories_id) { $new_products_id = parent::duplicate_product(); $copy_my_data_query = 'UPDATE `products` p LEFT JOIN `products` psrc ON psrc.products_id = \':src_products_id\' SET `p`.`products_foo` = `psrc`.`products_foo`, `p`.`products_bar` = `psrc`.`products_bar`, `p`.`products_answer` = `psrc`.`products_answer` WHERE `p`.`products_id` = \':new_products_id\' '; $copy_my_data_query = strtr($copy_my_data_query, array( ':src_products_id' => (int)$src_products_id, ':new_products_id' => (int)$new_products_id, ) ); xtc_db_query($copy_my_data_query); return $new_products_id; }} Wie immer: ohne Gewähr. Ich habe das jetzt nur mal schnell so runtergeschrieben, ohne es getestet zu haben.
Ich sehe dass du im ersten Teil die Daten für die PHP: $my_data = array( 'products_foo' => 'is a foo', 'products_bar' => 'is a bar', 'products_answer' => 42, ); wobei habe ich diese so eingegeben: PHP: $my_data = array('products_foo' =>xtc_db_prepare_input($products_data['products_foo']),......); Ist meine Methode falsch oder macht es keine Unterschied?
Ich habe es jetzt getestet. Beim kopieren führt es leider zu USER ERROR(256): "SQL Error" Der Code: PHP: <?phpclass extrafield_categories extends extrafield_categories_parent{ public function insert_product($products_data, $dest_category_id, $action = 'insert') { $products_id = parent::insert_product($products_data, $dest_category_id, $action); // BOF products_extrafields $extra_data = array('products_inhalt' => xtc_db_prepare_input($products_data['products_inhalt']), 'products_herkunft' => xtc_db_prepare_input($products_data['products_herkunft']), 'products_verpackung' => xtc_db_prepare_input($products_data['products_verpackung']), 'products_anfertigung' => xtc_db_prepare_input($products_data['products_anfertigung']), 'products_geschmack' => xtc_db_prepare_input($products_data['products_geschmack']), 'products_kaesesorte' => xtc_db_prepare_input($products_data['products_kaesesorte']), 'products_milchsorte' => xtc_db_prepare_input($products_data['products_milchsorte']), 'products_milchbehandlung' => xtc_db_prepare_input($products_data['products_milchbehandlung']), 'products_laktose' => xtc_db_prepare_input($products_data['products_laktose']), 'products_fett' => xtc_db_prepare_input($products_data['products_fett']), 'products_reifezeit' => xtc_db_prepare_input($products_data['products_reifezeit']), 'products_kalorien' => xtc_db_prepare_input($products_data['products_kalorien']), 'products_eiweiss' => xtc_db_prepare_input($products_data['products_eiweiss']), 'products_kh' => xtc_db_prepare_input($products_data['products_kh']), 'products_calcium' => xtc_db_prepare_input($products_data['products_calcium'])); // EOF products_extrafields xtc_db_perform('products', $extra_data, 'update', 'products_id = \''.(int)$products_id.'\''); return $products_id; } function duplicate_product($src_products_id, $dest_categories_id) { $new_products_id = parent::duplicate_product($src_products_id, $dest_categories_id); $copy_extra_data_query = 'UPDATE `products` p LEFT JOIN `products` psrc ON psrc.products_id = \':src_products_id\' SET `p`.`products_inhalt`= `psrc`.`products_inhalt`, `p`.`products_herkunft`=`psrc`.`products_herkunft`, `p`.`products_verpackung`=`psrc`.`products_verpackung`, `p`.`products_anfertigung`=`psrc`.`products_anfertigung`, `p`.`products_geschmack`=`psrc`.`products_geschmack`, ´p`.`products_kaesesorte`=`psrc`.`products_kaesesorte`, `p`.`products_milchsorte`=`psrc`.`products_milchsorte`, `p`.`products_milchbehandlung`=`psrc`.`products_milchbehandlung`, `p`.`products_laktose`=`psrc`.`products_laktose`, `p`.`products_fett`=`psrc`.`products_fett`, `p`.`products_reifezeit`=`psrc`.`products_reifezeit`, `p`.`products_kalorien`=`psrc`.`products_kalorien`, `p`.`products_eiweiss`=`psrc`.`products_eiweiss`, `p`.`products_kh`=`psrc`.`products_kh`, `p`.`products_calcium`=`psrc`.`products_calcium` WHERE `p`.`products_id` = \':new_products_id\' '; // EOF products_extrafield $copy_extra_data_query = strtr($copy_extra_data_query, array( ':src_products_id' => (int)$src_products_id, ':new_products_id' => (int)$new_products_id, ) ); xtc_db_query($copy_extra_data_query); return $new_products_id; }}
Magst du mal im Error-Log nachsehen, wie der DB-Error genau lautet? Ich habe das mal eben in einem kleinen Test-Szenario bei mir nachgestellt, da funktionierte es.
Bei insert_product() wird xtc_db_perform() verwendet, das macht von sich aus noch einmal ein xtc_db_input() auf die Werte, deswegen muss man sich da in der Regel nicht weiter um die Bereinigung kümmern. Generell sollte man xtc_db_input() verwenden, nicht xtc_db_prepare_input().
Ich hab eure Beiträge mal aus dem Entwicklerdokumentationsfred ausgekoppelt, ihr macht mir das Ding sonst komplett mit eurem konkreten Problem zu
Hier ist der Error-Report:- Code: [URL="http://localhost/724/admin/show_logs.php#"]2014-10-24 10:41:34 (837ec5754f503cfaaee0929fd48974e7) [B]USER ERROR(256): [/B]"SQL Error" in D:\xampp\htdocs\724\inc\xtc_db_error.inc.php:24[/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL]) [URL="http://localhost/724/admin/show_logs.php#"]#3 File: D:\xampp\htdocs\724\inc\xtc_db_error.inc.php:24[/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL]) [URL="http://localhost/724/admin/show_logs.php#"] Function: trigger_error('SQL Error', 256)[/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL]) - $message: ### indeterminate value ### - $error_type: ### indeterminate value ### Code: line 22: $coo_logger = LogControl::get_instance(); line 23: $coo_logger->notice($p_error, 'error_handler', 'errors', 'notice', 'SQL ERROR', $p_errno, 'Query:' . "\r\n" . trim($p_query)); [B] line 24: trigger_error('SQL Error', E_USER_ERROR); [/B] line 25: }[URL="http://localhost/724/admin/show_logs.php#"]#2 File: D:\xampp\htdocs\724\inc\xtc_db_query.inc.php:77[/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL]) [URL="http://localhost/724/admin/show_logs.php#"]#1 File: D:\xampp\htdocs\724\user_classes\overloads\categories\extrafield_categories.inc.php:62[/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL]) [URL="http://localhost/724/admin/show_logs.php#"] Function: xtc_db_query('UPDATE `products` p LEFT JOIN `products` psrc ON psrc.products_id = \'707\' SET `p`.`products_inhalt`= `psrc`.`products_inhalt`, `p`.`products_herkunft`=`psrc`.`products_herkunft`, `p`.`products_verpackung`=`psrc`.`products_verpackung`, `p`.`products_anfertigung`=`psrc`.`products_anfertigung`, `p`.`products_geschmack`=`psrc`.`products_geschmack`, ´p`.`products_kaesesorte`=`psrc`.`products_kaesesorte`, `p`.`products_milchsorte`=`psrc`.`products_milchsorte`, `p`.`products_milchbehandlung`=`psrc`.`products_milchbehandlung`, `p`.`products_laktose`=`psrc`.`products_laktose`, `p`.`products_fett`=`psrc`.`products_fett`, `p`.`products_reifezeit`=`psrc`.`products_reifezeit`, `p`.`products_kalorien`=`psrc`.`products_kalorien`, `p`.`products_eiweiss`=`psrc`.`products_eiweiss`, `p`.`products_kh`=`psrc`.`products_kh`, `p`.`products_calcium`=`psrc`.`products_calcium` WHERE `p`.`products_id` = \'1247\' ')[/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL]) Code: line 60: ) line 61: ); [B] line 62: xtc_db_query($copy_extra_data_query); [/B] line 63: line 64: return $new_products_id; [URL="http://localhost/724/admin/show_logs.php#"]#0 File: D:\xampp\htdocs\724\admin\categories.php:303[/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL]) [URL="http://localhost/724/admin/show_logs.php#"] Class: extrafield_categories[/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL]) - $redirect_url: NULL [URL="http://localhost/724/admin/show_logs.php#"] Method: duplicate_product('707', '0')[/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL]) - $src_products_id: '707' - $dest_categories_id: '0' Code: line 301: } line 302: elseif ($_POST['copy_as'] == 'duplicate') { [B] line 303: $catfunc->duplicate_product($product_id, $dest_category_id); [/B] line 304: } else { line 305: $messageStack->add_session('Copy type not specified.', 'error'); [URL="http://localhost/724/admin/show_logs.php#"][B]Request:[/B] POST /724/admin/categories.php?action=multi_action_confirm&pID=707&cPath=0_1_7[/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL]) - duration: ~2305ms - server: Apache/2.4.9 (Win32) OpenSSL/0.9.8y PHP/5.4.27 - server address: ::1 - user agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0 - remote address: 837ec5754f503cfaaee0929fd48974e7 [URL="http://localhost/724/admin/show_logs.php#"][B]Session:[/B] [/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL]) - tpl: EyeCandy - MOBILE_ACTIVE: false - language: german - languages_id: 2 - language_charset: utf-8 - language_code: de - currency: EUR [URL="http://localhost/724/admin/show_logs.php#"] - customers_status: [...][/URL] [URL="http://localhost/724/admin/show_logs.php#"] - cart: [...][/URL] [URL="http://localhost/724/admin/show_logs.php#"] - wishList: [...][/URL] - customer_id: 1 - payment: ### Session entry not present ### - shipping: ### Session entry not present ### - cartID: ### Session entry not present ### - sendto: ### Session entry not present ### - billto: ### Session entry not present ### [URL="http://localhost/724/admin/show_logs.php#"][B]Post:[/B] [/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL]) - cPath: 0_1_7 [URL="http://localhost/724/admin/show_logs.php#"] - multi_products: [...][/URL] - dest_category_id: 0 - copy_as: duplicate - gm_copy_attributes: 1 - gm_copy_specials: 1 - gm_copy_cross_sells: 1 - page_token: 590ce3f2933e376c2135e26327cdb384 - multi_copy_confirm: Kopieren [URL="http://localhost/724/admin/show_logs.php#"][B]Get:[/B] [/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL]) - action: multi_action_confirm - pID: 707 - cPath: 0_1_7
@Marco Vielen Dank für deine Mühe und wertvolle Hilfe. Ich habe den Fehler gefunden. Tip-Fehler. Dein Code funktioniert wunderbar. Danke, mit deine große Hilfe kann man jetzt eigene Extrafelder oder Zusatz-Felder ein Stück weiter Updatessicher gestallten. Fehler-Code: PHP: ´p`.`products_kaesesorte`=`psrc`.`products_kaesesorte`, Korrektur-Code: PHP: `p`.`products_kaesesorte`=`psrc`.`products_kaesesorte`,
hallo ich habe Gambio Version: v2.1.3.3 und bin ich damit zufrieden die Anleitung für extrafellder habe ich geschaft und alles ok auf der Info Seite jetzt sollte ich die Felder auf die artekelliste seit kalbt aber nicht könne sie bitte helfen
schau mal unter http://www.gambio-forum.de/threads/...nter-Artikelnamen/page9?highlight=extrafelder da gibt es genaue anleitung für alles was man für die Extrafelder braucht.
danke für das schnellen antwort deine gote anleitung habe ich gemacht auf artekel info ist ok aber ich brauche die felder auf artekel listing
Für den Artikellisting habe ich es bis jetzt nicht probiert. musste ich mal schauen wie das geht. Aber du kannst das auch selbst probieren. Die Datei dafür ist: "SHOP-Ordner/templates/EyeCandy/module/product_listing/product_listing_v1.html". Diese Datei kopieren und als "product_listing_v1-USERMOD.html" speichern. In dieser Datei nach:- HTML: <div class="article-list-item-main"> <h2> <a href="{$module_data.PRODUCTS_LINK}" class="product_link"{if $module_data.PRODUCTS_META_DESCRIPTION != ''} title="{$module_data.PRODUCTS_META_DESCRIPTION|truncate:80:"..."|replace:'"':'"'}"{/if}>{$module_data.PRODUCTS_NAME}</a> suchen und je nachdem wie du das Aussehen der Liste haben möchtest, deine Extrafelder gestalten. NICHT VERGESSEN, ENTWEDER AUF EINE TEST-UMGEBUNG testen, oder vor Änderungen immer EINE DATENSICHERUNG UND DATENBANKSICHERUNG machen.