# Pozycje Produktów — Kompletny przewodnik

> Prezentacja Moduł Pozycje Produktów oferuje nowoczesny interfejs drag & drop do reorganizacji produktów w kategoriach PrestaShop, wraz z potężnymi narzędziami automatycznego sortowania i systemem przypinania, który chroni wybrane pozycje przed…

- Strona: <https://www.datafirefly.com/pl/documentation/dfproductpositions/>
- Język: pl
- Zaktualizowano: 2026-08-12
- Inne języki: [fr](https://www.datafirefly.com/documentation/dfproductpositions/index.md), [en](https://www.datafirefly.com/en/documentation/dfproductpositions/index.md), [es](https://www.datafirefly.com/es/documentation/dfproductpositions/index.md), [de](https://www.datafirefly.com/de/documentation/dfproductpositions/index.md), [it](https://www.datafirefly.com/it/documentation/dfproductpositions/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfproductpositions/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfproductpositions/index.md)
- Indeks: <https://www.datafirefly.com/pl/documentation/llms.txt>

## Prezentacja

Moduł Pozycje Produktów oferuje nowoczesny interfejs drag & drop do reorganizacji produktów w kategoriach PrestaShop, wraz z potężnymi narzędziami automatycznego sortowania i systemem przypinania, który chroni wybrane pozycje przed automatycznymi zmianami (importy ERP, CSV, skrypty zewnętrzne).

Moduł jest kompatybilny z PrestaShop 8 i 9, w trybie jedno- i wielosklepowym, i w pełni wielojęzyczny (FR, EN, ES, DE, IT). Zapisuje bezpośrednio w standardowej kolumnie `position` PrestaShop: kolejność zdefiniowana w back-office pojawia się identycznie na froncie, bez dodatkowej konfiguracji ani integracji motywu.

## Kompatybilność i wymagania

- **PrestaShop 8.0 do 9.x** — jeden pakiet obejmuje obie gałęzie, bez szczególnej konfiguracji.
- **PHP 8.0 do 8.4.**
- Jeden sklep i multistore.
- Żadnych zależności Composer, żadnych usług zewnętrznych, żadnego zewnętrznego JavaScriptu: jQuery i jQuery UI są dostarczane natywnie przez PrestaShop.
- PrestaShop 1.7 nie jest obsługiwany: API administracji i system hooków różnią się zbyt mocno, aby zagwarantować niezawodne działanie.

Kompatybilność z PrestaShop 9 jest dostępna od wersji 1.2.0 modułu. Jeśli migrujesz sklep PrestaShop 8 na PrestaShop 9, zainstaluj najnowszą wersję modułu przed lub po migracji: pozycje i przypięcia są zachowywane, bo tabela przypięć nie jest modyfikowana przy aktualizacji.

## Instalacja

1. Z back-office otwórz **Moduły > Menedżer modułów**.
2. Kliknij **Zainstaluj moduł** i upuść archiwum ZIP.
3. Po zakończeniu instalacji w menu pojawia się pozycja **Katalog > Pozycje produktów**.

Przy instalacji moduł tworzy dedykowaną tabelę dla systemu przypinania i rejestruje hooki potrzebne do automatycznego przywracania zablokowanych pozycji.

Aby **zaktualizować** moduł, po prostu wgraj nowe archiwum na stare: skrypty migracji wykonują się automatycznie, przypięcia i pozycje są zachowane.

## Interfejs

Ekran zarządzania składa się z trzech głównych stref:

- **Drzewo kategorii** po lewej: pełna nawigacja po hierarchii, natychmiastowe wyszukiwanie, licznik produktów i licznik przypięć dla każdej kategorii.
- **Pasek narzędzi** u góry po prawej: wyszukiwanie w bieżącej kategorii, menu _Blokada_ (pomarańczowe) i menu _Sortowanie automatyczne_ (fioletowe).
- **Lista produktów** w centrum: każdy produkt ma uchwyt drag & drop, numer pozycji edytowalny kliknięciem oraz cztery szybkie akcje — przypnij, przenieś na górę, przenieś na dół, edytuj kartę.

Selektory sklepu i języka u góry ekranu pozwalają przełączać kontekst bez opuszczania strony.

## Ręczna reorganizacja produktów

### Przeciągnij i upuść

Chwyć uchwyt po lewej stronie produktu i przeciągnij go w wybrane miejsce. Pozycje zapisują się automatycznie po puszczeniu.

### Bezpośrednia edycja numeru

Kliknij numer pozycji produktu, aby zmienić go z klawiatury. Zatwierdź Enterem; naciśnij Escape, aby anulować. Moduł automatycznie przesuwa pozostałe produkty, aby zmieścić nową pozycję.

### Przyciski „Na górę” i „Na dół”

Dwa szybkie przyciski wysyłają produkt na pierwszą lub ostatnią pozycję kategorii jednym kliknięciem.

## Sortowanie automatyczne

Menu **Sortowanie automatyczne** stosuje ranking do wszystkich produktów kategorii według wybranego kryterium. Dostępne kryteria:

- **Według nazwy**: A → Z lub Z → A, na podstawie nazwy w bieżącym języku.
- **Według ceny**: rosnąco lub malejąco.
- **Według stanu magazynowego**: najpierw wysoki lub najpierw niski, z porządkiem alfabetycznym jako tie-breakerem.
- **Według sprzedaży (ostatnie 90 dni)**: najlepiej lub najsłabiej sprzedające się najpierw, liczone z ważnych zamówień bieżącego sklepu.
- **Najnowsze / najstarsze**: według daty dodania produktu.
- **Referencja A → Z**: sortowanie alfabetyczne według referencji wewnętrznej.
- **Odwróć bieżącą kolejność**: odwraca całą listę.
- **Losowe przetasowanie**: losowa kolejność przy każdym wykonaniu.

Opcja **Zastosuj też do podkategorii** propaguje sortowanie na wszystkie kategorie potomne w jednej operacji.

Przypięte produkty zachowują pozycję podczas sortowania: reorganizowane są tylko produkty nieprzypięte (patrz następna sekcja).

## Przypinanie pozycji

Przypinanie pozwala zamrozić pozycję produktu, aby nie zmieniała się ani przy sortowaniu automatycznym, ani w wyniku modyfikacji zewnętrznej (import ERP, aktualizacja produktu przez BO, skrypt). To opcjonalna warstwa ochrony: bez przypinania ręczna kolejność pozostaje ważna, dopóki nie uruchomisz automatycznego sortowania i żaden system zewnętrzny nie dotknie pozycji.

### Przypinanie pojedynczego produktu

W każdym wierszu produktu ikona pinezki przełącza stan przypięty / nieprzypięty produktu w bieżącej kategorii. Przypięty produkt dostaje pomarańczową obwódkę i małą plakietkę pinezki na numerze pozycji. Licznik przypiętych w pasku statusu i w drzewie aktualizuje się automatycznie.

Możesz zawsze ręcznie przesunąć przypięty produkt (drag & drop, bezpośrednia edycja, szybkie przyciski): zablokowana pozycja podąża wtedy za ruchem. Blokowane są tylko sortowanie automatyczne i modyfikacje zewnętrzne.

### Blokada całej kategorii

Menu **Blokada > Zablokuj całą kategorię** przypina jednym ruchem wszystkie produkty bieżącej kategorii na ich aktualnych pozycjach. To zalecana opcja dla katalogów zasilanych przez ERP, który regularnie re-synchronizuje kategorie: po zablokowaniu kategorii żaden import zewnętrzny nie może zmienić kolejności.

### Odblokuj wszystko

Opcja **Odblokuj wszystko** usuwa wszystkie przypięcia bieżącej kategorii w jednej akcji. Aktualne pozycje są zachowane; znoszona jest tylko ochrona.

### Przywracanie przypiętych pozycji

Opcja **Przywróć przypięte pozycje** ręcznie odtwarza algorytm przywracania na bieżącej kategorii. Przydatne po dużym imporcie, aby wizualnie zweryfikować, że wszystkie zablokowane pozycje wróciły na miejsce — choć hook automatycznego przywracania i tak uruchamia się przy każdej aktualizacji produktu.

## Przypadki użycia

### Pierwsze N produktów ręcznie, reszta posortowana A → Z

Częsty scenariusz: ręczne pozycjonowanie 5 lub 10 pierwszych produktów kategorii (czoło półki, bestsellery, nowości), potem alfabetyczne sortowanie reszty.

1. Wybierz kategorię w drzewie.
2. Ułóż swoje N pierwszych produktów w wybranej kolejności (drag & drop lub bezpośrednia edycja).
3. Kliknij ikonę pinezki każdego z tych N produktów.
4. Otwórz **Sortowanie automatyczne > Według nazwy > A → Z**.

N przypiętych produktów zostaje na swoich pozycjach; pozostałe są sortowane alfabetycznie od pozycji N+1. Ten sam mechanizm działa ze wszystkimi kryteriami sortowania.

### Ochrona kategorii przed importem ERP

Częsty scenariusz: Twój ERP lub skrypt zewnętrzny regularnie re-synchronizuje powiązania produkt / kategoria, co zeruje pozycje.

1. Uporządkuj kategorię w wybranej kolejności.
2. Otwórz **Blokada > Zablokuj całą kategorię**.
3. Potwierdź: wszystkie produkty są przypięte na aktualnych pozycjach.

Od tego momentu każda aktualizacja zablokowanego produktu przechodząca przez PrestaShop — karta produktu w back-office, webservice, natywny import CSV, moduł zewnętrzny manipulujący obiektem `Product` — automatycznie uruchamia przywrócenie jego pierwotnej pozycji.

Skrypt piszący bezpośrednio w bazie danych, bez obiektu `Product`, nie uruchamia żadnego hooka PrestaShop: automatyczne przywracanie nie może wtedy zajść. W takim przypadku uruchom **Blokada > Przywróć przypięte pozycje** po imporcie albo wywołaj to przywracanie na końcu swojego skryptu synchronizacji.

## Multistore

Moduł jest w pełni kompatybilny z funkcją multistore PrestaShop. Selektor sklepu u góry interfejsu przełącza kontekst. Pozycje i przypięcia są niezależne per para (kategoria, sklep): przypięcie produktu w sklepie A nie blokuje go w sklepie B.

## Wielojęzyczność

Interfejs back-office jest przetłumaczony na francuski, angielski, hiszpański, niemiecki i włoski. Selektor języka u góry ekranu zmienia język drzewa i wyświetlanych nazw produktów; pozycje są wspólne dla wszystkich języków sklepu (natywne zachowanie PrestaShop).

## Wydajność

Moduł używa zoptymalizowanych zapytań SQL z joinami na istniejących indeksach (`category_product`, `product_shop`, `stock_available`). Zapis pozycji jest debounce'owany po stronie JavaScript, aby uniknąć kolejnych żądań przy szybkich reorganizacjach. Tabela przypięć ma złożony klucz główny i dwa indeksy wtórne dla bardzo szybkich przywracań, nawet na kategoriach z kilkuset produktami. Przywracanie jest ponadto chronione przed reentrancją, co eliminuje pętle przy masowych aktualizacjach.

## Odinstalowanie

Odinstalowanie modułu usuwa tabelę przypięć i odpowiadającą pozycję menu. Pozycje w `category_product` pozostają nietknięte: Twoja aktualna kolejność jest zachowana. Znoszona jest tylko ochrona (przypinanie i automatyczne przywracanie).

## FAQ

### Czy trzeba przypinać każdy produkt, aby ręczna kolejność się zachowała?

Nie. Kolejność zdefiniowana przez drag & drop lub bezpośrednią edycję jest zapisywana w standardowej kolumnie `position` PrestaShop i tam pozostaje, dopóki żadne sortowanie automatyczne ani import zewnętrzny jej nie zmieni. Przypinanie to opcjonalna warstwa ochrony, przydatna tylko wtedy, gdy chcesz łączyć ręczne pozycje z sortowaniem automatycznym albo gdy Twój ERP dotyka powiązań produkt / kategoria podczas importów.

### Czy kolejność zdefiniowana w back-office jest odzwierciedlana na froncie?

Tak, bez dodatkowej konfiguracji. Moduł zapisuje w natywnej kolumnie `category_product.position`, której PrestaShop już używa do porządkowania list produktów na froncie. Żadna integracja motywu ani dodatkowy hook nie jest wymagany.

### Mój ERP re-synchronizuje kategorie przy każdym imporcie: co robić?

Otwórz menu **Blokada > Zablokuj całą kategorię**. To przypina jednym ruchem wszystkie produkty na aktualnych pozycjach. Hook automatycznego przywracania odtwarza potem pozycje za każdym razem, gdy ERP zmodyfikuje zablokowany produkt przez obiekt `Product`. Jeśli Twój ERP pisze bezpośrednio w SQL, dodaj wywołanie **Przywróć przypięte pozycje** na końcu importu.

### Czy można przesunąć przypięty produkt?

Tak. Przypinanie chroni przed _zmianami automatycznymi_ (sortowanie auto, importy zewnętrzne). Gdy ręcznie przesuwasz przypięty produkt (drag & drop, edycja pozycji, przycisk _na górę_ lub _na dół_), zablokowana pozycja jest aktualizowana, aby podążać za ruchem.

### Czy sortowanie automatyczne działa z podkategoriami?

Tak. Zaznacz opcję **Zastosuj też do podkategorii** w menu sortowania, aby propagować kryterium na wszystkie podkategorie bieżącej kategorii w jednej operacji.

### Czy moduł jest kompatybilny z PrestaShop 9?

Tak, od wersji 1.2.0. Ten sam pakiet obejmuje PrestaShop 8.0 do 9.x, w trybie jedno- i wielosklepowym, bez zależności Composer ani zewnętrznego JavaScriptu (jQuery i jQuery UI są dostarczane natywnie przez PrestaShop).

### Czy moduł zastępuje natywny ekran pozycji kategorii?

Nie, jest uzupełnieniem. Natywny ekran PrestaShop pozostaje dostępny; moduł dostarcza nowocześniejszy interfejs z przypinaniem i sortowaniem wielokryterialnym jako bonusem.

### Lista produktów się nie ładuje albo wyszukiwanie dziwnie działa.

Wyczyść cache PrestaShop (**Zaawansowane > Wydajność**) i przeładuj stronę z wymuszeniem odświeżenia przeglądarki. Moduł dodaje numer wersji do swoich plików CSS i JS, ale cache przeglądarki lub agresywny proxy może zachować starą kopię po aktualizacji.
