Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: joomla+virtuemart не корректно работает
Форумы портала PHP.SU » PHP » Программирование на PHP » joomla+virtuemart не корректно работает

Страниц (1): [1]
 

1. electronik - 18 Октября, 2010 - 00:16:10 - перейти к сообщению
Устроился на новую работу, у них есть сайт на joomla, с прикрученным магазином virtuemart, так вот , в шаблон товаров, было добавлено поле "id"(добавлял не я, поэтому не знаю как оно добавлялось, скорее всего через админку) в которое вписывается в ручную id товара, при заказе формируется файл и уходит на почту, этот файл потом загружается в 1С для контроля расходов. Проблема в том что не со всех товаров подхватывается этот id, хотя на всех товарах он проставлен и в базе MySQL он есть, не могу понять причину такого поведения, у всех групп и товаров стоят одинаковые параметры, иногда id не берутся со всей группы, иногда с каких-то определённых товаров из группы X.

Вопрос как отследить из-за чего с этих товаров не берутся id, в базе есть, в приходящем файле нет.
2. electronik - 19 Октября, 2010 - 00:26:39 - перейти к сообщению
Подскажите может можно как-то отмониторить процесс формирования файла или запросы к БД.
3. electronik - 21 Октября, 2010 - 14:54:29 - перейти к сообщению
Вот функция получения id, товар разделен, на половинные порции.
PHP:
скопировать код в буфер обмена
  1. while($dboi->next_record())
  2.         {
  3.             $productNumber++;
  4.             $xmlFile['tag']['menu'][$productNumber]['product_name'] = $dboi->f("product_name");
  5.             //$xmlFile['tag']['menu'][$productNumber]['id'] = $dboi->f("product_id");
  6.            
  7.             $q  = "SELECT * FROM #__{vm}_product_price WHERE product_id=".$dboi->f("product_id");
  8.             $db_price->query($q);
  9.             $db_price->next_record();
  10.             $quantity = $dboi->f("product_quantity");
  11.            
  12.             // Check the quantity
  13.             if( floor($quantity) == $quantity ){
  14.                 $xmlFile['tag']['menu'][$productNumber]['quantity'] = $quantity;
  15.                 $xmlFile['tag']['menu'][$productNumber]['price'] =
  16.                     $db_price->f("product_price")*$xmlFile['tag']['menu'][$productNumber]['quantity'];
  17.             } if( floor($quantity) + 0.5 == $quantity )
  18.                                 {
  19.                 //Adding integer part of the quantity
  20.                 if($quantity >= 1)
  21.                 {
  22.  
  23.                                         $xmlFile['tag']['menu'][$productNumber]['id'] = $db_price->f("pizza_id");
  24.                     $xmlFile['tag']['menu'][$productNumber]['quantity'] = floor($quantity);
  25.                     $xmlFile['tag']['menu'][$productNumber]['price'] =
  26.                         $db_price->f("product_price")*floor($xmlFile['tag']['menu'][$productNumber]['quantity']);
  27.                     $xmlFile['tag']['order_summ'] += $xmlFile['tag']['menu'][$productNumber]['price'];
  28.                     $productNumber++;
  29.                 } else
  30.                 //Adding 0.5 part of the quantity
  31.                 $xmlFile['tag']['menu'][$productNumber]['id'] = $db_price->f("pizza_id_half");
  32.                 $xmlFile['tag']['menu'][$productNumber]['product_name'] = $dboi->f("product_name");
  33.                 $xmlFile['tag']['menu'][$productNumber]['quantity'] = 0.5;
  34.                 $xmlFile['tag']['menu'][$productNumber]['price'] = $db_price->f("product_price_half");
  35.             } else {
  36.                 $xmlFile['tag']['menu'][$productNumber]['quantity'] = round($quantity);
  37.                 $xmlFile['tag']['menu'][$productNumber]['price'] =
  38.                     $db_price->f("product_price")*$xmlFile['tag']['menu'][$productNumber]['quantity'];
  39.             }
  40.              


я так понимаю что проблема в строке
PHP:
скопировать код в буфер обмена
  1. if( floor($quantity) + 0.5 == $quantity )


потому что при отладке, после неё он всё пропускает и перескакивает сразу на
PHP:
скопировать код в буфер обмена
  1. $xmlFile['tag']['menu'][$productNumber]['quantity'] = round($quantity);

(Добавление)
И обрабатывает почему-то только половинные порции.
4. OrmaJever - 21 Октября, 2010 - 15:24:20 - перейти к сообщению
а в чём логика этой строки?
electronik пишет:
PHP:
скопировать код в буфер обмена
  1. $quantity = $dboi->f("product_quantity");
  2. if( floor($quantity) + 0.5 == $quantity )

true будет только если $quantity будет числом 0.5, 1.5, 2.5 и т.д

и что за функция f() в класе?
5. electronik - 21 Октября, 2010 - 15:49:44 - перейти к сообщению
Разобрался.
тут начиналась обработка половинных заказов
PHP:
скопировать код в буфер обмена
  1. if( floor($quantity) + 0.5 == $quantity )  

так что перед ней нужно было просто вставить фун-цию получения "целого" кода, т.е правильно должно быть так
PHP:
скопировать код в буфер обмена
  1.  // Check the quantity
  2.             if( floor($quantity) == $quantity ){
  3.                 $xmlFile['tag']['menu'][$productNumber]['id'] = $db_price->f("pizza_id");
  4.                 $xmlFile['tag']['menu'][$productNumber]['quantity'] = $quantity;
  5.                 $xmlFile['tag']['menu'][$productNumber]['price'] =
  6.                     $db_price->f("product_price")*$xmlFile['tag']['menu'][$productNumber]['quantity'];
  7.  

Цитата:
и что за функция f() в класе?

это получение данных из MySQL.

 

Powered by ExBB FM 1.0 RC1