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.