4 września, 2026
Hawkly - Sklep SEO

PrestaShop 1.7 – zmiana widoczności produktów za pomocą SQL

Podczas importowania lub masowego dodawania produktów do PrestaShop 1.7 może zdarzyć się, że ich widoczność zostanie ustawiona nieprawidłowo. Ręczna edycja każdego produktu jest możliwa przy niewielkim katalogu, ale w przypadku setek lub tysięcy pozycji szybko staje się bardzo czasochłonna.

Jeżeli chcemy jednocześnie zmienić widoczność większej liczby produktów, możemy wykonać odpowiednie zapytanie bezpośrednio w bazie danych.

W ten sposób można na przykład ukryć wszystkie produkty ze stanem magazynowym równym 0 albo przywrócić widoczność produktów, które są dostępne na magazynie.

Jak masowo zmienić widoczność produktów w PrestaShop?

W pierwszej kolejności logujemy się do narzędzia służącego do zarządzania bazą danych, np. phpMyAdmin.

Następnie wybieramy bazę danych wykorzystywaną przez sklep i przechodzimy do zakładki SQL.

W zależności od tego, jaki efekt chcemy uzyskać, możemy wykonać jedno z poniższych zapytań.

Ukrywanie produktów ze stanem magazynowym 0

Jeżeli wszystkie produkty, których stan magazynowy wynosi 0, mają otrzymać ustawienie Widoczność: Nigdzie, możemy zastosować:

UPDATE ps_product_shop
SET visibility = 'none'
WHERE id_product IN (
    SELECT id_product
    FROM ps_stock_available
    WHERE quantity = 0
      AND id_product_attribute = 0
);

Zapytanie wyszukuje produkty ze stanem magazynowym równym zero, a następnie zmienia wartość pola visibility na:

none

W PrestaShop odpowiada to ustawieniu Widoczność: Nigdzie.

Pokazywanie produktów dostępnych na magazynie

Jeżeli chcemy ustawić Widoczność: Wszędzie dla produktów posiadających stan magazynowy większy od zera, możemy wykonać:

UPDATE ps_product_shop
SET visibility = 'both'
WHERE id_product IN (
    SELECT id_product
    FROM ps_stock_available
    WHERE quantity > 0
      AND id_product_attribute = 0
);

Wartość:

both

odpowiada ustawieniu Widoczność: Wszędzie.

Po wykonaniu zapytania produkty posiadające dodatni stan magazynowy zostaną więc ustawione jako widoczne zarówno w katalogu, jak i w wynikach wyszukiwania sklepu.

Jakie wartości może przyjmować visibility w PrestaShop?

Pole visibility może służyć do określenia sposobu prezentowania produktu w sklepie.

Najważniejsze wartości to:

  • both – produkt widoczny w katalogu i wyszukiwarce,
  • catalog – produkt widoczny w katalogu,
  • search – produkt widoczny w wynikach wyszukiwania,
  • none – produkt niewidoczny w katalogu i wyszukiwarce.

Dzięki temu za pomocą SQL można wykonywać również inne masowe operacje.

Przykładowo, aby ustawić wszystkim produktom z określonego zapytania widoczność wyłącznie w katalogu, należy wykorzystać:

UPDATE ps_product_shop
SET visibility = 'catalog'
WHERE ...;

Warunek WHERE powinien oczywiście precyzyjnie określać produkty, które chcemy zmodyfikować.

Uwaga na prefiks ps_

W przykładach wykorzystany został domyślny prefiks tabel PrestaShop:

ps_

Nie oznacza to jednak, że każda instalacja posiada identyczne nazwy tabel.

Jeżeli podczas instalacji zastosowano inny prefiks, np.:

shop_

tabele mogą nazywać się:

shop_product_shop
shop_stock_available

W takim przypadku zapytanie SQL należy odpowiednio zmodyfikować.

Przed jego wykonaniem zawsze sprawdź rzeczywiste nazwy tabel w swojej bazie danych.

Uwaga na produkty posiadające kombinacje

W przedstawionych zapytaniach znajduje się warunek:

id_product_attribute = 0

Ma to znaczenie w przypadku produktów posiadających kombinacje, np. różne kolory, pojemności lub rozmiary.

Stany magazynowe produktów z kombinacjami mogą być reprezentowane przez dodatkowe rekordy w ps_stock_available. Z tego powodu prostego zapytania nie należy bez wcześniejszej weryfikacji stosować jako uniwersalnego rozwiązania dla każdego katalogu.

Przykładowo produkt może posiadać kilka wariantów, z których część ma stan 0, a pozostałe są nadal dostępne.

Jeżeli sklep intensywnie wykorzystuje kombinacje, przed wykonaniem masowej aktualizacji warto sprawdzić strukturę danych dla kilku przykładowych produktów.

Uwaga na Multistore

Kolejną istotną kwestią jest funkcja Multistore.

Tabela:

ps_product_shop

przechowuje dane powiązane z konkretnymi sklepami. Jeżeli jedna instalacja PrestaShop obsługuje kilka sklepów, zapytanie może wymagać dodatkowego warunku określającego id_shop.

Przykładowo:

UPDATE ps_product_shop
SET visibility = 'none'
WHERE id_shop = 1
  AND id_product IN (
      SELECT id_product
      FROM ps_stock_available
      WHERE quantity = 0
        AND id_product_attribute = 0
  );

W rzeczywistym środowisku Multistore należy również zweryfikować powiązanie stanów magazynowych z id_shop oraz id_shop_group.

Nie należy wykonywać masowej aktualizacji całej tabeli, jeżeli nie jesteśmy pewni, których sklepów dotyczą modyfikowane rekordy.

Najpierw sprawdź, które produkty zostaną zmienione

Przed wykonaniem UPDATE dobrą praktyką jest uruchomienie najpierw odpowiadającego mu zapytania SELECT.

Dla produktów ze stanem 0 może wyglądać ono następująco:

SELECT id_product, quantity
FROM ps_stock_available
WHERE quantity = 0
  AND id_product_attribute = 0;

Pozwala to zobaczyć, które produkty spełniają warunek, zanim wprowadzimy zmiany w bazie danych.

Dopiero po sprawdzeniu wyników możemy wykonać właściwe zapytanie UPDATE.

Wykonanie zapytania i wyczyszczenie cache

Jeżeli upewniliśmy się, że zapytanie obejmuje właściwe produkty, możemy nacisnąć przycisk Wykonaj w phpMyAdmin.

Po zakończeniu operacji warto wyczyścić pamięć podręczną PrestaShop, aby upewnić się, że sklep korzysta z aktualnych danych.

Cache można wyczyścić z poziomu panelu administracyjnego PrestaShop.

Następnie sprawdzamy kilka zmodyfikowanych produktów zarówno w panelu administracyjnym, jak i po stronie sklepu.

Zrób kopię bazy danych przed wykonaniem UPDATE

Masowe zapytanie SQL może w ciągu kilku sekund zmienić setki lub tysiące rekordów. Dlatego przed jego wykonaniem koniecznie warto utworzyć kopię zapasową bazy danych.

Szczególną ostrożność należy zachować przy zapytaniach UPDATE bez odpowiednio przygotowanego warunku WHERE.

Przykładowe zapytanie:

UPDATE ps_product_shop
SET visibility = 'none';

zmieni widoczność wszystkich rekordów znajdujących się w tabeli.

Jeżeli nie jesteśmy pewni działania zapytania, najbezpieczniej przetestować je wcześniej na kopii bazy lub środowisku testowym.

Masowa zmiana widoczności produktów za pomocą SQL

Bezpośrednia modyfikacja bazy danych może być bardzo wygodnym rozwiązaniem, gdy trzeba zmienić widoczność dużej liczby produktów w PrestaShop 1.7.

Zamiast edytować każdą pozycję osobno, możemy jednym zapytaniem ustawić produkty ze stanem 0 jako niewidoczne albo przywrócić widoczność towarom, które ponownie znajdują się na magazynie.

Trzeba jednak pamiętać, że bezpośrednie zapytania SQL omijają standardową logikę aplikacji PrestaShop. Z tego względu przed wykonaniem operacji należy wykonać backup, sprawdzić prefiks tabel, sposób obsługi stanów magazynowych, kombinacje produktów oraz konfigurację Multistore.

W przypadku prostego sklepu takie rozwiązanie może znacznie przyspieszyć pracę. W bardziej rozbudowanych instalacjach zapytanie powinno zostać dostosowane do konkretnej struktury i konfiguracji sklepu.

OCEŃ TEN ARTYKUŁ

Średnia ocena 5 / 5. Ilość głosów 1

0
0
Twój koszyk
Twój koszyk jest pusty!Wróć do sklepu!
logo hawkly czarne przezroczyste duze
Przegląd prywatności

Ta strona korzysta z ciasteczek, aby zapewnić Ci najlepszą możliwą obsługę. Informacje o ciasteczkach są przechowywane w przeglądarce i wykonują funkcje takie jak rozpoznawanie Cię po powrocie na naszą stronę internetową i pomaganie naszemu zespołowi w zrozumieniu, które sekcje witryny są dla Ciebie najbardziej interesujące i przydatne.