brando007 Posted February 7, 2014 Share Posted February 7, 2014 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 More sharing options...
vekia Posted February 7, 2014 Share Posted February 7, 2014 trochę chaotycznie to wygląda, nie łatwiej będzie skorzystać z klas php w celu dodania produktu do koszyka? 1 Link to comment Share on other sites More sharing options...
brando007 Posted February 7, 2014 Author Share Posted February 7, 2014 Dzięki za odpowiedź. Chciałem skorzystać z tych klas, ale po pierwsze to nie wiem jakich użyć, a po drugie nie wiele programowałem w programowaniu obiektowym (jestem początkujący). Link to comment Share on other sites More sharing options...
brando007 Posted February 8, 2014 Author Share Posted February 8, 2014 Czy mógłby ktoś chociaż napisać z jakich klas mam skorzystać do dodania produktu do sklepu, a następnie do koszyka oraz jakich metod tych klas użyć? Link to comment Share on other sites More sharing options...
vekia Posted February 9, 2014 Share Posted February 9, 2014 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 1 Link to comment Share on other sites More sharing options...
brando007 Posted February 9, 2014 Author Share Posted February 9, 2014 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 More sharing options...
vekia Posted February 9, 2014 Share Posted February 9, 2014 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 1 Link to comment Share on other sites More sharing options...
brando007 Posted February 9, 2014 Author Share Posted February 9, 2014 (edited) 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 February 10, 2014 by brando007 (see edit history) Link to comment Share on other sites More sharing options...
brando007 Posted February 10, 2014 Author Share Posted February 10, 2014 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 More sharing options...
brando007 Posted February 11, 2014 Author Share Posted February 11, 2014 (edited) 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 February 11, 2014 by brando007 (see edit history) Link to comment Share on other sites More sharing options...
brando007 Posted February 12, 2014 Author Share Posted February 12, 2014 A może jest jakaś komenda, która służy do tego, aby użyć koszyk o danym id i tego brakuje w moim kodzie? Link to comment Share on other sites More sharing options...
Recommended Posts