Table of Contents
Hook i custom_functions.php
Poniższa dokumentacja jest aktualizowana (a przynajmniej staramy się) do najnowszych wersji modułu i może zawierać informacje, które nie zadziałają w starszych wersjach modułu
Każda aktualizacja modułu zawiera aktualny plik *custom_functions.example.php* z przykładami
Poniższe funkcje wymagają wersji Advanced modułu
Aby najlepiej pokazać, jak moduł korzysta z haków i pliku custom_functions, Price Wars II wykonuje następujący kod:
try {
Hook::exec('actionPricewarsBeforeOutput', array(
'product' => $product_return,
'id_xml' => $xml['id_xml'],
'id_lang' => $this->getLangId(),
'service' => $xml['service'],
'module' => $this
));
if(function_exists('pricewars2_product')) {
pricewars2_product ($product_return, $xml['id_xml'], $this->getLangId(), $xml['service']);
}
} catch (\pricewars2\pricewarsSkipException $e) {
$this->logger->log('!!! Produkt został pominięty przez funkcję użytkownika. Thrown \pricewars2\pricewarsSkipException: '. $e->getMessage());
return false;
}
Hook:exec
daje identyczne możliwości jak funkcja pricewars2_product. Jedyna różnica, to przekazywanie dodatkowych parametrów.
Najważniejsze informacje:
- Aby pominąć produkt z importu, należy wyrzucić wyjątek
throw new \pricewars2\pricewarsSkipException('Wiadomość/Powód pominięcia')
- Parametr
product
Przekazuje obiekt (typu\pricewars2\product
) gotowy do wyświetlenia przez XML. Można go dowolnie modyfikować i w ten sposób zmieniać informacje o produkcie wyświetlane w XML - Parametr
id_xml
zawiera ID obecnie przetwarzanego XML. Może zostać użyte, aby daną zasadę ograniczyć tylko do konkretnego pliku XML - Parametr
id_lang
ID języka prestashop użytego przy generowaniu XML - Parametr
service
pole zawiera ciąg znaków reprezentujący obecnie użyty generator. Przykładowe wartości to npceneo
,google
,facebook
itp. - Parametr
module
(niedostępny w custom_functions) zawiera instancję modułu priceWars2. Ten parametr umożliwia wypisanie informacji do logów poprzez wywołanie$params['module']->getLogger()->log('[nazwa_modulu] Informacja')
Jako dobrą praktykę, prosimy o dodawanie informacji o module, który zapisuje do logów.
Sprawdzanie dostępnych pól w obiekcie \pricewars2\product
Sprawdzenia jakie są dostępne wartości można dokonać przez funkcję var_dump
// dla hook
var_dump($params['product']);
// dla custom_functions.php
var_dump($product);
Tworzenie własnych smartTagów
Moduł pozwala na dynamiczne przypisywanie wartości do obiektu, dostęp do zdefiniowanej wartości można następnie uzyskać za pomocą smartTagu.
<?php
function pricewars2_product(\pricewars2\product $product, $id_xml, $id_lang, $service, $settings){
$product->hello = 'World!';
}
Taki kod spowoduje, że w sekcji dodatkowych tagów XML będzie można użyć smartTagu {hello}
, który to wstawi wartość World!
W skrócie <tag>{hello}<tag>
spwooduje wygenerowanie tagu <tag>World!</tag>
W smartTagi można również wstawić części kodu XML (widoczne w przykładach poniżej)
Więcej o smartTagach można przeczytać tutaj
Przykładowe możliwości custom_functions.php
Tworzenie własnych etykiet Google
<?php
function pricewars2_product(\pricewars2\product $product, $id_xml, $id_lang, $service, $settings){
if($id_service = 'google'){
$product->custom_label_0 = 'bestseller';
$product->custom_label_1 = 'new';
$product->custom_label_2 = '';
$product->custom_label_3 = '';
$product->custom_label_4 = '';
$product->custom_label_5 = '';
if($product->getPriceBrutto()) < 10)
$product->custom_label_5 = 'ponizej10';
}
}
Aby wstawić tagi w XML google należy dodać takie wpisy do sekcji dodatkowych tagów XML:
<g:custom_label_0>{custom_label_0}</g:custom_label_0>
<g:custom_label_1>{custom_label_1}</g:custom_label_1>
<g:custom_label_2>{custom_label_2}</g:custom_label_2>
<g:custom_label_3>{custom_label_3}</g:custom_label_3>
<g:custom_label_4>{custom_label_4}</g:custom_label_4>
<g:custom_label_5>{custom_label_5}</g:custom_label_5>
Ograniczanie funkcjonalności do konkretnego XML
<?php
function pricewars2_product(\pricewars2\product $product, $id_xml, $id_lang, $service, $settings){
// "Doklejenie" na początku nazwy produktu dla XML o ID = 1 i produktu z ceną poniżej 10zł ciągu znaków "Taniej niż 10zł!"
if($id_xml = 1){ // Reguła zadziała tylko dla XML o ID 1
if($product->price < 10)
$product->name = 'Taniej niż 10zł! ' . $product->name;
}
}
Wykluczanie produktów na podstawie kategorii
Zakładając, żę w sklepie jest kategoria ID 35
o nazwie Nie eksportuj do xml
.
To jeśli chcemy np. wykluczyć produkty znajdująće się w tej kategorii można to zrobić w nast. sposób:
W tym przypadku, brane pod uwagę są kategorie pomocnicze jak i kategoria główna produktu
<?php
function pricewars2_product(\pricewars2\product $product, $id_xml, $id_lang, $service, $settings){
foreach($product->categories as $category) {
if($category->id == 35) {
throw new \pricewars2\pricewarsSkipException('Produkt znajduje się w kategorii 35 (Nie eksportuj do Ceneo)');
}
}
}
Dodawanie cech na podstawie kategorii
<?php
function pricewars2_product(\pricewars2\product $product, $id_xml, $id_lang, $service, $settings){
if(strpos($product->categories[0]->name,'kobieta'))
$product->gender = 'female';
if(strpos($product->categories[0]->name,'mężczyzna'))
$product->gender = 'male';
if(strpos($product->categories[0]->name,'garnitur'))
$product->gender = 'male';
if(strpos($product->categories[0]->name,'sukienka'))
$product->gender = 'male';
}
Następnie w sekcji dodatkowych tagów, mozemy wstawić wygenerowaną wartość
<gender>{gender}</gender>
Dodanie informacji do nazwy zależnie od ceny produktu
<?php
function pricewars2_product(\pricewars2\product $product, $id_xml, $id_lang, $service, $settings){
// "Doklejenie" na początku nazwy produktu dla XML o ID = 1 i produktu z ceną poniżej 10zł ciągu znaków "Taniej niż 10zł!"
if($id_xml = 1){ // Reguła zadziała tylko dla XML o ID 1
if($product->price < 10)
$product->name = 'Taniej niż 10zł! ' . $product->name;
}
}
Redukcja stanów na określony
<?php
function pricewars2_product(\pricewars2\product $product, $id_xml, $id_lang, $service, $settings){
// Redukcja stanów magazynowych wszystkich produktów na 10
$product->quantity_o = 10;
}
Podmiana Identyfikatora produktu
Możliwe jest, iż ktoś będzie chciał z jakiegoś powodu podmienić ID produktu eksportowane do XML - np. na ID systemu magazynowo-księgowego.
WAŻNE W przypadku porównywarek wymagających dwóch XML (jak integracja XML Empik i Carrefour ) wymagane jest wprowadzeni zmian w obu polach.
<?php
function pricewars2_product(\pricewars2\product $product, $id_xml, $id_lang, $service, $settings){
// Moduł nie sprawdza, czy użytkownik nadaje unikalne ID
// w gestii programisty pozostawiamy upewnienie się, że eksportowane ID są unikalne.
$product->id_product = $nowe_id;
}
Zrzut wszystkich cech do XML
<?php
function pricewars2_product(\pricewars2\product $product, $id_xml, $id_lang, $service, $settings){
if($service === 'ceneo'){
$xml = '';
foreach($product->features as $f){
$xml .= "<a name=\"{$f['name']}\"><![CDATA[{$f['value']}]]></a>";
}
$product->additional_xml = str_replace('</attrs>', $xml.'</attrs>', $product->additional_xml);
}
}
Ustawienia specyficzne dla XML
Skąpiec
:v Minimalna Wersja modułu 4.1.3
availability_force
może przyjmować wartości:
-
false
- Decydują ustawienai stanu magazynowego(stock > 0 ? 1 : 0)
-
0
- Nie prezentuj oferty -
1
- wysyłka do godziny / natychmiast, -
24
- wysyłka następnego dnia, -
48
- wysyłka do 2 dni, -
72
- wysyłka do 3 dni, -
168
- wysyłka do tygodnia -
336
- wysyłka do 14 dni