Jump to content

Przesłanie produktu do koszyka


Recommended Posts

Witam,

Mój problem polega na tym, że mam CMS'a, a w nim skrypt PHP, który przesyła odpowiedni produkt do bazy danych sklepu (prestashop), a następnie przekierowuje do strony sklepu. Niestety, gdy wejdę do koszyka to nie widzę tego produktu. Tablice, które wypełniam w bazie danych to ps_product, ps_product_lang, ps_product_shop, ps_cart_product i ps_cart. Myślę, że problem polega na tym, że nie wiem do którego koszyka się odwołać w ps_cart. Jak sprawdzić czy koszyk już istnieje? A jeżeli istnieje to go wykorzystać, a w przeciwnym razie jak stworzyć nowy koszyk, aby ten poprawnie był przyjęty przez sklep? Proszę o pomoc.

 

Pozdrawiam,

brando007

Link to comment
Share on other sites

Product.php (classes/product.php)

jest to typowe programowanie obiektowe

definiujesz obiekt Product ($product = new Product(); )

i definiujesz wszystkie zmienne charakteryzujące produkt (spisane w definicji klasy)

na końcu metodę add() i produkt ląduje w bazie :)

  • Like 1
Link to comment
Share on other sites

Ok, więc mam taki kod:

 

include 'sklep/classes/Product.php';

$product = new Product();
$product->price = 22;
$product->id_tax_rules_group = 0;
$product->name = 'test';
$product->id_manufacturer = 0;
$product->id_supplier = 0;
$product->quantity = 1;
$product->minimal_quantity = 1;
$product->additional_shipping_cost = 0;
$product->wholesale_price = 0;
$product->ecotax = 0;
$product->width = 0;
$product->height = 0;
$product->depth = 0;
$product->weight = 0;
$product->out_of_stock = 0;
$product->active = 0;
$product->id_category_default = 0;
$product->category = 0;
$product->available_for_order = 0;
$product->show_price = 1;
$product->on_sale = 0;
$product->online_only = 1;
$product->meta_keywords = 'test';
 
$product->add();

 

Wywołuję go po zatwierdzeniu formularza będąc jeszcze w CMS'ie (konkretnie chodzi o CMS Made Simple) i niestety produkt nie dodaje się do bazy danych. Dane CMS'a i sklepu znajdują się w jednej bazie danych, więc moim zdaniem to nie powinno stanowić problemu. Ale jeżeli to stanowi problem to jak podłączyć się do sklepu? Próbowałem użyć standardowych funkcji mysql_connect i mysql_select_db, lecz to nic nie dało.

Link to comment
Share on other sites

generalnie, to musiałbyś zaincludować nie tylko klasę product, ale i pozostałe klasy które tworzą cały system,

bez klasy Object nic nie zrobisz, bez klasy mysql też,  prestashop to organizm, niestety trzeba zaincludować cały, nie tylko jego małe wycinki 

 

najwazniejsze jest to, aby dołączyć: config.inc.php oraz init.php, reszta załączy się sama :)

  • Like 1
Link to comment
Share on other sites

Zaincludowałem teraz te pliki. Z poziomu CMS'a nic nie dodawało do bazy, więc zrobiłem osobny plik PHP znajdujący się w katalogu sklepu i teraz skrypt wygląda tak:

 

include 'init.php';
include 'config/config.inc.php';
include 'classes/Product.php';

$product = new Product();
$product->price = 22;
$product->id_tax_rules_group = 0;
$product->name = 'test';
$product->id_manufacturer = 0;
$product->id_supplier = 0;
$product->quantity = 1;
$product->minimal_quantity = 1;
$product->additional_shipping_cost = 0;
$product->wholesale_price = 0;
$product->ecotax = 0;
$product->width = 0;
$product->height = 0;
$product->depth = 0;
$product->weight = 0;
$product->out_of_stock = 0;
$product->active = 0;
$product->id_category_default = 0;
$product->category = 0;
$product->available_for_order = 0;
$product->show_price = 1;
$product->on_sale = 0;
$product->online_only = 1;
$product->meta_keywords = 'test';
$product->add();

 

 

Niestety produkt się nie dodaje. Włączyłem nawet informowanie o błędach, ale żadnych błędów nie wyświetla... Nie wiem co może być nie tak. Może jeszcze jakiś plik należy zaincludować?

Edited by brando007 (see edit history)
Link to comment
Share on other sites

Ok, udało mi się poprawić ten kod, aby produkt lądował do bazy danych. Błędem było to, że drugi raz includowałem plik Product.php (poprzednie pliki już to robią). Aktualnie kod wygląda tak:

 

 

include_once 'config/config.inc.php';
include(dirname(__FILE__).'/init.php');
$defaultLanguage = new Language((int)(Configuration::get('PS_LANG_DEFAULT')));  

$product = new Product();
$languages = Language::getLanguages();
foreach ($languages as $language) {
echo $language['id_lang'];
         $product->name[$language['id_lang']] = 'test';
         $product->description[$language['id_lang']] = 'test';
         $product->link_rewrite[$language['id_lang']] = 'test';
          $product->meta_keywords[$language['id_lang']] = 'test';
}

$product->price = 100;
$product->id_tax_rules_group = 1;
$product->id_manufacturer = 0;
$product->id_supplier = 0;
$product->quantity = 1;
$product->minimal_quantity = 1;
$product->additional_shipping_cost = 0;
$product->wholesale_price = 0;
$product->ecotax = 0;
$product->width = 0;
$product->height = 0;
$product->depth = 0;
$product->weight = 0;
$product->out_of_stock = 0;
$product->active = 1;
$product->id_category_default = 0;
$product->category = 0;
$product->available_for_order = 0;
$product->show_price = 1;
$product->on_sale = 0;
$product->online_only = 1;
$product->meta_keywords = 'test';
$product->add();

 

Próbuję teraz dodać produkt do koszyka. Tworzę, więc obiekt koszyka ($cart = new Cart()) i próbuję dodać produkt do koszyka ($cart->add()), ale to nie działa. Dodam, że wyskakuje błąd: Fatal error: Call to a member function add() on a non-object in ...

Chciałem jeszcze zrobić tak, aby w przypadku, gdy produkt o nazwie np. 'test' już istnieje to uaktualnia go (lub usuwa i ponownie dodaje), a w przeciwnym przypadku po prostu dodaje. Wiem jak to zrobić normalnymi sposobami, ale jak to zrobić obiektowo?

Link to comment
Share on other sites

Udało mi się utworzyć nowy koszyk, ale produkt nie trafia do niego. Oto kod:

 

 

$id_product = (int)$product->id;

$context=Context::getContext();
$id_cart=$context->cookie->__get('id_cart');

$cart=new Cart($id_cart);
$cart->id_currency=1;
$cart->id_lang=1;
      
$cart->add();
$cart->updateQty(1, $id_product);

 

Co robię źle? Proszę o pomoc.

 

Pozdrawiam,

brando007.

Edited by brando007 (see edit history)
Link to comment
Share on other sites

×
×
  • Create New...