Skip to content

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

  1. 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;

  2. Zkontrolujte nové tabulky

  3. Ujistěte se, že existují: menu, menu_node, menu_node_lang, menu_node_path
  4. 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 sloupcem nazev)
  • @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 menu
  • base_node_id - ID kořenového uzlu
  • pocet_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á

  1. Vytvoří nový záznam menu v tabulce menu
  2. Vytvoří base_node - kořenový uzel hierarchie
  3. Migruje uzly podle hloubky (úrovně 0, 1, 2)
  4. Mapuje staré ID na nová ID (pomocná tabulka _migrate_map)
  5. Doplní jazykové verze z copy_menu_jazyky do menu_node_lang
  6. Vyplní closure table menu_node_path pro rychlé dotazy na hierarchii
  7. Zavolá menu_reorder_siblings pro 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:

  1. Obnovte staré tabulky z backupu
  2. 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;