You are using an outdated browser. For a faster, safer browsing experience, upgrade for free today.

Manuál: Spárování modifikace v EA OCMOD Manageru (OpenCart 3)

Tento postup popisuje, jak se podařilo „spárovat“ Multishipping v modulu extension/enhancement/ea_ocmod_manager a jak to udělat obecně pro libovolnou modifikaci/modul.

Co znamená „spárovat“
EA OCMOD Manager typicky zobrazuje u modifikace:
  • Installed with: (název balíčku) – bere se z oc_extension_install.filename
  • Installed files (N): – bere se z oc_extension_path podle stejného extension_install_id
Vše stojí na konzistentní vazbě přes extension_install_id.

Datový model vazeb

  • oc_modification.extension_install_id → ukazuje na instalaci
  • oc_extension_install.extension_install_id → „hlavička“ instalace (obsahuje filename)
  • oc_extension_path.extension_install_id → seznam souborů instalovaných balíčkem
Bezpečná změna: úprava oc_extension_install.filename (je to „label“, nemění ID ani vazby).
Riziková změna: ruční přesuny/mazání řádků, které mají path_cnt nebo mod_cnt > 0.

Postup krok za krokem

1) Najdi modifikaci a zjisti její extension_install_id

Hledej podle názvu (name) nebo kódu (code):

SELECT modification_id, name, code, extension_install_id, status
FROM oc_modification
WHERE name LIKE '%NAZEV%'
   OR code LIKE '%KOD%'
ORDER BY modification_id DESC;

2) Ověř existenci instalace v oc_extension_install

Pokud má modifikace extension_install_id > 0, ověř, zda existuje odpovídající řádek:

SELECT extension_install_id, filename, extension_download_id, date_added
FROM oc_extension_install
WHERE extension_install_id = <EXT_ID>;

Interpretace výsledku:

  • Řádek existuje a filename je smysluplné → OK.
  • Řádek existuje, ale filename je -NA-.xml / -NA-.xml_ → oprav filename (krok 4).
  • Řádek neexistuje žádný → vytvoř „virtuální“ instalaci a přepoj modifikaci (krok 5).
  • EXT_ID je 0/NULL → modifikace byla importovaná ručně, postupuj krokem 5.

3) (Volitelné) Ověř „Installed files“ v oc_extension_path

SELECT COUNT(*) AS files_cnt
FROM oc_extension_path
WHERE extension_install_id = <EXT_ID>;

Pozn.: Některé modifikace mohou mít 0 souborů (čistě OCMOD), jiné mají desítky/stovky (souborová instalace).

4) Nejčastější fix: přejmenuj oc_extension_install.filename

Tohle je přesně krok, který „spravil“ Multishipping v edit obrazovce EA OCMOD Manageru (zmizelo „Installed with: -NA…“).

Pokud balíček byl .ocmod.zip, nastav takový název (nebo neutrální, ale pravdivý):

UPDATE oc_extension_install
SET filename = 'psoit-multishippingv3.3.ocmod.zip'
WHERE extension_install_id = <EXT_ID>;

Kontrola přes JOIN (EA používá tento princip):

SELECT
  m.modification_id, m.name, m.code, m.extension_install_id,
  i.filename
FROM oc_modification m
LEFT JOIN oc_extension_install i
  ON i.extension_install_id = m.extension_install_id
WHERE m.modification_id = <MOD_ID>;

5) Když chybí install záznam: vytvoř „virtuální“ instalaci a přepoj modifikaci

Pozor: Je to „kosmetická“ normalizace pro přehled v EA OCMOD Manageru. Nejde o skutečný Extension Installer workflow.
Nepřidávej ručně oc_extension_path, pokud nemáš přesný seznam souborů – to už by byla „falešná“ historie instalace.

5.1) Vlož nový řádek do oc_extension_install

INSERT INTO oc_extension_install (extension_download_id, filename, date_added)
VALUES (0, 'multishipping.ocmod.zip', NOW());

5.2) Získej nové ID

SELECT LAST_INSERT_ID() AS new_install_id;

5.3) Přepoj modifikaci na nové install ID

UPDATE oc_modification
SET extension_install_id = <new_install_id>
WHERE modification_id = <MOD_ID>;

5.4) Kontrola

SELECT
  m.modification_id, m.name, m.code, m.extension_install_id,
  i.filename
FROM oc_modification m
LEFT JOIN oc_extension_install i
  ON i.extension_install_id = m.extension_install_id
WHERE m.modification_id = <MOD_ID>;

Hromadné opravy „-NA“ názvů instalací

Pokud máš více řádků v oc_extension_install s filename -NA-.xml (nebo -NA-.xml_) a k nim existují modifikace s vyplněným code, můžeš normalizovat názvy podle code.

1) Seznam kandidátů (dry-run)

SELECT
  m.modification_id,
  m.name,
  m.code,
  m.extension_install_id,
  i.filename
FROM oc_modification m
JOIN oc_extension_install i
  ON i.extension_install_id = m.extension_install_id
WHERE i.filename IN ('-NA-.xml', '-NA-.xml_')
ORDER BY m.modification_id;

2) Hromadný UPDATE (nastav .ocmod.zip jako label)

UPDATE oc_extension_install i
JOIN oc_modification m
  ON m.extension_install_id = i.extension_install_id
SET i.filename = CONCAT(m.code, '.ocmod.zip')
WHERE i.filename IN ('-NA-.xml', '-NA-.xml_')
  AND m.code IS NOT NULL
  AND m.code <> ''
  AND m.code <> '-NA-.xml';

Kontrolní dotazy

A) Osiřelé instalace (bez path i bez modification)

SELECT i.extension_install_id, i.filename, i.date_added
FROM oc_extension_install i
LEFT JOIN oc_extension_path p
  ON p.extension_install_id = i.extension_install_id
LEFT JOIN oc_modification m
  ON m.extension_install_id = i.extension_install_id
WHERE p.extension_install_id IS NULL
  AND m.extension_install_id IS NULL
ORDER BY i.extension_install_id DESC;

B) Přehled počtu vazeb pro konkrétní install_id

SELECT
  i.extension_install_id,
  i.filename,
  (SELECT COUNT(*) FROM oc_extension_path p WHERE p.extension_install_id = i.extension_install_id) AS path_cnt,
  (SELECT COUNT(*) FROM oc_modification m WHERE m.extension_install_id = i.extension_install_id)   AS mod_cnt
FROM oc_extension_install i
WHERE i.extension_install_id = <EXT_ID>;

Poznámka: Pokud používáš jiný prefix tabulek než oc_, nahraď jej. Pokud pracuješ v jiné databázi, uprav název schématu.