Tytuł artykułu jest dość enigmatyczny 🙂 Jednak jeśli ktoś borykał się z instalacją nowego szablonu, a zdjęcia przy produktach są wybrakowane – może na to się natknąć.
Na początek wykonujemy kopię bezpieczeństwa bazy danych: Zaplecze Presta Shop -> Zaawansowane -> Kopia bezpieczeństwa DB
Ale po kolei. Problem zaczyna się przy generowaniu miniatur w nowym szablonie. Już wtedy skrypt raportuje brak zdjęć. Ma to postać komunikatu:
Brakuje oryginalnego zdjęcia lub jest puste (/img/p/1/6/9/9/1699.jpg) dla produktu o identyfikatorze 1285 Brakuje oryginalnego zdjęcia lub jest puste (/img/p/1/7/0/0/1700.jpg) dla produktu o identyfikatorze 1286 Brakuje oryginalnego zdjęcia lub jest puste (/img/p/1/7/0/1/1701.jpg) dla produktu o identyfikatorze 1287 Brakuje oryginalnego zdjęcia lub jest puste (/img/p/1/7/0/2/1702.jpg) dla produktu o identyfikatorze 1288 ........
Dodatkowo na sklepie w kategoriach i innych miejscach zamiast zdjęć produktów widać pytajniki.
Jak to naprawić?
Na początek usuwamy zdjęcia o podanych ID. Niestety jak nie ma ich oryginałów – ich nie użyjemy.
Poprzez odp. edycję podanego wyżej komunikatu wyłuskujemy same te numery ID. Czyli jak wyżej:
1699 1700 1701 1702
Następnie wywołujemy te 3 partie komend w SQL na tych numerach ID:
DELETE FROM `ps_image` WHERE `ps_image`.`id_image` = 1699; DELETE FROM `ps_image` WHERE `ps_image`.`id_image` = 1700; DELETE FROM `ps_image` WHERE `ps_image`.`id_image` = 1701; DELETE FROM `ps_image` WHERE `ps_image`.`id_image` = 1702;
DELETE FROM `ps_image_lang` WHERE `ps_image_lang`.`id_image` = 1699; DELETE FROM `ps_image_lang` WHERE `ps_image_lang`.`id_image` = 1700; DELETE FROM `ps_image_lang` WHERE `ps_image_lang`.`id_image` = 1701; DELETE FROM `ps_image_lang` WHERE `ps_image_lang`.`id_image` = 1702;
DELETE FROM `ps_image_shop` WHERE `ps_image_shop`.`id_image` = 1699; DELETE FROM `ps_image_shop` WHERE `ps_image_shop`.`id_image` = 1700; DELETE FROM `ps_image_shop` WHERE `ps_image_shop`.`id_image` = 1701; DELETE FROM `ps_image_shop` WHERE `ps_image_shop`.`id_image` = 1702;
Jednak przy dużej ilości takich niedziałających zdjęć, część z nich mogło być coverami (okładkami). Możemy w sklepie ręcznie oznaczyć które teraz mają spełniać rolę okładki albo wywołać poniższe komendy.
Globalnie usuwamy wszystkie okładki:
UPDATE `ps_image_shop` SET `cover` = NULL;
Pozyskujemy unikalne numery ID produktów i powiązanych z nimi zdjęć aby na podstawie tych dwóch numerów potem ustawić globalnie nowe okładki:
SELECT DISTINCT `id_product`, `id_image` FROM `ps_image_shop` WHERE `cover` IS NULL GROUP BY id_product HAVING COUNT(*) >=1
W PhpMyAdmin w ten sposób uzyskujemy wyciągnięcie 2 kolumn. Wyniki zapytania eksportujemy do SQL – opcja na dole:
- Sekcja „Operacja na wynikach zapytania” pod wynikami zapytania
- Link „Export”
- Metoda exportu: Szybka
- Format: CSV dla MS Excel
Taki plik włączamy w Excelu lub Libre Office Calc i odp. ustawiamy kolumny oraz ich zawartości aby w efekcie utworzyć następujący format danych który cały zaznaczamy i kopiujemy do notatnika:
UPDATE `ps_image_shop` SET `cover` = 1 WHERE id_product = 556 AND id_image = 12343 ; UPDATE `ps_image_shop` SET `cover` = 1 WHERE id_product = 557 AND id_image = 12345 ;
(użyte numery ID są przykładowe). Gotowe. Niedziałające zdjęcia są usunięte, a nowe okładki ustawione.