Vielleicht hat Gambio das da vergessen Ich weiß nur, das ich eine Datei user_classes/ overloads/ breadcrumb/ gm_breadcrumb.inc.php habe, die die includes/ classes/ breadcrumb.php überlädt. Deshalb gehe ich davon aus, dass das auch mit anderen Dateien aus dem Verzeichnis geht.
@Barbara, ja, ist es auch überladbar. in user_classes/overloads einen Ordner Namens "product" anlegen. Die Screibweise ist WICHTIG! In diesem Verzeichnis eine PHP-Datei mit dem Namen " cp_product.inc.php mit folgendem Inhalt speichern. PHP: <?phpclass cp_product extends cp_product_parent{ function buildDataArray(&$array, $image = 'thumbnail') { global $xtPrice, $main; $t_data_array=parent::buildDataArray($array, $image); //Additional info in $t_data_array $t_data_array['PRODUCTS_INHALT']=$array['products_inhalt']; //Additional info in $t_data_array return $t_data_array; // EOF GM_MOD }} ?> Cache und template_c leeren. Jetzt kann man die Änderung an Frontend sehen. Den Code habe ich jetzt geändert, damit es nicht zu Verwirrung führt.
Hallo Cyrus, habe das gerade in meiner Version 2.2 eingebaut. Passt sowohl für die Listen- als auch für die Kachelansicht. Für die Kachelansicht muss die Datei templates/ EyeCandy/ objects/ product_boxes_list.html angepasst werden, die man dann unter templates/ EyeCandy/ objects/ product_boxes_list-USERMOD.html speichert. Vielen Dank auch, für die Überarbeitung der Anleitung der Extrafelder
Extra-Felder im Warenkorb Um die Extra-Felder auch in Warenkorb zu bekommen, müssen 2 Klassen überladen werden: ../includes/classes/shopping_cart.php ../system/classes/shopping_cart/OrderDetailsCartContentView.inc.php Die Sprachdateien von: ../lang/SPRACHE/sections/_samples/order_details.lang.inc.php mit unserem Text erweitert und in Verzeichnis sections gespeichert werden. Und nicht zu vergessen, eine HTML-Datei erweitern und in USERMOD speichern. ../templates/Eyecandy/modules/order_details.html erweitert und als order_details-USERMOD.html gespeichert werden Caches für Seitenausgabe und Modulinformationen leeren und das war es.
Ich will das mal zum Anlass nehmen, darauf hinzuweisen, dass man mit dieser Vorgehensweise (die man leider immer noch sieht) das Potential des Overloadings nur rudimentär ausnutzt... Sinn des Overloadings ist es ja, Änderungen/Erweiterungen an bestehenden Klassen/Methoden zu machen, ohne dass man eine Abhängigkeit vom Code der zu überladenden Klasse/Methoden hat. Wenn man aber, wie hier, den kompletten Code der Originalmethode nimmt, und diesen ändert, ist man nämlich nicht mehr updatesicher! Denn man muss ja bei jedem Update immer prüfen, ob sich der Original-Code der Methode (hier: "buildDataArray") geändert hat, und dieses in seinem Overload-Modul evtl. korrigieren... Sinnvoller Weise sollte man das aber wie folgt strukturieren: PHP: <?phpclass cp_product extends cp_product_parent{ function buildDataArray(&$array, $image = 'thumbnail') { global $xtPrice, $main; $t_data_array=parent::buildDataArray($array, $image); /* Hier folgt dann der code, den man benötigt, um seine gewünschten Änderungen/Erweiterungen in $t_data_array einzubringen */ return $t_data_array; }}?> Der Vorteil liegt auf der Hand: Was immer auch bei einem Update mit der Original "buildDataArray"-Methode geschieht hat keinen Einfluss auf den Code in meinem Overload-Modul! Erst dann ist man wirklich "updatesicher".
@Avenger, ja, habe ich es mir gedacht, aber meine PHP-Wissen hat dafür nicht gereicht. Trotzdem muss man die ganze Funktion eingeben, sonst funktioniert es nicht. Also: PHP: <?phpclass cp_product extends cp_product_parent{ function buildDataArray(&$array, $image = 'thumbnail') { global $xtPrice, $main; $t_data_array=parent::buildDataArray($array, $image); $tax_rate = $xtPrice->TAX[$array['products_tax_class_id']]; $coo_properties_control = MainFactory::create_object('PropertiesControl'); $t_combi = $coo_properties_control->get_cheapest_combi($array['products_id'], $_SESSION['languages_id']); $products_price = $xtPrice->xtcGetPrice($array['products_id'], true, 1, $array['products_tax_class_id'], $array['products_price'], 1, 0, true, true, $t_combi['products_properties_combis_id']); if($t_combi != false) { $array['products_vpe_value'] = $t_combi['vpe_value']; $array['products_vpe'] = $t_combi['products_vpe_id']; } // BOF GM_MOD $buy_now = ''; $gm_buy_now_url = ''; $gm_qty = ''; $t_qty_array = array(); $gm_buy_now = xtc_draw_hidden_field('products_id', $array['products_id'], 'class="gm_products_id"'); if($_SESSION['customers_status']['customers_status_show_price'] != '0' && $xtPrice->gm_check_price_status($array['products_id']) == 0) { if($_SESSION['customers_status']['customers_fsk18'] == '1') { if($array['products_fsk18'] == '0') { $buy_now = $this->getBuyNowButton($array['products_id'], $array['products_name']); $gm_buy_now_url = xtc_href_link(basename($PHP_SELF), 'action=buy_now&BUYproducts_id=' . $array['products_id'] . '&' . xtc_get_all_get_params(array('action')), 'NONSSL'); $gm_qty = xtc_draw_input_field('products_qty', $this->gm_min_order($array['products_id']), 'size="3" id="gm_attr_calc_qty_' . $array['products_id'] . '" onkeyup="gm_calc_prices_listing(\'' . $array['products_id'] . '\')"', 'text', true, "gm_listing_form gm_class_input"); $gm_buy_now .= xtc_image_submit('button_in_cart.gif', IMAGE_BUTTON_IN_CART, 'class="gm_image_button"'); $t_qty_array = array('NAME' => 'products_qty', 'VALUE' => $this->gm_min_order($array['products_id']), 'SIZE' => '3', 'ID' => 'gm_attr_calc_qty_' . $array['products_id'], 'ONKEYUP' => 'gm_calc_prices_listing(\'' . $array['products_id'] . '\')', 'CLASS' => 'gm_listing_form gm_class_input', 'TYPE' => 'text'); } } else { $buy_now = $this->getBuyNowButton($array['products_id'], $array['products_name']); $gm_buy_now_url = xtc_href_link(basename($PHP_SELF), 'action=buy_now&BUYproducts_id=' . $array['products_id'] . '&' . xtc_get_all_get_params(array('action')), 'NONSSL'); $gm_qty = xtc_draw_input_field('products_qty', $this->gm_min_order($array['products_id']), 'size="3" id="gm_attr_calc_qty_' . $array['products_id'] . '" onkeyup="gm_calc_prices_listing(\'' . $array['products_id'] . '\')"', 'text', true, "gm_listing_form gm_class_input"); $gm_buy_now .= xtc_image_submit('button_in_cart.gif', IMAGE_BUTTON_IN_CART, 'class="gm_image_button"'); $t_qty_array = array('NAME' => 'products_qty', 'VALUE' => $this->gm_min_order($array['products_id']), 'SIZE' => '3', 'ID' => 'gm_attr_calc_qty_' . $array['products_id'], 'ONKEYUP' => 'gm_calc_prices_listing(\'' . $array['products_id'] . '\')', 'CLASS' => 'gm_listing_form gm_class_input', 'TYPE' => 'text'); } } $t_shipping_status_id = $array['products_shippingtime']; if($xtPrice->gm_check_price_status($array['products_id']) == 1 || $xtPrice->gm_check_price_status($array['products_id']) == 2) { if($array['products_price'] > 0 && $xtPrice->gm_check_price_status($array['products_id']) == 2) { $gm_tax_info = $main->getTaxInfo($tax_rate); } else { $gm_tax_info = ''; } $gm_shipping_link = ''; $t_shipping_info_link_active = ''; $shipping_status_name = ''; $shipping_status_image = ''; } else { $gm_tax_info = $main->getTaxInfo($tax_rate); $gm_shipping_link = $main->getShippingLink(true); if(ACTIVATE_SHIPPING_STATUS == 'true') { $shipping_status_name = $main->getShippingStatusName($t_shipping_status_id); $shipping_status_image = $main->getShippingStatusImage($t_shipping_status_id); $t_shipping_info_link_active = $main->getShippingStatusInfoLinkActive($t_shipping_status_id); } else { $shipping_status_name = ''; $shipping_status_image = ''; $t_shipping_info_link_active = ''; } } if($gmSEOBoost->boost_products) { $gm_product_link = xtc_href_link($gmSEOBoost->get_boosted_product_url($array['products_id'], $array['products_name'])); } else { $gm_product_link = xtc_href_link(FILENAME_PRODUCT_INFO, xtc_product_link($array['products_id'], $array['products_name'])); } $gm_products_stock = gm_convert_qty(xtc_get_products_stock($array['products_id']), false); // set image size once a time if !exist if(isset($array['products_image_w']) && empty($array['products_image_w']) && xtc_not_null($array['products_image'])) { $gm_imagesize = $this->productImageSize($array['products_id'], $array['products_image']); $array['products_image_w'] = $gm_imagesize[0]; $array['products_image_h'] = $gm_imagesize[1]; } $gm_cat_search = ''; if(isset($_GET['cat'])) { $gm_cat_search = '&cat=' . $_GET['cat']; } if(isset($_GET['keywords'])) { $gm_cat_search = '&keywords=' . $_GET['keywords']; if(isset($_GET['page'])) { $gm_cat_search .= '&page=' . $_GET['page']; } } $t_form_array = array(); $t_form_array = array('ID' => 'gm_add_to_cart_' . $array['products_id'], 'ACTION_URL' => xtc_href_link('index.php', 'action=buy_now&BUYproducts_id=' . $array['products_id'] . $gm_cat_search, 'NONSSL', true, true, true), 'METHOD' => 'post', 'ONSUBMIT' => 'return gm_quantity_check_listing(\'' . $array['products_id'] . '\')' ); $t_data_array = array('PRODUCTS_NAME' => htmlspecialchars_wrapper($array['products_name']), 'COUNT' => $array['ID'], 'PRODUCTS_ID' => $array['products_id'], 'PRODUCTS_VPE' => $this->getVPEtext($array, $products_price['plain']), 'PRODUCTS_IMAGE' => $this->productImage($array['products_image'], $image), 'PRODUCTS_IMAGE_W' => $array['products_image_w'], 'PRODUCTS_IMAGE_H' => $array['products_image_h'], 'PRODUCTS_IMAGE_WIDTH' => PRODUCT_IMAGE_THUMBNAIL_WIDTH, 'PRODUCTS_IMAGE_PADDING' => ((PRODUCT_IMAGE_THUMBNAIL_HEIGHT + 8) - $array['products_image_h']) / 2, 'PRODUCTS_IMAGE_ALT' => $array['gm_alt_text'], 'PRODUCTS_LINK' => $gm_product_link, 'PRODUCTS_PRICE' => $products_price['formated'], 'PRODUCTS_TAX_INFO' => $gm_tax_info, 'PRODUCTS_SHIPPING_LINK' => $gm_shipping_link, 'PRODUCTS_BUTTON_BUY_NOW' => $buy_now, 'GM_PRODUCTS_BUTTON_BUY_NOW_URL' => $gm_buy_now_url, 'GM_PRODUCTS_BUTTON_BUY_NOW' => $gm_buy_now, 'PRODUCTS_SHIPPING_NAME' => $shipping_status_name, 'PRODUCTS_SHIPPING_IMAGE' => $shipping_status_image, 'PRODUCTS_SHIPPING_LINK_ACTIVE' => $t_shipping_info_link_active, 'PRODUCTS_DESCRIPTION' => $array['products_description'], 'PRODUCTS_INHALT' => $array['products_inhalt'], 'PRODUCTS_EXPIRES' => $array['expires_date'], 'PRODUCTS_CATEGORY_URL' => $array['cat_url'], 'PRODUCTS_SHORT_DESCRIPTION' => $array['products_short_description'], 'PRODUCTS_FSK18' => $array['products_fsk18'], 'GM_FORM_ACTION' => xtc_draw_form('gm_add_to_cart_' . $array['products_id'], xtc_href_link('index.php', 'action=buy_now&BUYproducts_id=' . $array['products_id'] . $gm_cat_search, 'NONSSL', true, true, true), 'post', 'onsubmit="return gm_quantity_check_listing(\'' . $array['products_id'] . '\')"'), 'FORM_DATA' => $t_form_array, 'QTY_DATA' => $t_qty_array, 'GM_FORM_END' => '</form>', 'GM_PRODUCTS_QTY' => $gm_qty, 'GM_PRODUCTS_STOCK' => $gm_products_stock, 'PRODUCTS_META_DESCRIPTION' => $array['products_meta_description'], 'PRODUCTS_WEIGHT' => gm_prepare_number((double)$array['products_weight'], $xtPrice->currencies[$xtPrice->actualCurr]['decimal_point']), 'SHOW_PRODUCTS_WEIGHT' => $array['gm_show_weight']); return $t_data_array; // EOF GM_MOD }} ?> Oder gibt es da auch eine Lösung?
PHP: $t_data_array = array('PRODUCTS_NAME' => htmlspecialchars_wrapper($array['products_name']),'PRODUCTS_INHALT' => $array['products_inhalt'], products_inhalt für Extra-Felder in ArtikelListenAnsicht eingefügt:
Wenn ich das richtig sehe, dann ist nur diese Zeile neu: PHP: 'PRODUCTS_INHALT' => $array['products_inhalt'], Dann sollte folgendes Overload-Modul funktionieren: PHP: <?phpclass cp_product extends cp_product_parent{ function buildDataArray(&$array, $image = 'thumbnail') { global $xtPrice, $main; $t_data_array=parent::buildDataArray($array, $image); //Additional info in $t_data_array $t_data_array['PRODUCTS_INHALT']=$array['products_inhalt']; //Additional info in $t_data_array return $t_data_array; }}?>
Sieht doch auch viel übersichtlicher aus... Man muss das Overloading wirklich verinnerlichen, um den bestmöglichen Nutzen daraus zu ziehen. Sonst ist das alles vergebene Liebsmüh'. Meist kann man das so sauber trennen zwischen der Originalmethode (die durch parent::xxxx einbezogen wird), und den notwendigen Änderungen. Vor allen in der Version 2.2.
Ja bis man soweit ist. Das selbe Problem hat man mit ../system/classes/shopping_cart/OrderDetailsCartContentView.inc.php. Wie kann man: PHP: 'PRODUCTS_INHALT' => $t_products_inhalt, in PHP: $module_content[$i] = array( 'PRODUCTS_NAME' => $p_products_array[$i]['name'] . $mark_stock, 'PRODUCTS_QTY' => xtc_draw_input_field('cart_quantity[]', gm_convert_qty($p_products_array[$i]['quantity'], false), ' size="2" onblur="gm_qty_is_changed(' . $p_products_array[$i]['quantity'] . ', this.value, \'' . GM_QTY_CHANGED_MESSAGE . '\')"', 'text', true, "gm_cart_data gm_class_input") . xtc_draw_hidden_field('products_id[]', $p_products_array[$i]['id'], 'class="gm_cart_data"') . xtc_draw_hidden_field('old_qty[]', $p_products_array[$i]['quantity']), 'PRODUCTS_OLDQTY_INPUT_NAME' => 'old_qty[]', 'PRODUCTS_QTY_INPUT_NAME' => 'cart_quantity[]', 'PRODUCTS_QTY_VALUE' => gm_convert_qty($p_products_array[$i]['quantity'], false), 'PRODUCTS_ID_INPUT_NAME' => 'products_id[]', 'PRODUCTS_ID_EXTENDED' => $p_products_array[$i]['id'], 'PRODUCTS_MODEL' => $t_products_model, 'SHOW_PRODUCTS_MODEL' => SHOW_PRODUCTS_MODEL, 'PRODUCTS_SHIPPING_TIME' => $t_shipping_time, 'PRODUCTS_TAX' => (double)$p_products_array[$i]['tax'], 'PRODUCTS_INHALT' => $t_products_inhalt, 'PRODUCTS_IMAGE' => $image, 'IMAGE_ALT' => $p_products_array[$i]['name'], 'BOX_DELETE' => xtc_draw_checkbox_field('cart_delete[]', $p_products_array[$i]['id'], false, 'id="gm_delete_product_' . $gm_products_id . '"'), 'PRODUCTS_LINK' => $gm_product_link, 'PRODUCTS_PRICE' => $xtPrice->xtcFormat($p_products_array[$i]['price'] * $p_products_array[$i]['quantity'], true), 'PRODUCTS_SINGLE_PRICE' => $xtPrice->xtcFormat($p_products_array[$i]['price'], true), 'PRODUCTS_SHORT_DESCRIPTION' => xtc_get_short_description($p_products_array[$i]['id']), 'ATTRIBUTES' => '', 'PROPERTIES' => $t_properties_html, 'GM_WEIGHT' => $t_products_weight, 'PRODUCTS_ID' => $gm_products_id, 'UNIT' => $p_products_array[$i]['unit_name'] ); als Erweiterung einbauen, ohne den kompletten Code eingeben zu mussen? PHP: class mx_OrderDetailsCartContentView extends mx_OrderDetailsCartContentView_parent{ function get_html($p_products_array) { $coo_lang_file_master = MainFactory::create_object('LanguageTextManager', array(), true); $coo_properties_control = MainFactory::create_object('PropertiesControl'); $coo_properties_view = MainFactory::create_object('PropertiesView'); $module_content = array(); $coo_main = new main(); $xtPrice = new xtcPrice($_SESSION['currency'], $_SESSION['customers_status']['customers_status_id']);......$t_products_model = $p_products_array[$i]['model']; // BOF CP $t_products_inhalt = $p_products_array[$i]['inhalt']; // EOF CP......$module_content[$i] = array( 'PRODUCTS_NAME' => $p_products_array[$i]['name'] . $mark_stock, 'PRODUCTS_QTY' => xtc_draw_input_field('cart_quantity[]', gm_convert_qty($p_products_array[$i]['quantity'], false), ' size="2" onblur="gm_qty_is_changed(' . $p_products_array[$i]['quantity'] . ', this.value, \'' . GM_QTY_CHANGED_MESSAGE . '\')"', 'text', true, "gm_cart_data gm_class_input") . xtc_draw_hidden_field('products_id[]', $p_products_array[$i]['id'], 'class="gm_cart_data"') . xtc_draw_hidden_field('old_qty[]', $p_products_array[$i]['quantity']), 'PRODUCTS_OLDQTY_INPUT_NAME' => 'old_qty[]', 'PRODUCTS_QTY_INPUT_NAME' => 'cart_quantity[]', 'PRODUCTS_QTY_VALUE' => gm_convert_qty($p_products_array[$i]['quantity'], false), 'PRODUCTS_ID_INPUT_NAME' => 'products_id[]', 'PRODUCTS_ID_EXTENDED' => $p_products_array[$i]['id'], 'PRODUCTS_MODEL' => $t_products_model, 'SHOW_PRODUCTS_MODEL' => SHOW_PRODUCTS_MODEL, 'PRODUCTS_SHIPPING_TIME' => $t_shipping_time, 'PRODUCTS_TAX' => (double)$p_products_array[$i]['tax'], 'PRODUCTS_INHALT' => $t_products_inhalt,......?>
Das ist leider etwas komplizierter, weil Gambio keine Methode vorgesehen hat, mit der man direkt in die Generierung eingreifen könnte. Also etwa so: wenn nach PHP: $module_content[$i]['PRODUCTS_VPE_ARRAY'] = get_products_vpe_array($p_products_array[$i]['id'], $p_products_array[$i]['price'], array(), $t_combis_id); z.B. PHP: $module_content[$i]=$this->add_private_module_data($module_content[$i],$p_products_array[$i]); vorhanden wäre, dann könnte man sehr einfach in einem Overload die Daten im aktuellen Artikel ändern. Aber man kann auch hier etwas tun. Allerdings muss man etwas "zaubern", weil diese OrderDetailsCartContentView-Klasse maximal Overload-unfreundlich ist. Das Problem ist, dass die "get_html"-Methode direkt das gerenderte HTML liefert, ohne irgendwie eingreifen zu können. Auch das in anderen Klassen in "prepare_html" und "build_html" aufgeteilte Verfahren wird hier nicht angewendet. Die einzig Overload-fähige Routine dort ist "build_html", so dass ich eigentlich nur dort etwas ändern kann. Das ist dann meine Version des Overloads: PHP: <?phpclass mx_OrderDetailsCartContentView extends mx_OrderDetailsCartContentView_parent{ function get_html($p_products_array) { //Save $p_products_array for build_html $this->p_products_array=$p_products_array; parent::get_html($p_products_array); } function build_html() { //Get $module_content prepared by "get_html" so far $module_content=$this->get_content_array(); $module_content=$module_content['module_content']; //Loop over saved products array and add my data to the $module_content entries foreach ($this->p_products_array as $index=>$product) { $module_content[$index]['PRODUCTS_INHALT']=$product['products_inhalt']; } //Save new $module_content entries $this->set_content_data('module_content', $module_content); return parent::build_html(); }}?>
ja, das gibt eine Leere WK zurück. Ich hatte auch mehrere Methoden ausprobiert aber alle mit dem selben Ergebnis. Leere WK.
Ich habe mir das angesehen, und das Problem gefunden: PHP: <?phpclass mx_OrderDetailsCartContentView extends mx_OrderDetailsCartContentView_parent{ function get_html($p_products_array) { //Save $p_products_array for build_html $this->p_products_array=$p_products_array; return parent::get_html($p_products_array); } function build_html() { //Get $module_content prepared by "get_html" so far $module_content=$this->get_content_array(); $module_content=$module_content['module_content']; //Loop over saved products array and add my data to the $module_content entries foreach ($this->p_products_array as $index=>$product) { $module_content[$index]['PRODUCTS_INHALT']=$product['products_inhalt']; } //Save new $module_content entries $this->set_content_data('module_content', $module_content); return parent::build_html(); }}?> Vor dem "parent::get_html($p_products_array);" fehlte ein "return", so dass das natürlich leer war... Allerdings ist in den getesteten Artikeldaten kein Feld 'products_inhalt' enthalten, so dass da nichts angezeigt wird... PHP: p_products_array=Array( [0] => Array ( [id] => 745 [name] => Seer Habeh (eingelegter Knoblauch) [checkout_information] => Seer Habeh (eingelegter Knoblauch)Haltbarkeit: ca. 28 Tage [model] => vs-0175 [image] => 745_0.jpg [inhalt] => [price] => 1.99 [quantity] => 1 [weight] => 0.1000 [shipping_time] => ca. 3-4 Tage [final_price] => 1.99 [tax_class_id] => 2 [quantity_unit_id] => [unit_name] => [attributes] => [product_type] => 1 [gm_weight] => 0.1000 ) [1] => Array ( [id] => 874 [name] => Oliven Kalamata Pikant [checkout_information] => [model] => vs-0161 [image] => 874_0.jpg [inhalt] => [price] => 1.99 [quantity] => 1 [weight] => 0.1120 [shipping_time] => ca. 3-4 Tage [final_price] => 1.99 [tax_class_id] => 2 [quantity_unit_id] => [unit_name] => [attributes] => [product_type] => 1 [gm_weight] => 0.1120 )) Die Maxime bei Overloads ist also: wenn immer irgendwie möglich in einem Overload nicht den kompletten Code der Originalmethode einbinden, weil man sonst nicht mehr updatesicher ist!
Wie dieses Beispiel zeigt, kann man auch in Klassen, die sehr Overload-unfreundlich sind, doch das eine oder andere bewirken, um nicht den kompletten Code der Originalmethode einbinden zu müssen.. Wenn man die Funktionsweise der Gambio-Klassen versteht... Aber dennoch muss Gambio hier (und an einigen anderen Stellen) dringend nachbessern, um solche Klimmzüge vermeiden zu können. Wenn in einem Loop Daten-Arrays aufbereitet werden, muss einfach am Endes des Loops eine Methode verwendet werden, die es erlaubt, in den aktuellen Datensatz eigene Daten einzubringen. Wie schon erwähnt könnte das hier so aussehen:
@Avenger, vielen Dank. Du hast bestimmt dir viel Mühe gegeben, aber trotzdem es Zeigt die Extra-Felder nicht an. Da hatte ich extra bei 2 Artikeln in den Extra-Feldern Abholartikel --> Gewürze -->Arrabiatta und basilikum bei Produkt-Inhalt werte eingegeben. Diese Werte werden aber nicht angezeigt. Bild 1 zeigt den Warenkorb mit deinen Änderungen an. Bild 2 zeigt den Warenkorb mit meinen Änderungen an. Ja genauso verstehe ich auch das Wort "Overload". Es ist bei manche Klassen und Methoden leicht zu erkennen wo man seine Erweiterung ohne das Original zu nutzen in einer Overload-Datei einbauen muss. Bei Manche Dateien ist es sehr schwer den richtigen Code festzulegen. Allerdings das liegt an mir. Mein Wissen über PHP, die ich vor einige Jahren gelernt hatte ist durch NICHT NUTZUNG verloren gegangen. Ich muss einfach mehr üben. Trotzdem möchte ich an diese Stelle mich bei dir für deine Mühe und Achtsamkeit bedanken. Falls du keine Zeit hast den Code zu verbessern ist auch nicht so schlimm. Man ist daran gewohnt bei Updates einige Datein nachträglich von Hand zu ändern. Soweit wie ich gehört und gelesen habe, dieser Aufwand bleibt bei Gambio Software noch im rahmen.