Jump to content

Edit History

zmora.vip

zmora.vip

7 hours ago, Krystian Podemski said:

To nie jest prawda. Po prostu używając klasy Cookies i jej set czy get tworzysz wpisu w domyślnym ciastku utworzonym przez system. Możesz równie dobrze stworzyć własne ciastko tylko sugerowałbym by było w jakiś sposób zabezpieczone abym tworząc je sobie samemu nie miał promocji.

Gdy początkowo używałem setcookie() to rzeczywiście tworzyło ciastko ale odnosząc sie w classie do tego ciastko przez $_cookie[] to w początkowych ładowaniach strony nie widziało go. Możliwe, że na tym polega to zabezpieczenie.

Jednakże mimo wszystko nawet jak utworze i poprawnie jest wyświetlane i dodawane do koszyka to mam problem, gdy cena się zmieni np. na rzecz usunięcia tego cookie lub jak powstanie ono po dodaniu już produktu bez obniżenia ceny. Przerobiłem getSpecificPrice() w następujący sposób

public static function getSpecificPrice(
        $id_product,
        $id_shop,
        $id_currency,
        $id_country,
        $id_group,
        $quantity,
        $id_product_attribute = null,
        $id_customer = 0,
        $id_cart = 0,
        $real_quantity = 0
    ) {        
        $idtmp = 123; //202cb962ac59075b964b07152d234b70
        $hash = md5($idtmp); 
        //$hash = md5('YIN:'.$id_product);
        
        //$cookie = Context::getContext()->cookie->mycookie;
        //if(!isset(Context::getContext()->mycookie->variable_name))
        //    $cookie = Context::getContext()->mycookie;
        
        $cookie = new Cookie('mycookie');
        
        //if(isset($cookie->variable_name)) print_r(Context::getContext()->cookie);  
        //echo "jest".$cookie->variable_name;
        
        if(!isset($cookie->variable_name) and Tools::getIsset($hash)){
            //$cookie = new Cookie('mycookie');
            $cookie->variable_name = 'promotional-product';
            //$cookie->__set("var", "value 1"); 
            $cookie->setExpire(time() + 1 * 60);
            $cookie->write();
        }
        
        //print_r ($cookie);
        if(!isset($_COOKIE[$hash]) and !isset($_GET[$hash])) {
            //$id_product = 0;
            //$id_shop = 0;
        }
      
        if(isset($cookie->variable_name) or Tools::getIsset($hash)){ 
            $id_group = 100;
        }
        
        if (!SpecificPrice::isFeatureActive()) {
            return [];
        }
        /*
         * The date is not taken into account for the cache, but this is for the better because it keeps the consistency
         * for the whole script.
         * The price must not change between the top and the bottom of the page
        */

        if (!self::couldHaveSpecificPrice($id_product)) {
            return [];
        }
            
        if (static::$psQtyDiscountOnCombination === null) {
            static::$psQtyDiscountOnCombination = Configuration::get('PS_QTY_DISCOUNT_ON_COMBINATION');
            // no need to compute the key the first time the function is called, we know the cache has not
            // been computed yet
            $key = null;
        } else {
            $key = self::computeKey(
                $id_product,
                $id_shop,
                $id_currency,
                $id_country,
                $id_group,
                $quantity,
                $id_product_attribute,
                $id_customer,
                $id_cart,
                $real_quantity
            );
        }

        if (!array_key_exists($key, self::$_specificPriceCache)) {
                        
            $query_extra = self::computeExtraConditions($id_product, $id_product_attribute, $id_customer, $id_cart);
            if ($key === null) {
                
                // compute the key after calling computeExtraConditions as it initializes some useful cache
                $key = self::computeKey(
                    $id_product,
                    $id_shop,
                    $id_currency,
                    $id_country,
                    $id_group,
                    $quantity,
                    $id_product_attribute,
                    $id_customer,
                    $id_cart,
                    $real_quantity
                );
            }
                        
            $query = '
			SELECT *, ' . SpecificPrice::_getScoreQuery($id_product, $id_shop, $id_currency, $id_country, $id_group, $id_customer) . '
				FROM `' . _DB_PREFIX_ . 'specific_price`
				WHERE
                `id_shop` ' . self::formatIntInQuery(0, $id_shop) . ' AND
                `id_currency` ' . self::formatIntInQuery(0, $id_currency) . ' AND
                `id_country` ' . self::formatIntInQuery(0, $id_country) . ' AND
                `id_group` ' . self::formatIntInQuery(0, $id_group) . ' ' . $query_extra . '
				AND IF(`from_quantity` > 1, `from_quantity`, 0) <= ';

            $query .= (static::$psQtyDiscountOnCombination || !$id_cart || !$real_quantity) ? (int) $quantity : max(1, (int) $real_quantity);
            $query .= ' ORDER BY `id_product_attribute` DESC, `id_cart` DESC, `from_quantity` DESC, `id_specific_price_rule` ASC, `score` DESC, `to` DESC, `from` DESC';
            
            self::$_specificPriceCache[$key] = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($query); ///// TUTAJ NIE WYKONUJE
                
        }
        
        return self::$_specificPriceCache[$key];
    }

 

 

Taka modyfikacje dobrze uaktywnia promocje pod warunkiem ze koszyk jest pusty.

zmora.vip

zmora.vip

7 hours ago, Krystian Podemski said:

To nie jest prawda. Po prostu używając klasy Cookies i jej set czy get tworzysz wpisu w domyślnym ciastku utworzonym przez system. Możesz równie dobrze stworzyć własne ciastko tylko sugerowałbym by było w jakiś sposób zabezpieczone abym tworząc je sobie samemu nie miał promocji.

Gdy początkowo używałem setcookie() to rzeczywiście tworzyło ciastko ale odnosząc sie w classie do tego ciastko przez $_cookie[] to w początkowych ładowaniach strony nie widziało go. Możliwe, że na tym polega to zabezpieczenie.

Jednakże mimo wszystko nawet jak utworze i poprawnie jest wyświetlane i dodawane do koszyka to mam problem, gdy cena się zmieni np. na rzecz usunięcia tego cookie lub jak powstanie ono po dodaniu już produktu bez obniżenia ceny. Przerobiłem getSpecificPrice() w następujący sposób

public static function getSpecificPrice(
        $id_product,
        $id_shop,
        $id_currency,
        $id_country,
        $id_group,
        $quantity,
        $id_product_attribute = null,
        $id_customer = 0,
        $id_cart = 0,
        $real_quantity = 0
    ) {        
        $idtmp = 123; //202cb962ac59075b964b07152d234b70
        $hash = md5($idtmp); 
        //$hash = md5('YIN:'.$id_product);
        
        //$cookie = Context::getContext()->cookie->mycookie;
        //if(!isset(Context::getContext()->mycookie->variable_name))
        //    $cookie = Context::getContext()->mycookie;
        
        $cookie = new Cookie('mycookie');
        
        //if(isset($cookie->variable_name)) print_r(Context::getContext()->cookie);  
        //echo "jest".$cookie->variable_name;
        
        if(!isset($cookie->variable_name) and Tools::getIsset($hash)){
            //$cookie = new Cookie('mycookie');
            $cookie->variable_name = 'promotional-product';
            //$cookie->__set("var", "value 1"); 
            $cookie->setExpire(time() + 1 * 60);
            $cookie->write();
        }
        
        //print_r ($cookie);
        if(!isset($_COOKIE[$hash]) and !isset($_GET[$hash])) {
            //$id_product = 0;
            //$id_shop = 0;
        }
      
        if(isset($cookie->variable_name) or Tools::getIsset($hash)){ 
            $id_group = 100;
        }
        
        if (!SpecificPrice::isFeatureActive()) {
            return [];
        }
        /*
         * The date is not taken into account for the cache, but this is for the better because it keeps the consistency
         * for the whole script.
         * The price must not change between the top and the bottom of the page
        */

        if (!self::couldHaveSpecificPrice($id_product)) {
            return [];
        }
            
        if (static::$psQtyDiscountOnCombination === null) {
            static::$psQtyDiscountOnCombination = Configuration::get('PS_QTY_DISCOUNT_ON_COMBINATION');
            // no need to compute the key the first time the function is called, we know the cache has not
            // been computed yet
            $key = null;
        } else {
            $key = self::computeKey(
                $id_product,
                $id_shop,
                $id_currency,
                $id_country,
                $id_group,
                $quantity,
                $id_product_attribute,
                $id_customer,
                $id_cart,
                $real_quantity
            );
        }

        if (!array_key_exists($key, self::$_specificPriceCache)) {
                        
            $query_extra = self::computeExtraConditions($id_product, $id_product_attribute, $id_customer, $id_cart);
            if ($key === null) {
                
                // compute the key after calling computeExtraConditions as it initializes some useful cache
                $key = self::computeKey(
                    $id_product,
                    $id_shop,
                    $id_currency,
                    $id_country,
                    $id_group,
                    $quantity,
                    $id_product_attribute,
                    $id_customer,
                    $id_cart,
                    $real_quantity
                );
            }
                        
            $query = '
			SELECT *, ' . SpecificPrice::_getScoreQuery($id_product, $id_shop, $id_currency, $id_country, $id_group, $id_customer) . '
				FROM `' . _DB_PREFIX_ . 'specific_price`
				WHERE
                `id_shop` ' . self::formatIntInQuery(0, $id_shop) . ' AND
                `id_currency` ' . self::formatIntInQuery(0, $id_currency) . ' AND
                `id_country` ' . self::formatIntInQuery(0, $id_country) . ' AND
                `id_group` ' . self::formatIntInQuery(0, $id_group) . ' ' . $query_extra . '
				AND IF(`from_quantity` > 1, `from_quantity`, 0) <= ';

            $query .= (static::$psQtyDiscountOnCombination || !$id_cart || !$real_quantity) ? (int) $quantity : max(1, (int) $real_quantity);
            $query .= ' ORDER BY `id_product_attribute` DESC, `id_cart` DESC, `from_quantity` DESC, `id_specific_price_rule` ASC, `score` DESC, `to` DESC, `from` DESC';
            
            self::$_specificPriceCache[$key] = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($query); ///// TUTAJ NIE WYKONUJE
                
        }
        
        return self::$_specificPriceCache[$key];
    }

image.png.740e8db8c61cf3f3b890948d7ef0a402.png

 

Taka modyfikacje dobrze uaktywnia promocje pod warunkiem ze koszyk jest pusty.

×
×
  • Create New...