Hallo beisammen, ich versuche gerade die Klasse CSVSource zu überladen. Ich brauche nur in den beiden Funktionen transform_to_csv und build_csv_line kleine anpassungen. Der Overload ist fertig unter /GXModules/ff-webdesigner/custom/Shop/Overloads/CSVSource/ff_CSVSource.inc.php und wird anscheinend auch geladen. Denn: unter /admin/csv.php bleibt der Hauptbereich leer anstatt die Export-Schemata anzuzeigen. Welche Teile der CSVSource.php brauche ich noch um das wieder zu richten?
@ff-webdesigner Ohne den Inhalt deiner Overload Datei zu kennen, kann man das nicht sagen. Aber eine häufige Fehlerquelle ist, man vergisst das parent:: aufzurufen mit der Funktion die man überlädt.
ja, den Fehler hab ich definitiv auch einige Male gemacht. Ist aber hier nicht die Ursache. Dastimmt schon irgendwas vor Aufruf der zentralen Exportfunktionen nicht. Inhalt meines Overloads mit nur 5 minikleinen Anpassungen: PHP: class ff_CSVSource extends ff_CSVSource_parent{ protected function transform_to_csv($p_scheme_id, &$p_data_array, $p_new_file) { // bringt auch nix parent::proceed(); $t_return_value = ''; $t_success = true; $t_field_names = $this->v_scheme_model_array[$p_scheme_id]->get_sorted_field_names(); $t_quotes = $this->v_scheme_model_array[$p_scheme_id]->v_data_array['field_quotes']; $t_separator = $this->v_scheme_model_array[$p_scheme_id]->v_data_array['field_separator']; $t_separator = str_replace('\t', "\t", $t_separator); if ($p_new_file) { $t_data_array = []; $t_data_array[0] = []; foreach ($t_field_names as $t_field_name) { $t_data_array[0][$t_field_name] = $t_field_name; } // mod ff $p_scheme_id an build_csv_line übergeben $t_formatted = $this->build_csv_line($t_data_array, $t_field_names, $t_separator, $t_quotes, $p_scheme_id); $t_success &= $this->write_data_set($t_formatted, $t_return_value); } // mod ff $p_scheme_id an build_csv_line übergeben $t_formatted = $this->build_csv_line($p_data_array, $t_field_names, $t_separator, $t_quotes, $p_scheme_id); $t_success &= $this->write_data_set($t_formatted, $t_return_value); return $t_return_value; } // mod ff $p_scheme_id an build_csv_line übergeben protected function build_csv_line(&$p_data_array, &$p_field_names, &$p_delimiter, &$p_enclosure, $p_scheme_id) { // bringt auch nix parent::proceed(); $t_field_names_count = count($p_field_names); $t_formatted = ''; $counter=0; foreach ($p_data_array as $t_data_row) { // mod ff produkte mit bestand und Lagerort "Verfügungslager" exportieren if($p_scheme_id == "27") if($t_data_row["Lagerbestand"] != "Lagerbestand"){ if($t_data_row["Lagerbestand"] == "0.0000") continue; if(strpos($t_data_row["Lagerort"],"Verfügungslager")===FALSE) continue; } foreach ($p_field_names as $t_field_name) { $t_formatted .= $p_enclosure . $this->escape_enclosure_character($t_data_row[$t_field_name], $p_enclosure) . $p_enclosure; if ($t_field_name != $p_field_names[$t_field_names_count - 1]) { $t_formatted .= $p_delimiter; } else { $t_formatted .= "\n"; } } if ($counter > 10000) break; } return $t_formatted; }}
Du musst nicht die parent:roceed aufrufen, sondern die parent::transform_to_csv damit dein Overload funktioniert und kein Fehler auftritt. Beim Überladen musst du immer die Elternmethode auch aufrufen, die du überlädst, sonst laufen die normalen Standardabläufe nicht mehr.
ahhhhh....wunderte mich schon dass die CSVSource.php als erste von 20 fertigen Overloads nicht die funktion proceed() hatte. hab den code der funktionen geändert in PHP: class ff_CSVSource extends ff_CSVSource_parent{ protected function transform_to_csv($p_scheme_id, &$p_data_array, $p_new_file) { parent::transform_to_csv($p_scheme_id, &$p_data_array, $p_new_file); // mein code return $t_return_value; } // mod ff $p_scheme_id an build_csv_line übergeben protected function build_csv_line(&$p_data_array, &$p_field_names, &$p_delimiter, &$p_enclosure, $p_scheme_id) { parent::build_csv_line(&$p_data_array, &$p_field_names, &$p_delimiter, &$p_enclosure, $p_scheme_id); // mein code return $t_formatted; }} Caches für Seiten und Module geleert. Auf der Seite /admin/csv.php bleibt leider der Hauptbereich weiter leer, auch wenn ich in parent:: keine parameter übergebe...
Du musst den return Wert auch zurückgeben mit der Originalfunktion, das hatte ich in dem Beispiel schon so gebaut, dass es das tut.
mea culpa, ausfahren oben übersehen. aber auch dein code oben endet in leerem hauptbereich. ist nicht euer job sowas zu lösen. hoffe noch auf andere entwickler... ich denk auch der fehler liegt nicht in den methoden/funktionen. die werden ja erst beim exportieren aufgerufen. aber schon die seite die eigentlich die exportschemata anzeigen soll bleibt leer. da fehlt irgendwas anderes aus der CSVSource.php...
@ff-webdesigner Das kann eine Kleinigkeit sein, die man jetzt aus den Code-Zeilen nicht sehen kann. Da müsste man dann auf dem Server direkt schauen wo das Problem liegt. Wenn du ein Ticket aufmachst, kann ich da kurz reinschauen, wenn du das in einem Testshop hast.