Jump to content
  • 0

Problem z atrybutami PS 1.6 po zmianie wersji na MySQL 8.0.28


slawos

Question

PrestaShop 1.6.1.24

PHP 7.1.33

MySQL 8.0.28

Witam serdecznie.

Mam problem z atrybutami (rozmiar) po zmianie wersji w MyDevil na MySQL 8.0.28.

Chodzi dokładnie o to, że niedostępny jest w magazynie np rozmiar 46 (wartość 0), a na stronie produktowej wyświetla się on jako dostępny, jako niedostępny wyświetla się natomiast kolejny czyli 48 który w magazynie jest dostępny.  Następuje jakby przeskok o 1 ( jeśli jest niedostępny rozmiar 48 to wyświetla się jako dostępny, a jako niedostępny wyświetla się 50 itd... ) Jak sobie z tym można poradzić ?

Wszystko bez ingerowania w pliki i bazę danych zrobione.

Pozdrawiam.

 

 

1.jpg

2.jpg

3.jpg

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

W pliku classes/Product.php trzeba dodać ORDER BY pa.`id_product_attribute` oraz ORDER BY pac.id_product_attribute (w dwóch miejscach) w funkcji getAttributesResume.

Poprawiona funkcja poniżej:

public function getAttributesResume($id_lang, $attribute_value_separator = ' - ', $attribute_separator = ', ')
    {
        if (!Combination::isFeatureActive()) {
            return array();
        }

        $combinations = Db::getInstance()->executeS('SELECT pa.*, product_attribute_shop.*
				FROM `'._DB_PREFIX_.'product_attribute` pa
				'.Shop::addSqlAssociation('product_attribute', 'pa').'
				WHERE pa.`id_product` = '.(int)$this->id.'
				GROUP BY pa.`id_product_attribute`
                                ORDER BY pa.`id_product_attribute`');

        if (!$combinations) {
            return false;
        }

        $product_attributes = array();
        foreach ($combinations as $combination) {
            $product_attributes[] = (int)$combination['id_product_attribute'];
        }

        $lang = Db::getInstance()->executeS('SELECT pac.id_product_attribute, GROUP_CONCAT(agl.`name`, \''.pSQL($attribute_value_separator).'\',al.`name` ORDER BY agl.`id_attribute_group` SEPARATOR \''.pSQL($attribute_separator).'\') as attribute_designation
				FROM `'._DB_PREFIX_.'product_attribute_combination` pac
				LEFT JOIN `'._DB_PREFIX_.'attribute` a ON a.`id_attribute` = pac.`id_attribute`
				LEFT JOIN `'._DB_PREFIX_.'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group`
				LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al ON (a.`id_attribute` = al.`id_attribute` AND al.`id_lang` = '.(int)$id_lang.')
				LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl ON (ag.`id_attribute_group` = agl.`id_attribute_group` AND agl.`id_lang` = '.(int)$id_lang.')
				WHERE pac.id_product_attribute IN ('.implode(',', $product_attributes).')
				GROUP BY pac.id_product_attribute
                                ORDER BY pac.`id_product_attribute`');

        foreach ($lang as $k => $row) {
            $combinations[$k]['attribute_designation'] = $row['attribute_designation'];
        }

        //Get quantity of each variations
        foreach ($combinations as $key => $row) {
            $cache_key = $row['id_product'].'_'.$row['id_product_attribute'].'_quantity';

            if (!Cache::isStored($cache_key)) {
                $result = StockAvailable::getQuantityAvailableByProduct($row['id_product'], $row['id_product_attribute']);
                Cache::store(
                    $cache_key,
                    $result
                );
                $combinations[$key]['quantity'] = $result;
            } else {
                $combinations[$key]['quantity'] = Cache::retrieve($cache_key);
            }
        }

        return $combinations;
    }

 

  • Like 1
Link to comment
Share on other sites

  • 0

Dzięki koledzy, zawsze można na Was liczyć. 💪

Daresh, mam pytanie bo widzę różnicę w tym drugim miejscu.

Winno być jak podajesz:

GROUP BY pac.id_product_attribute

ORDER BY pac.`id_product_attribute`'

Czy jednak jak pokazane na https://github.com/thirtybees/thirtybees/pull/1318/files

GROUP BY pac.id_product_attribute

ORDER BY pac.id_product_attribute'

 

 

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