am: 06. September 2018, 09:56:54
Hallo Forum!
Ich habe einen Fehler beim Verschieben einer oder mehrerer Kategorien gefunden. Ich verwende die Version "v2.0.3.0 rev 10907".
Bei der Auswahl "Verschiebe alle nach:" werden immer alle Kategorien angezeigt. Bei Auswahl der falschen Kategorie kann ein Zyklus in der Datenbank-Tabelle "categories" entstehen, sodass die rekursive Funktion "xtc_get_subcategories" in einer Endlosschleife stecken bleibt. Dadurch kann z.B. die Navigation nicht erzeugt werden und der Shop ist nicht mehr aufrufbar.
Gehen wir von folgender Kategorie-Struktur aus:
Top
- A
-- A1
--- A11
Verschiebe ich nun fälschlicherweise die Kategorie A in die Kategorie A1 ergeben sich folgende Einträge in der Tabelle "categories":
categories_id parent_id ...
... ... ...
100 (A) 101 (A1) ...
101 (A1) 100 (A) ...
... ... ...
Diese Fehlbedienung wird verhindert, wenn bei der Auswahl der Zielkategorie kritische Kategorien nicht angezeigt werden. Folgender Code filtert jede zu verschiebende Kategorie mit deren Unterkategorien aus:
$category_tree_exclude = array();if ((isset($_POST['multi_categories'])) && (is_array($_POST['multi_categories']))) { foreach ($_POST['multi_categories'] as $moved_category) { $category_tree_exclude = xtc_get_category_tree
($moved_category, '', '0', $category_tree_exclude, true); }}$category_ids_exclude = array();if (isset($current_category_id)) { $category_ids_exclude[] = $current_category_id;}foreach ($category_tree_exclude as $exclude_category) { $category_ids_exclude[] = $exclude_category['id'];}$category_tree = array();$complete_category_tree = xtc_get_category_tree
();foreach ($complete_category_tree as $current_category) { if (!in_array($current_category['id'], $category_ids_exclude)) { $category_tree[] = $current_category; }} Er ersetzt folgenden Code in Zeile 769 in der Datei "admin/includes/modules/categories_view.php":
$category_tree = xtc_get_category_tree();
Linkback: https://www.modified-shop.org/forum/index.php?topic=39467.0