2013-08-08 6 views
0

надеюсь кто-то может мне помочь.Magento // Получить последний созданный Продукт

У меня есть некоторые расчеты, выполняемые в моей корзине, чтобы изменить цену - это работает очень хорошо.

НО, если добавить один и тот же продукт дважды в корзине, но с разными Настраиваемыми значениями - значение опции Первых продуктов будет заменены значениями опционов второй ....

Ну ... не так хорошо, как хотелось бы!

Я не знаю, как это понять ... Итак, я сделал некоторые грязные вещи и клонировал каждый Продукт, который перемещается в корзину, - поэтому у меня есть новый Product_ID, и мои вычисления должны работать правильно, потому что i думаю, что проблема в том, что первые значения продукта получает только перезаписаны второй, потому что его же продукт Id .......

Так что теперь я хочу:

_1 Опции: Мне нужно, чтобы получить мои расчеты выполняются без изменения цены первого продукта, когда тот же Product_ID находится в корзине

o r

_2 Опция: мне нужно загрузить Клонированные продукты в корзине вместо оригинальных и показать их.

Любые идеи?

Cartcontroller.php

/** 
     * if customer enteres shopping cart we should mark quote 
     * as modified bc he can has checkout page in another window. 
     */ 
     $this->_getSession()->setCartWasUpdated(true); 

     Varien_Profiler::start(__METHOD__ . 'cart_display'); 
     $this 
      ->loadLayout() 
      ->_initLayoutMessages('checkout/session') 
      ->_initLayoutMessages('catalog/session') 
      ->getLayout()->getBlock('head')->setTitle($this->__('Shopping Cart')); 
     $this->renderLayout(); 
     Varien_Profiler::stop(__METHOD__ . 'cart_display'); 
    } 

    public function addAction() 
    { 
     $connection = Mage::getSingleton("core/resource")->getConnection("core_read"); 
     $cart = $this->_getCart(); 
     $params = $this->getRequest()->getParams(); 

     try { 
      if (isset($params['qty'])) { 
       $filter = new Zend_Filter_LocalizedToNormalized(
        array('locale' => Mage::app()->getLocale()->getLocaleCode()) 
       ); 
       $params['qty'] = $filter->filter($params['qty']); 
      } 

      $product = $this->_initProduct(); 
      $related = $this->getRequest()->getParam('related_product'); 

      /** 
      * CLONE PRODUCT 
      */ 
      $clone=$product->duplicate(); 
      $clone->setSku($clonedSku); 
      $clone->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE); 
      $clone->setStatus(1); // AKTIV=1 
      $clone->setVisibility(4); 
      $clone->setTaxClassId(2); 
      $clone->setCategoryIds("93"); 
      /** 
      * Check product availability 
      */ 
      if (!$clone) { 
       $this->_goBack(); 
       return; 
      } 

      $cart->addProduct($product, $params); 
      if (!empty($related)) { 
       $cart->addProductsByIds(explode(',', $related)); 
      } 


      $cart->save(); 



      ################## table from which to get percent sku catalog_product_option_type_value & catalog_product_option 
      foreach($this->_getQuote()->getAllItems() as $item) 
      {   
       if($item->getProductId() == $product->getId()) 

       { 
        $percentage_total = 0; 
        $optionsArray = array(); 
        foreach($params['options'] as $key => $value){ 
         $qry = "SELECT `catalog_product_option_type_value`.`option_type_id`, `catalog_product_option_type_value`.`option_id` ,`catalog_product_option_type_price`.`price` FROM `catalog_product_option_type_price` INNER JOIN `catalog_product_option_type_value` ON `catalog_product_option_type_price`.`option_type_id` = `catalog_product_option_type_value`.`option_type_id` AND `catalog_product_option_type_value`.`sku` = 'percent' AND `catalog_product_option_type_value`.`option_type_id` = '".$value."' AND `catalog_product_option_type_value`.`option_id` = '".$key."'"; 
         $percentvalue = $connection->fetchAll($qry); 
         if(intval($percentvalue[0]['price'])>0) $optionsArray[] = $percentvalue[0]; 
        } 
        if(count($optionsArray)>0) 
        { 
         $rowTotal = $item->getRowTotalInclTax(); 
         $newTotal = $rowTotal;// - $percentage_total; 
         $newTotalGrand = 0; 
         foreach($optionsArray as $optionsArr) 
         { 
          $newTotalGrand += $optionsArr['price']; 
         } 
         if($newTotalGrand>0) 
         { 

          $newTotalGrand = ($newTotal/100)*$newTotalGrand; 
          $newTotal = $newTotal + $newTotalGrand; 
          $query = "UPDATE `sales_flat_quote_item` SET `custom_price` = '".$newTotal."',`original_custom_price` = '".$newTotal."' WHERE `sales_flat_quote_item`.`item_id` ='".$item->getId()."'"; 
          $connection->query($query); 
         } 
        } 


       } 
      } 
         $clone->setPrice($newTotal); 
      $clone->getResource()->save($clone); 





      $this->_getSession()->setCartWasUpdated(true); 

ответ

0

Когда Magento добавляет продукты в корзину, он сначала выполняет поиск, чтобы увидеть, если продукт уже был добавлен, и просто увеличивает количество. Как вы помните, это не помогает при добавлении одного и того же продукта с различными настраиваемыми параметрами.

Я нашел способ сделать это очень вручную. Обязательно замените $YOUR_OPTIONS_HERE с пользовательскими опциями и захватывая правильный продукт

// be sure to load the correct product 
$product = Mage::getModel("catalog/product")->load($product_id); 
$cart = Mage::getSingleton("checkout/cart"); 
$cart->init(); 

$options = new Varien_Object(array("options" => $YOUR_OPTIONS_HERE, 
            "qty" => 1)); 

$addall = $product->getTypeInstance(true) 
    ->prepareForCartAdvanced($YOUR_OPTIONS_HERE, $product, Mage_Catalog_Model_Product_Type_Abstract::PROCESS_MODE_FULL); 
$addme = array_shift($addall); 

вручную создать новую продажи котировок детали для телеги

$item = Mage::getModel('sales/quote_item'); 
$item->setStoreId(Mage::app()->getStore()->getId()); 
$item->setProduct($addme) 
->setOptions($addme->getCustomOptions()); 

вручную добавить это в кавычки (корзина)

$item->setQty(1); 
$cart->getQuote()->addItem($item); 

После того, как вы разместили все, что вы хотите добавить

$cart->save(); 
+0

Ну, я думаю, вы не получили мою точку зрения: -/ Моя проблема не в том, что Magento просто добавляет qty + 1, когда я добавляю тот же продукт с другими настраиваемыми параметрами. У меня есть 2 товара на тележке, когда я добавляю продукт с различными вариантами. Моя проблема заключается в том, что когда я добавляю второй (тот же продукт, но разные варианты) в корзину, общее количество первого продукта будет перезаписано вторым. Мне нужен пурпурный, чтобы обрабатывать каждый продукт как уникальный! Когда я клонирую Продукт и добавляю это, проблем нет. –

+0

общее количество перезаписывается - вы имели в виду цену? У вас есть демоверсия? Вы можете использовать приведенное выше, чтобы установить пользовательскую цену на продукт, а также –