Автор Тема: Критическая ошибка при добавлении в корзину PrestaShop 1.7  (Прочитано 890 раз)

14 Декабрь 2019, 23:13:39
  • Новичок
  • *
  • Сообщений: 46
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Хочу добавить в корзину товар из стороннего php файла. Товар добавляется но получаю на странице сообщение критическая ошибка.
<?if(!defined("TDM_PROLOG_INCLUDED") || TDM_PROLOG_INCLUDED!==true)die();

require($_SERVER["DOCUMENT_ROOT"].'/config/config.inc.php');

if(!TDM_ISADMIN){
    global $TDMCore;
    $arPGID = $TDMCore->arPriceGID;
    global $USER;
    $arGroups = array((int)Group::getCurrent()->id);

    $isAuthorisedGroup = false;
    foreach($arPGID as $TDM_GID=>$CMS_GID){
        if(in_array($CMS_GID,$arGroups)){
            $isAuthorisedGroup = true;
            if($_SESSION['TDM_USER_GROUP']!=$TDM_GID){
                $_SESSION['TDM_USER_GROUP']=$TDM_GID;
                header('Location: '.$_SERVER['REQUEST_URI']);
            }
            break;
        }
    }
    if (!$isAuthorisedGroup) {
        unset($_SESSION['TDM_USER_GROUP']);
    }
}

//Add to cart
if(defined('TDM_ADD_TO_CART') AND TDM_ADD_TO_CART){
global $arCartPrice;
if(is_array($arCartPrice)){
if($arCartPrice['OPTIONS']['MINIMUM']>1){$QUANTITY=$arCartPrice['OPTIONS']['MINIMUM'];}else{$QUANTITY=1;}
$DefaultCategory = 12;
$DefaultTaxGroup = 0;
$Price = $arCartPrice['PRICE_CONVERTED'];
$Reference = $arCartPrice['ARTICLE'].' / '.$arCartPrice['BRAND'];

//Presta init
global $context;
if(!$context){$context = Context::getContext();}
$logged = $context->cookie->__get('logged');
$id_cart = $context->cookie->__get('id_cart');
$id_lang = $context->cookie->__get('id_lang');
$id_guest = $context->cookie->__get('id_guest');
$id_currency = $context->cookie->__get('id_currency');

// Add cart if no cart found
if (!$id_cart){
$context->cart = new Cart();
$context->cart->id_customer = $context->customer->id;
$context->cart->id_currency = $id_currency;
$context->cart->add();
if($context->cart->id){
$context->cookie->id_cart = (int)$context->cart->id;
}
            $id_cart = (int)$context->cart->id;
}

$doAdd="Y";
//if(!$logged>0){$doAdd="N"; $TCore->arErrorMessages[] = 'You must be <a href="/index.php?controller=my-account">logged in</a> to buy products';}
//if(trim($Reference)=='' OR !$Price>0 OR !$QUANTITY>0){$doAdd="N"; $TCore->arErrorMessages[] = 'Add to cart data is missing!';}
if(!$id_cart>0){$doAdd="N"; ErAdd("Your cookie <b>id_cart</b> is wrong!",1);}
if(!$id_lang>0){$doAdd="N"; ErAdd("Your cookie <b>id_lang</b> is wrong!",1);}
if($doAdd!="N"){
//Check avail. tecdoc item in Presta
$sql = 'SELECT p.`id_product`, pl.`name` FROM `'._DB_PREFIX_.'product` p
LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product`)
WHERE pl.`id_lang` = '.$id_lang.' AND
p.`price` = '.$Price.' AND
p.`reference` = "'.$Reference.'"
';
$arRes = Db::getInstance()->executeS($sql);
if(count($arRes)>0){
$NewTID = $arRes[0]['id_product'];
}else{
                    //Supplier data (for 1C integration)
$supplierName = $arCartPrice['SUPPLIER_STOCK'];
                    $supplierId = $suppliers = (Supplier::getIdByName($supplierName));
                    if (!$supplierId) {
                        $supplier = new Supplier();
                        $supplier->name = $supplierName;
                        $supplier->active = 1;
                        $supplier->add();
                        $supplierId = $supplier->id;
                    }

$obProduct = new Product(false,false,$id_lang);
$obProduct->id_category_default = $DefaultCategory;
$obProduct->unity = $arCartPrice['ADD_URL'];
$obProduct->name = substr($arCartPrice['NAME'],0,400);
$obProduct->description = 'This product is created automatically by Partem. ';
$obProduct->description_short = $arCartPrice['SUPPLIER_STOCK'].' ['.$arCartPrice['DAY'].' days]';
$obProduct->price = $Price;
                    $obProduct->wholesale_price = $arCartPrice['PRICE'];
$obProduct->reference = $Reference;
$obProduct->link_rewrite = $arCartPrice['CPID'];
$obProduct->available_for_order = 1; //true
$obProduct->visibility = 'none';
$obProduct->is_virtual = 0;
if($arCartPrice['OPTIONS']['WEIGHT']>0){$obProduct->weight = round($arCartPrice['OPTIONS']['WEIGHT']/1000,2);}
if($arCartPrice['OPTIONS']['MINIMUM']>0){$obProduct->minimal_quantity = $arCartPrice['OPTIONS']['MINIMUM']; $QUANTITY=$arCartPrice['OPTIONS']['MINIMUM'];}
if($arCartPrice['OPTIONS']['USED']>0){$obProduct->condition = 'used';}
if($arCartPrice['OPTIONS']['RESTORED']>0){$obProduct->condition = 'refurbished';}

                    //supplier
                    $obProduct->supplier_name = $supplierName;
                    $obProduct->id_supplier = $supplierId;

$obProduct->id_tax_rules_group = $DefaultTaxGroup;
//echo '<br><pre>';print_r($obProduct);echo '</pre>';die();
$obProduct->add();
if($obProduct->id>0){
$NewTID = $obProduct->id;
$obProduct->setWsCategories(Array(Array("id"=>$DefaultCategory)));
//Add image
if($arCartPrice['IMG_SRC']!='' AND $NewTID>0){
$shops = Shop::getShops(true, null, true);
$image = new Image();
$image->id_product = $NewTID;
$image->position = Image::getHighestPosition($NewTID)+1;
$image->cover = true; // or false;
if(($image->validateFields(false, true)) === true && ($image->validateFieldsLang(false, true)) === true && $image->add()){
$image->associateTo($shops);
$tmpfile = tempnam(_PS_TMP_IMG_DIR_, 'ps_import');
if(Tools::copy($arCartPrice['IMG_SRC'], $tmpfile)){
$path = $image->getPathForCreation();
ImageManager::resize($tmpfile, $path.'.jpg');
}
unlink($tmpfile);
}
}
}else{
ErAdd(" new Item ID is false",1);
}
unset($obProduct);
}

if($NewTID>0){
if($arCartPrice['AVAILABLE']>0){StockAvailable::setQuantity($NewTID, false, $arCartPrice['AVAILABLE']);}
$obCart = new Cart($id_cart);
$obCart->id_lang = $id_lang;
$obCart->id_currency = $id_currency;
if($obCart->updateQty($QUANTITY,$NewTID)){
Header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); die();

                                       
}else{
ErAdd(" Add to Cart is false. NewTID=".$NewTID,1);
}
}
}

}
}


?>
15 Декабрь 2019, 13:17:54
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Какая ошибка? Что в отладчике написано?
18 Декабрь 2019, 22:09:19
Ответ #2
  • Новичок
  • *
  • Сообщений: 46
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Какая ошибка? Что в отладчике написано?
Fatal error: Uncaught PrestaShopException: Критична помилка in /home/var/www/html/classes/Tools.php:1109 Stack trace: #0 /home/var/www/html/classes/Product.php(3153): ToolsCore::displayError() #1 /home/var/www/html/classes/Product.php(4748): ProductCore::getPriceStatic(52, false, 0, 6, NULL, false, true, 1) #2 /home/var/www/html/classes/Cart.php(811): ProductCore::getProductProperties(1, Array) #3 /home/var/www/html/classes/Cart.php(1456): CartCore->getProducts(true) #4 /home/var/www/html/test/tocms/PrestaShop.php(153): CartCore->updateQty(1, 46) #5 /home/var/www/html/test/index.php(187): require_once('/home/var/www/h...') #6 {main} thrown in /home/var/www/html/classes/Tools.php on line 1109
19 Декабрь 2019, 13:37:05
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 1808
  • Репутация: +49/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Поля проверку не проходят. Можно функции преобразования типов использовать int и т.д.
19 Декабрь 2019, 17:45:36
Ответ #4
  • Новичок
  • *
  • Сообщений: 46
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Вот такая ошибка Notice: Undefined index: MINIMUM in /home/var/www/html/test/tocms/PrestaShop.php on line 42
39 if(defined('TDM_ADD_TO_CART') AND TDM_ADD_TO_CART){
40 global $arCartPrice;
41 if(is_array($arCartPrice)){
42 if($arCartPrice['OPTIONS']['MINIMUM']>1){$QUANTITY=$arCartPrice['OPTIONS']['MINIMUM'];}else{$QUANTITY=1;}   
43 $DefaultCategory = 12;
44 $DefaultTaxGroup = 0;
45 $Price = $arCartPrice['PRICE_CONVERTED'];
46 $Reference = $arCartPrice['ARTICLE'].' / '.$arCartPrice['BRAND'];


20 Декабрь 2019, 11:51:34
Ответ #5
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Инициализируйте переменную до ее применения.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
29 Декабрь 2019, 23:40:30
Ответ #6
  • Новичок
  • *
  • Сообщений: 46
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Инициализируйте переменную до ее применения.
Что-то не могу понять в чем проблема???
global $arCartPrice;
$arCartPrice = $arPrice;



                       $arPrice["OPTIONS"] = '';
        //Price options
$arOps = Array();
//$MINIMUM = (string)$obRes->packing;
if($MINIMUM>1){$arOps['MINIMUM']=$MINIMUM;}
$WEIGHT = (string)$obRes->weight; //Вес одной единицы товара в килограммах
if($WEIGHT>0){$arOps['WEIGHT']=$WEIGHT;}
$LITERS = (string)$obRes->volume; //Объем одной единицы товара
if($LITERS>0){$arOps['LITERS']=$LITERS;}
$PERCENTGIVE = (string)$obRes->deliveryProbability; //Вероятность поставки товара поставщика
if($PERCENTGIVE>0){$arOps['PERCENTGIVE']=$PERCENTGIVE;}
$NORETURN = (string)$obRes->noReturn; //Флаг "Без возврата"
if($NORETURN>0){$arOps['NORETURN']=$NORETURN;}
$arPrice["OPTIONS"] = TDMOptionsImplode($arOps,$arPrice);
//Add new record
$arPrices[] = $arPrice;


это функция:
function TDMOptionsImplode($arOps, $arPrice = array()) {
$SET = intval($arOps["SET"]);
$WEIGHT = intval($arOps["WEIGHT"]);
$USED = intval($arOps["USED"]);
$RESTORED = intval($arOps["RESTORED"]);
$DAMAGED = intval($arOps["DAMAGED"]);
$NORETURN = intval($arOps["NORETURN"]);
$COPY = intval($arOps["COPY"]);
$HOT = intval($arOps["HOT"]);
$OptionDay = TDMOptionNumbers($arPrice["DAY"]);
$OptionAvail = TDMOptionNumbers($arPrice["AVAILABLE"]);
$PRICE_ID = intval($arOps["PRICE_ID"]);
$PERCENTGIVE = intval($arOps["PERCENTGIVE"]);
$MINIMUM = intval($arOps["MINIMUM"]);
29 Январь 2020, 22:59:43
Ответ #7
  • Новичок
  • *
  • Сообщений: 46
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Поля проверку не проходят. Можно функции преобразования типов использовать int и т.д.
А можно подробней. А то не совсем понимаю?
30 Январь 2020, 12:14:53
Ответ #8
  • Ветеран
  • *****
  • Сообщений: 1808
  • Репутация: +49/-1
  • Сообщество PrestaShop
    • Просмотр профиля
1. В getPriceStatic(52, false, 0, 6, NULL, false, true, 1)  проверить типы переменных нужно.
2. $arCartPrice['OPTIONS']['MINIMUM'] - В массиве arCartPrice индекс MINIMUM нужно до использования определить.