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 mechanizmprogrammable, 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