我多次使用过magento,但这是最终的挑战。我正在一家拥有400,000多种产品的magento商店工作 - 每种产品都有自己的变化/产品选择。我们的主商店每天都会添加和删除数百种产品(基于自定义购物车系统并在MSSQL上运行)。
我已配置magento以获取所有类别,产品,文字,说明,价格,变体等,并动态动态创建产品页,例如http://www.offices-furniture.co.uk/pp?prod=mercury-reception-unit.html
问题是我现在需要能够将这些产品添加到购物车中,而不会将它们实际存在于后端。我已经在后端添加了一个产品,并计划将其用作GENERAL模板类型的产品,因此它总是将这个产品(它的变体)添加到购物车中,例如
http://www.offices-furniture.co.uk/frodo.php但是我无法为我的生活付出代价...... grrrr ..
如果有人能指出我在正确的方向上如何通过前端的HTML或PHP更改价格并将其发布到购物车而不改变后端的价格
先谢谢所有人......
以下是我尝试用来更改价格的代码;
<?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 :(得分:5)
这是一个可能会帮助你的代码片段...当产品添加到购物车时,你肯定可以随时改变价格。我在 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);
}
}
}
答案 1 :(得分:2)
你的问题并不完全清楚。有两种可能的解释方法(我猜你的意思是第二种,因为第一个问题有一个相对简单的解决方案):
1)您只需要购物车中的自定义价格,但不需要经过结帐 2)您确实需要能够使用Magento结账以定制价格销售产品。
广告1:仅更改购物车中的价格
这相对容易。我会使用JavaScript和可通过AJAX访问的自定义PHP脚本,并可以计算应显示的价格。然后可以通过DOM操作完成此操作。在AJAX计算完成之前,CSS可以帮助您隐藏价格。
另一种方法是编辑价格模板文件。因为Magento phtml文件在当前呈现的对象的View类中被调用(例如购物车或报价),所以您将能够获得ProductID。然后,您可以检查正在添加的产品是否是您的魔术自定义模板产品,并相应地更改价格。
在基本/默认模板中,您将在base / default / template / checkout / cart / item / default.phtml中获取项目ID
$product_id = $_item->getProduct()->getId();
当您弄清楚您用于网站的Weee,InclTax等的组合时(因此您知道default.pthml中您的价格实际显示在哪里),您可以在那里获得if语句并显示自定义价格不知。
广告2:通过结帐保持价格变动
我认为不可能这样做。特别是Magento对订单完整性的迷恋(即使您从目录中删除了产品及其信息,即使您从目录中删除它们)。
您最接近这一点(至少就我想象的那样)是让您设置的模板产品包含一个自定义下拉选项,可以使用可变价格。
您可以尝试动态设置该自定义下拉选项的唯一值的价格,但我怀疑即使这样也行。您可以尝试的最后一件事是每次下订单时,为该产品的自定义选项添加一个值(使用您的自定义价格)。这样,你就可以将Magento的开销保持在最低水平,但仍然通过为Magento提供一种保存已售出的实物产品历史的方式来满足Magento的官僚作风。
另一个建议
还可以按照使用方式使用具有自定义选项的产品。如果您创建具有足够自定义选项(例如衬衫尺寸,颜色,打印,布料)的基本模板产品,并即时添加新的自定义选项值。这样,您还可以检查选项是否已存在,并且每个选项都可以有自己的附加价格值。
最后的建议
如果你真的想要全力以赴,你可以尝试为Magento编写一个自定义模块,反过来:
这会产生临时产品而不是产品。
我希望我已经分享了一些可以帮助你继续前进的想法!