Menu Migration from Old Structure
Migrace ze staré struktury menu (copy_menu, copy_menu_jazyky) na novou hierarchickou strukturu (menu, menu_node, menu_node_lang, menu_node_path).
Příprava
-
Zálohujte staré tabulky (důležité!)
CREATE TABLE copy_menu_backup AS SELECT * FROM copy_menu; CREATE TABLE copy_menu_jazyky_backup AS SELECT * FROM copy_menu_jazyky; -
Zkontrolujte nové tabulky
- Ujistěte se, že existují:
menu,menu_node,menu_node_lang,menu_node_path - Viz
database-structure.md
Spuštění migrace
Krok 1: Otevřete SQL skript
- Soubor:
app/migrations/db/migration-from-old-menu.sql - Otevřete v AdminNeo SQL konzoli nebo phpMyAdminu
Krok 2: Nastavte parametry (řádky 9-12)
SET @src_nazev = 'Hlavní menu'; -- Název menu v tabulce copy_menu
SET @src_web_id = 0; -- ID webu
SET @tbl_menu = 'copy_menu'; -- Název staré tabulky menu
SET @tbl_menu_jazyky = 'copy_menu_jazyky'; -- Název staré tabulky jazykových dat
Změňte hodnoty podle vašeho schématu:
@src_nazev- Přesný název menu, které migrujete (musí se shodovat se sloupcemnazev)@src_web_id- ID webu, ke kterému menu patří@tbl_menu,@tbl_menu_jazyky- Pokud mají staré tabulky jiné názvy, upravte
Krok 3: Spusťte skript
- Zkopírujte celý obsah SQL souboru do konzole
- Spusťte (Ctrl+Enter nebo tlačítko Execute)
Krok 4: Ověřte výsledek
Skript vypíše na konci:
status- 'Migrace dokončena'menu_id- ID nového menubase_node_id- ID kořenového uzlupocet_uzlu- Počet migrovaných uzlů
Následuje tabulka se všemi migrovanými prvky (old_id → new_id, úroveň, pořadí).
Co skript dělá
- Vytvoří nový záznam menu v tabulce
menu - Vytvoří base_node - kořenový uzel hierarchie
- Migruje uzly podle hloubky (úrovně 0, 1, 2)
- Mapuje staré ID na nová ID (pomocná tabulka
_migrate_map) - Doplní jazykové verze z
copy_menu_jazykydomenu_node_lang - Vyplní closure table
menu_node_pathpro rychlé dotazy na hierarchii - Zavolá
menu_reorder_siblingspro seřazení uzlů
Poznámky
- Skript zachovává všechna metadata: odkazy, atributy HTML, SEO data, viditelnost
- Uzly zůstávají v původním pořadí (
gporadi) - Všechny staré ID se mapují na nová ID pro případné references
- Schválené je až 3 úrovně hloubky menu (úrovně 0, 1, 2)
Rollback
Pokud migrace selže nebo potřebujete vrátit zpět:
- Obnovte staré tabulky z backupu
- Smazte nově vytvořené záznamy z
menu,menu_node,menu_node_lang,menu_node_path
-- Zrušit migraci
DELETE FROM menu_node_path WHERE menu_id = @menu_id;
DELETE FROM menu_node_lang WHERE node_id IN (SELECT id FROM menu_node WHERE menu_id = @menu_id);
DELETE FROM menu_node WHERE menu_id = @menu_id;
DELETE FROM menu WHERE id = @menu_id;