Last Updated 8 days ago

Feeder — jak podpiąć własne źródło danych (własna tabela / metoda PHP) pod pole eksportowe?

Moduł Feeder obsługuje mechanizm programmable, który pozwala wywołać dowolną metodę PHP dla każdego produktu i użyć jej wyniku jako wartości pola w XML. Nie wymaga modyfikacji modułu i jest odporne na aktualizacje.

Konfiguracja pola w Feederze:
- Source: Custom value
- Custom value: programmable.NazwaKlasy.nazwaMetody
- Path: docelowa ścieżka XML, np. g:description

---

Wymagania dotyczące klasy i metody:

Metoda może być statyczna lub niestatyczna — Feeder wykrywa to automatycznie przez PHP Reflection. Dla metody niestatycznej klasa musi mieć bezargumentowy konstruktor.

Sygnatura:

public static function nazwaMetody(array $productData): string


Argument $productData zawiera:

[
    'product'          => $product,       // obiekt Product; dostępne: ->id, ->id_lang, ->id_shop
    'manufacturer'     => $manufacturer,  // obiekt Manufacturer
    'default_category' => $category,      // obiekt Category
    'combination'      => $combination,   // tylko przy wariantach; id_product_attribute = $combination->id
]


Metoda powinna zwracać string (lub tablicę stringów dla pól wielowartościowych). Feeder automatycznie stosuje htmlspecialchars() na zwracanej wartości — jeśli wartość zawiera HTML, w konfiguracji pola należy włączyć opcję CDATA.

---

Gdzie umieścić klasę:

Katalog classes/ własnego modułu — PrestaShop automatycznie rejestruje te klasy w autoloaderze:

modules/mójmoduł/classes/NazwaKlasy.php


Klasa powinna mieć globalnie unikalną nazwę. Namespace obsługiwany — z backslashami: programmable.MyShop\NazwaKlasy.metoda.

---

Przykład — własna tabela z opisem dla Google Merchant Center:

id;
        $idLang    = (int) $product->id_lang;

        $row = Db::getInstance()->getRow('
            SELECT description
            FROM `' . _DB_PREFIX_ . 'gmc_product_lang`
            WHERE id_product = ' . $idProduct . '
              AND id_lang = '    . $idLang
        );

        if ($row && !empty($row['description'])) {
            return $row['description'];
        }

        // fallback na standardowy opis skrócony
        return strip_tags($product->description_short);
    }
}


W Feederze: Custom value = programmable.GmcFeedSource.getDescription

Please Wait!

Please wait... it will take a second!

Kliknij by skopiować