Jump to content
  • 0

Po dodaniu multistore zniknęły wpisy CMS


imgmind

Question

Witam posiadam prestashop 1.6 pod dodaniu multistore wpisy cms stały się puste

cms.png

 

 

W bazie zauważyłem że zniknął 7 język czyli Polski i pojawiła się kolumna id_shop

 

idshop.png

 

A tak było przedtem

 

idshop2.png

 

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

  • 0

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

  • 0

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.13

jeż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

  • 0

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

  • 0

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 by imgmind (see edit history)
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...