imgmind Posted February 18, 2017 Share Posted February 18, 2017 (edited) Witam posiadam prestashop 1.6 pod dodaniu multistore wpisy cms stały się puste W bazie zauważyłem że zniknął 7 język czyli Polski i pojawiła się kolumna id_shop A tak było przedtem Macie pomysł co się popsuło i jak to naprawić? Czy jest jakiś automatyczny sposób? czy muszę ręcznie dodawać rekordy? Edited February 18, 2017 by imgmind (see edit history) Link to comment Share on other sites More sharing options...
0 imgmind Posted February 19, 2017 Author Share Posted February 19, 2017 Dobra na szczęście miałem kopie bazy z przed nadania multistore. Więc cms_lang dodałem kolumnę id_shop z 1. I usunąłem tą złą bazę. Następnie wykonałem komendy SQL: Najpierw usunąłem primary key z 3 kolumn id_cms id_lang i id_cms stworzyłem nową kolumnę id_record nadałem jej primary key Nadałem kolejno cyfry komendą: SET @a = 0 ; UPDATE `cms_lang` SET id_record = @a:=@a+1 WHERE id_record IS NULL; Dzięki czemu każdy wiersz ma unikalny klucz Następnie wykonałem polecenie: (aby skopiowac dane z tabeli cms_lang i zmienić wartość kolumny id_shop - i nadać jej wartość drugiego sklepu czyli 2) CREATE table temporary_table AS SELECT * FROM cms_lang; UPDATE temporary_table SET id_shop=2.; Następnie w temporary_table usunąłem kolumne id_record i stworzyłem ją na nowo nadając wartość null. I znowu komenda: tylko liczba SET jest teraz 535 bo chce by naliczał unikalny klucz od 536 SET @a = 535 ; UPDATE `cms_lang` SET id_record = @a:=@a+1 WHERE id_record IS NULL; Następnie: INSERT INTO cms_lang SELECT * FROM temporary_table; DROP TABLE temporary_table I przeglądam cms_lang usuwam kolumnę id_record i nadaje znowu primary key dla id_cms id_lang id_shop Pewnie znacie szybszy sposób ale ja uporałem się takim. i Naprawione Link to comment Share on other sites More sharing options...
0 atomek Posted February 18, 2017 Share Posted February 18, 2017 z jakiej wersji PS dokładnie dokładnie korzystasz?w starszych wersjach PS 1.6 był taki problem, przerabiałem to na wersji 1.6.0.13jeżeli masz możliwość powtórzenia tej operacji to najpierw w pliku classes/shop/Shop.php wprowadź następujące zmiany:1. funkcja init protected static function init() { Shop::$id_shop_default_tables = array('product', 'category'); $asso_tables = array( 'carrier' => array('type' => 'shop'), 'carrier_lang' => array('type' => 'fk_shop'), 'category' => array('type' => 'shop'), 'category_lang' => array('type' => 'fk_shop'), 'cms' => array('type' => 'shop'), 'cms_lang' => array('type' => 'fk_shop'), // <--------- tw dodane 'cms_category' => array('type' => 'shop'), 'cms_category_lang' => array('type' => 'fk_shop'), // <--------- tw dodane 'contact' => array('type' => 'shop'), 'country' => array('type' => 'shop'), 'currency' => array('type' => 'shop'), 'employee' => array('type' => 'shop'), 'hook_module' => array('type' => 'fk_shop'), 'hook_module_exceptions' => array('type' => 'fk_shop', 'primary' => 'id_hook_module_exceptions'), 'image' => array('type' => 'shop'), 'lang' => array('type' => 'shop'), 'meta_lang' => array('type' => 'fk_shop'), 'module' => array('type' => 'shop'), 'module_currency' => array('type' => 'fk_shop'), 'module_country' => array('type' => 'fk_shop'), 'module_group' => array('type' => 'fk_shop'), 'product' => array('type' => 'shop'), 'product_attribute' => array('type' => 'shop'), 'product_lang' => array('type' => 'fk_shop'), 'referrer' => array('type' => 'shop'), 'scene' => array('type' => 'shop'), 'store' => array('type' => 'shop'), 'webservice_account' => array('type' => 'shop'), 'warehouse' => array('type' => 'shop'), 'stock_available' => array('type' => 'fk_shop', 'primary' => 'id_stock_available'), 'carrier_tax_rules_group_shop' => array('type' => 'fk_shop'), 'attribute' => array('type' => 'shop'), 'feature' => array('type' => 'shop'), 'group' => array('type' => 'shop'), 'attribute_group' => array('type' => 'shop'), 'tax_rules_group' => array('type' => 'shop'), 'zone' => array('type' => 'shop'), 'manufacturer' => array('type' => 'shop'), 'supplier' => array('type' => 'shop'), ); foreach ($asso_tables as $table_name => $table_details) Shop::addTableAssociation($table_name, $table_details); Shop::$initialized = true; } 2. funkcja copyShopData public function copyShopData($old_id, $tables_import = false, $deleted = false) { // If we duplicate some specific data, automatically duplicate other data linked to the first // E.g. if carriers are duplicated for the shop, duplicate carriers langs too if (!$old_id) $old_id = Configuration::get('PS_SHOP_DEFAULT'); if (isset($tables_import['carrier'])) { $tables_import['carrier_tax_rules_group_shop'] = true; $tables_import['carrier_lang'] = true; } // <--------- tw dodane if (isset($tables_import['cms'])) { $tables_import['cms_lang'] = true; $tables_import['cms_category'] = true; $tables_import['cms_category_lang'] = true; } // ------------------------- tw $tables_import['category_lang'] = true; if (isset($tables_import['product'])) $tables_import['product_lang'] = true; if (isset($tables_import['module'])) { $tables_import['module_currency'] = true; $tables_import['module_country'] = true; $tables_import['module_group'] = true; } if (isset($tables_import['hook_module'])) $tables_import['hook_module_exceptions'] = true; if (isset($tables_import['attribute_group'])) $tables_import['attribute'] = true; // Browse and duplicate data foreach (Shop::getAssoTables() as $table_name => $row) { if ($tables_import && !isset($tables_import[$table_name])) continue; // Special case for stock_available if current shop is in a share stock group if ($table_name == 'stock_available') { $group = new ShopGroup($this->id_shop_group); if ($group->share_stock && $group->haveShops()) continue; } $id = 'id_'.$row['type']; if ($row['type'] == 'fk_shop') $id = 'id_shop'; else $table_name .= '_'.$row['type']; if (!$deleted) { $res = Db::getInstance()->getRow('SELECT * FROM `'._DB_PREFIX_.$table_name.'` WHERE `'.$id.'` = '.(int)$old_id); if ($res) { unset($res[$id]); if (isset($row['primary'])) unset($res[$row['primary']]); $categories = Tools::getValue('categoryBox'); if ($table_name == 'product_shop' && count($categories) == 1) { unset($res['id_category_default']); $keys = implode('`, `', array_keys($res)); $sql = 'INSERT IGNORE INTO `'._DB_PREFIX_.$table_name.'` (`'.$keys.'`, `id_category_default`, '.$id.') (SELECT `'.$keys.'`, '.(int)$categories[0].', '.(int)$this->id.' FROM '._DB_PREFIX_.$table_name.' WHERE `'.$id.'` = '.(int)$old_id.')'; } else { $keys = implode('`, `', array_keys($res)); $sql = 'INSERT IGNORE INTO `'._DB_PREFIX_.$table_name.'` (`'.$keys.'`, '.$id.') (SELECT `'.$keys.'`, '.(int)$this->id.' FROM '._DB_PREFIX_.$table_name.' WHERE `'.$id.'` = '.(int)$old_id.')'; } Db::getInstance()->execute($sql); } } } // Hook for duplication of shop data $modules_list = Hook::getHookModuleExecList('actionShopDataDuplication'); if (is_array($modules_list) && count($modules_list) > 0) foreach ($modules_list as $m) if (!$tables_import || isset($tables_import['Module'.ucfirst($m['module'])])) Hook::exec('actionShopDataDuplication', array( 'old_id_shop' => (int)$old_id, 'new_id_shop' => (int)$this->id, ), $m['id_module']); } powtórz operacje dodania nowego sklepu.Jeżeli nie chcesz tego robić, to pozostaje Ci dodać brakujące rekordy za pomocą phpAdmina Link to comment Share on other sites More sharing options...
0 imgmind Posted February 18, 2017 Author Share Posted February 18, 2017 1.6.1.9 I w bazie mam to już dodane więc dodawać nie muszę. Macie jakieś inne pomysły jeszcze? Link to comment Share on other sites More sharing options...
0 () Maciej () Posted February 18, 2017 Share Posted February 18, 2017 A jesteś w podglądzie ogólnym, czy konkretnego sklepu, bo nie widać tego na screenach ? Jak jesteś w ogólnym to przejdź do podglądu sklepu gdzie wcześniej były wpisy i każdą stronę CMS musisz odhaczyć, że ma być w obu sklepach. Dodatkowa tablica z ID sklepu i później pododawane wpisy w innych tablicach to norma. Link to comment Share on other sites More sharing options...
0 imgmind Posted February 18, 2017 Author Share Posted February 18, 2017 (edited) A jesteś w podglądzie ogólnym, czy konkretnego sklepu, bo nie widać tego na screenach ? Jak jesteś w ogólnym to przejdź do podglądu sklepu gdzie wcześniej były wpisy i każdą stronę CMS musisz odhaczyć, że ma być w obu sklepach. Dodatkowa tablica z ID sklepu i później pododawane wpisy w innych tablicach to norma. To niestety nic nie da bo brak wpisów w adminie czy konkretny sklep czy wszystkie. Więc nie daje zapisać jeśli się ich nie uzupełni. w Bazie jest brak 7 języka i wpisów. Więc pytanie czy usunęło na stałe czy jest jakiś powrót? drugi obrazek z bazy jaki wrzuciłem jest z kopi bazy jaką wykonałem przed uruchomieniem multistore. Dodam wyłączenie multistore nie przywraca zakładek Edited February 18, 2017 by imgmind (see edit history) Link to comment Share on other sites More sharing options...
Question
imgmind
Witam posiadam prestashop 1.6 pod dodaniu multistore wpisy cms stały się puste
W bazie zauważyłem że zniknął 7 język czyli Polski i pojawiła się kolumna id_shop
A tak było przedtem
Macie pomysł co się popsuło i jak to naprawić?
Czy jest jakiś automatyczny sposób? czy muszę ręcznie dodawać rekordy?
Edited by imgmind (see edit history)Link to comment
Share on other sites
5 answers to this question
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