theDoris Posted October 6, 2015 Share Posted October 6, 2015 Witajcie, dawno temu zrobiłam prosty moduł posiadam słabą wiedze w php ale po wielu staraniach zaczął działąć. Zasada działania jest prosta moduł tworzy nową tabelę w db i w konfiguracji produktu moge uzupełnić pola które się później wyświetlają na stronie produktu, dla każdego produktu jest mozliwość wyświetlenia innych informacji. Teraz mam zamiar uruchomić multistore więc tak myślę że skoro jest tworzona tylko jedna tabela to z automatu te same wartości zostaną przedstawione w drugim sklepie, a właśnie tego chcę uniknąć. Nie chce dublować modułu ponieważ tylko zwiekszy się lista zakładek natomiast chcę się dowiedzieć jak to działa że dla każdego sklepu z osobna można przy użyciu jednego modułu konfigurować wyświetlaną treść. Może mi ktoś przybliżyć zasadę działania, ewentualnie jak powinna wyglądać konstrukcja takiego modułu? Szukałam w panelu modułu zbliżonego działaniem jednak nie widzę nic co działa tylko na stronie produktu, może jest jakiś darmowy moduł gdzie moge takie coś podejrzeć? Jeszcze dla spełnienia informacji tabelę w module tworzę tak: $sql = 'CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'product_custom_values` ( `id_product` int(10) unsigned NOT NULL, `value_numbers_one` float unsigned NOT NULL, `value_numbers_two` float unsigned NOT NULL DEFAULT 1, `value_name_string` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, PRIMARY KEY (`id_product`) ) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8'; Potrzebuję dobrej rady która pchnie mnie do działania Link to comment Share on other sites More sharing options...
design4VIP Posted October 6, 2015 Share Posted October 6, 2015 a jak wg tego modulu wprowadzasz te zmienne? masz rozbudowany rowniez panel edycji produktu? teoretycznie, powinno sie to robic za pomoca helperow i kontrolerow. obecnie juz bardzo rzadko, chyba tylko stara szkola uzywa sie update czy insert table ale, jak psizesz, nie masz zbytniej wiedzy w PHP to raczej z kontrolerami bedzie ciezko... tam nic nie jest oczywiste ale ozesz to zrobic o wiele prosciej.. .w sumie uzyskujac podobny efekt. tylko pytanie wlasnie jak wprowadzasz te zmiany. czy normalnie przez insert/update table? wtedy sprawa by byla prosta, ale trzeba by uwazac na to, zeby zmiany byly w multistore wykonywane dla poszczegolnego sklepu a nie grup sklepow. mianowicie, towrzysz w tabeli nowa kolumne id_shop i w niej zapisjesz odpowiednie ID danego sklepu, w ktorym wlasnie wprowdzasz zmiany. i w sumie tyle, to samo przy odczycie z select wprowadzasz 'where' dla id_shop, tego odczytujesz z $params i masz juz rozwarstwienie zmiennej po multi. Link to comment Share on other sites More sharing options...
theDoris Posted October 6, 2015 Author Share Posted October 6, 2015 Wszystko wywołuję selectem, natomiast zapis robię REPLACE INTO, wszystkie zmiany mam na karcie produktu jako dodatkowa złaładka wczytuje sobie plik z inputami, a pózniej już rozdzielam to sobie na poszczególne hooki i w smarty przekazuje do pliku wyjściowego, dzieki za naprowadzenie mojego myślenia to wszystko brzmi prosto tylko jedno pytanie jak pobrać id danego sklepu? I jeszcze sprawa primary key w tej chwili jest dla id produktu, a może się to id przecież powtórzyć w multistore. Link to comment Share on other sites More sharing options...
design4VIP Posted October 7, 2015 Share Posted October 7, 2015 no, jezeli zrobisz dodatkowa kolumne z id_shop to na pewno sie powtrzy, polacz sobie zaleznosc primary z id_product do id_shop. jak pobrac zmienna sklepu? to tez zalezy, czy dane pobierasz bezporenio z kontrolera i dopiero wysylasz je do hook (do tpl) czy wysylasz wszystko i dopeiro w tpl pobierasz np. po foreach czy zaleznosciach od jakiegos tam paramertru. w samym kontrolerze tez masz wiele rozwaizan, albo jak pisalem, pobierasz z $params, albo z cookie, albo, chyba najbardziej porapwnie z contextu [$this->context->shop->id] a co za tym idzie z fukcji clasy Shop:: getContextShopID() Link to comment Share on other sites More sharing options...
theDoris Posted October 25, 2015 Author Share Posted October 25, 2015 Czasu brakowało żeby to na bieżąco wtedy sprawdzić, dzisiaj siadłam od rana i gotowe, multistore działa już w module. Teraz mam ochotę powalczyć dalej i dodać multilanguage, z początku myślałam że zasada będzie ta sama jak z multistore, samo pobranie języka przecież jest dostępne po zmiennej $languages w smarty. Tylko trapi mnie to jak dodać wybór języka podczas wprowadzania treści, moduły które przeglądałam wszystkie korzystają z helper i w zasadzie całą obsługę modułu mają w kontrolerze, ja inputy mam w tplu. Nie do końca rozumie te helpery i sam sposób zapisu przez nie, jeśli możesz mi jeszcze wytłumaczyć zasadę dodawania, oraz samego działanie multilanguage będę miała z czym się zmierzyć na kolejne wolne godziny. Link to comment Share on other sites More sharing options...
design4VIP Posted October 25, 2015 Share Posted October 25, 2015 helpery to piekna rzecz... nie da sie opisac tak w kilku slowach jak to dziala... poprostu jest to tak proste, ze az trudne do opisania obecnie juz wrecz wsiaklem w helpery i teraz musialbym sie cofnac zeby cos podpowiedziec jak zrobic input multilanguage bez nich ;/ w helperach zalatwiasz to jedna linijka w kontrolerze wysweitlania i reszte juz robi sam kontroler a tutaj, bez niego, trzeba by pokombinowac... zasadniczo trzeba by sie cofnac do modulow z wersji 1.4, tam nie bylo jeszcze az tak skondensowanych helperow i mysle, ze jakies rozwiazanie z tych "archaicznych" modulow by zlapal jak tam byly tworzone te niezapomniane flagi przy polach ale jak pisalem.... mnie juz helpery "kupily" i jakos tok myslenia sie pozmienial... jak to bylo kiedyc juz zapomnialem po co zawracac sobie glowe jakimis skomplikowanymi ukladami, jezlei na chwile obecna jest juz pelna prostota Link to comment Share on other sites More sharing options...
theDoris Posted October 26, 2015 Author Share Posted October 26, 2015 Wrzucam ważniejszą część z kontrolera żebyś miał obraz o czym piszę. public function install() { $sql = 'CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'product_text` ( `id_shop` int(10) unsigned NOT NULL, `id_product` int(10) unsigned NOT NULL, `pr_txt` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, PRIMARY KEY (`id_product`, `id_shop`) ) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8'; if (!parent::install() || !$this->registerHook('header') || !$this->registerHook('displayAdminProductsExtra') || !$this->registerHook('actionProductAdd') || !$this->registerHook('actionProductUpdate') || !$this->registerHook('actionProductDelete') || !$this->registerHook('actionDispatcher') || !$this->registerHook('displayProductPriceBlock') || !Db::getInstance()->execute($sql)) return false; return true; } public function uninstall() { $sql = 'DROP TABLE IF EXISTS `'._DB_PREFIX_.'product_text`'; if (!parent::uninstall() || !Db::getInstance()->execute($sql)) return false; return true; } public function hookDisplayAdminProductsExtra() { $id_shop = (int)$this->context->shop->id; $id_product = (int)Tools::getValue('id_product'); $row = Db::getInstance()->getRow('SELECT `pr_txt` FROM `'._DB_PREFIX_."product_text` WHERE `id_product` = '$id_product' AND `id_shop` = '$id_shop'"); $this->context->smarty->assign('id_shop', $id_shop); $this->context->smarty->assign('pr_txt', $row['pr_txt']); return $this->display(dirname(__FILE__), "views/templates/admin/product-txt.tpl"); } public function hookActionProductAdd() { return $this->hookActionProductUpdate(); } public function hookActionProductUpdate() { $id_product = (int)Tools::getValue('id_product'); $id_shop = (int)$this->context->shop->id; $product_txt = Tools::getValue('pr_txt'); if (isset ($pr_txt) && ($pr_txt != 0)) { return Db::getInstance()->execute('REPLACE INTO `'._DB_PREFIX_."product_text` SET `id_product` = '$id_product', `pr_txt` = '$pr_txt', `id_shop` = '$id_shop'"); } else return Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_."product_text`WHERE `id_product` = '$id_product' AND `id_shop` = '$id_shop'"); } public function hookActionProductDelete() { $id_product = (int)Tools::getValue('id_product'); return Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_."product_text` WHERE `id_product` = '$id_product' AND `id_shop` = '$id_shop'"); } } tpl <div class="col-lg-6"> <input type="text" value="{$pr_txt}" id="pr_txt" name="pr_txt"> <input name="id_shop" type="hidden" id="id_shop" value="{$id_shop}" > </div> generalnie nie daje mi to spokoju i szukam jakiegoś sensownego nakierowania, próbowałam to dodać na podobnej zasadzie jak id_product jednak nie wiem jak ma to działać po stronie klienta gdy zmieni język to skąd ma wiedzieć co wyświetlić. Potrzebuję jakiegoś dobrego nakierowania, może jakiejś lektury do czytania, coś co da mi kopa do przodu ponieważ teraz jestem w kropce. Link to comment Share on other sites More sharing options...
design4VIP Posted October 26, 2015 Share Posted October 26, 2015 to tak samo jakbys pytal, a skad modul wie, ze ma wyswietlic dane z tego a nie innego multistore? tez w tabeli _lang musisz zawrzec id jezyka i odczytywac z bazy danych po WHERE id_lang=X Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now