2012-10-11 108 views
2

我已经多次使用过magento,但这是最终的挑战。我正在一家拥有400,000多种产品的magento商店工作,每个商店都有自己的变体/产品选项。我们的主商店(基于自定义购物车系统并在MSSQL上运行)每天添加和移除数百种产品。Magento - 动态产品/动态定价/即时创建产品

我已经配置的Magento抓住所有的类别,产品,文本,DESCRIPTIO,价格变化等,并在飞行中如http://www.offices-furniture.co.uk/pp?prod=mercury-reception-unit.html

的问题是我现在需要能够添加动态创建的产品页面这些产品到购物车没有他们物理存在的后端。我已经添加了一个产品到后端,并计划使用这个作为一个通用模板类型的产品,所以它总是将这个产品(变体)添加到购物车中,例如

http://www.offices-furniture.co.uk/frodo.php但我不能为我得到的价格改变.... grrrr ..

如果任何人都可以指出我在正确的方向如何通过前端的HTML或PHP更改价格,并将其张贴到购物车而不更改价格在后端

在此先感谢所有...

这里是我试过全光照的代码g改变价格;

<?php 
require_once ("app/Mage.php"); 
umask(0); 

Mage::app("default"); 

Mage::getSingleton("core/session", array("name" => "frontend")); 

// get the current Magento cart 
$cart = Mage::getSingleton('checkout/cart'); 
$product = Mage::getModel('catalog/product'); 
$product->setCustomPrice(99); 
$product->setOriginalCustomPrice(99); 
$product->getProduct()->setIsSuperMode(true); 
$product->setTypeId('configurable'); 
$product->setTaxClassId(1); //none 
$product->setSku(ereg_replace("\n","","videoTest2.2")); 
$product->setName(ereg_replace("\n","","videoTest2.2")); 
$product->setDescription("videoTest2.2"); 
$product->setPrice("129.95"); 
$product->setShortDescription(ereg_replace("\n","","videoTest2.2")); 
$cart->save(); 

if(isset($_POST['submit'])){ 

// call the Magento catalog/product model 

$product = Mage::getModel('catalog/product') 
// set the current store ID 
->setStoreId(Mage::app()->getStore()->getId()) 
// load the product object 
->load($_POST['product']); 
*/ 

//////////////////////////// 
// get the current Magento cart 
$cart = Mage::getSingleton('checkout/cart'); 
$product = Mage::getModel('catalog/product') 
// set the current store ID 
->setStoreId(Mage::app()->getStore()->getId()) 
// load the product object 
->load($_POST['product']); 
$product->setCustomPrice(99); 
$product->setOriginalCustomPrice(99); 
$product->getProduct()->setIsSuperMode(true); 
$product->setTypeId('configurable'); 
$product->setTaxClassId(1); //none 
$product->setSku(ereg_replace("\n","","videoTest2.2")); 
$product->setName(ereg_replace("\n","","videoTest2.2")); 
$product->setDescription("videoTest2.2"); 
$product->setPrice("129.95"); 
$product->setShortDescription(ereg_replace("\n","","videoTest2.2")); 
$cart->save(); 
///////////////////////////////////// 

// start adding the product 
// format: addProduct(<product id>, array(
// 'qty' => <quantity>, 
// 'super_attribute' => array(<attribute id> => <option id>) 
//) 
//) 
$cart->addProduct($product, array(
'qty' => $_POST['qty'], 
'price' => 50, 

'super_attribute' => array(key($_POST['super_attribute']) => $_POST['super_attribute'][525]) 
) 
); 

// save the cart 
$cart->save(); 

// very straightforward, set the cart as updated 
Mage::getSingleton('checkout/session')->setCartWasUpdated(true); 

// redirect to index.php 
header("Location: frodo.php"); 

}else{ 
?> 
+0

我不认为你可以改变价格这种方式......看看http://stackoverflow.com/questions/9721583/changing-the-price-in-quote-while-adding-product-到购物车,Magento的 –

回答

1

您的问题并不完全清楚。有两种可能的解释方法(我猜你的意思是第二种,因为第一个问题有一个相对简单的解决方案):

1)您只需要购物车中的自定义价格,但它不需要通过结帐持续
2)您确实需要能够使用Magento结帐将产品以自定义价格出售。

广告1:只有改变价格在购物车

这是比较容易的。我会使用JavaScript和通过AJAX访问的自定义PHP脚本,并可以计算应显示的价格。这可以通过DOM操作完成。在AJAX计算完成之前,CSS可以帮助您隐藏价格。

这样做的另一种方法是编辑价格模板文件。由于Magento phtml文件在当前呈现的对象(例如购物车或引用)的View类中被调用,因此您将能够获取ProductID。然后,您可以检查正在添加的产品是否是您的神奇自定义模板产品并相应地更改价格。

在基地/默认模板,你会获得该项目ID作为这样的基础/默认/模板/结帐/车/项目/ default.phtml

$product_id = $_item->getProduct()->getId(); 

当你弄清楚WEEE的什么样的组合, InclTax等你用于你的网站(所以你知道你的价格实际得到显示在default.pthml中),你可以在那里得到一个if语句并以某种方式显示定制价格。

广告2:保持价格结帐

改变了,我不认为这是可能做到这一点。特别是随着Magento的着迷为了完整性(该等产品和他们的信息将始终可以通过该命令,即使你从目录中删除)。

你会得到这个(至少据我可以想像)最接近的是有你设置的模板产品包括了能够利用可变价格自定义下拉选项。

你可以尝试动态设置为自定义下拉选项的唯一值的价格,但我怀疑,甚至会工作。然后,您可以尝试的最后一件事是每次下单时向该产品的自定义选项添加一个值(使用您的自定义价格)。这样一来,你一直Magento的开销降到最低,而是通过提供Magento的一种方式,让你所出售的实物产品的历史,仍然满足Magento的官僚机构。

另一个建议

还有使用产品的定制选项,他们注定要被使用的方式的可能性。如果您创建的基本模板产品具有足够的自定义选项(例如衬衫尺寸,颜色,印刷,面料)并随时添加新的自定义选项值。这样你也可以检查一个选项是否已经存在,每个选项可以有自己的附加价格值。

最后建议

如果你真的想全力以赴,你可以尝试写Magento的自定义模块,依次为:

  • 创建产品时,它被添加到篮。
  • 当订单完成后或当客户从篮子中删除再删除该产品。
  • 定期修剪定制产品(例如通过Mage/cron),前提是它们不会存储在任何客户的存储中。

这将在所有创建临时产品,而不是没有产品。

我希望我分享了一些可以帮助你前进的想法!

4

这里有一段代码可能会帮助你......当产品被添加到购物车时,你可以在飞行中明确地改变价格。我在checkout_cart_save_before事件观察者上使用它,在此示例中,它会在物品的重量超过10磅时触发。

/** 
* Set the price if the weight is over 10 lbs 
* 
* @param Varien_Event_Observer $observer 
*/ 
public function setPriceOnCartSaveBefore(Varien_Event_Observer $observer) 
{ 
    $cart = $observer->getCart(); 
    $items = $cart->getItems(); 

    foreach($items as $item) { 
     if ($item->getWeight() > 10) { 
      $item->setCustomPrice(69.99); 
      $item->setOriginalCustomPrice(69.99); 
     } 
    } 
}