我多次使用magento,但这是最终的挑战。我正在一家magento商店工作,该商店有400,000多种产品--每个商店都有自己的变体/产品选择。每天都会在我们的主商店(基于自定义购物车系统并运行在MSSQL上)添加和删除数百种产品。
我已将magento配置为获取所有类别、产品、文本、描述符、价格、变体等,并动态创建产品页面,例如http://www.offices-furniture.co.uk/pp?prod=mercury-reception-unit.html。
问题是,我现在需要能够将这些产品添加到购物车中,而不需要它们在后端实际存在。我在后端添加了一个产品,并计划将其用作通用模板类型产品,因此它总是将这个产品(它的变体)添加到购物车中。
http://www.offices-furniture.co.uk/frodo.php,但我不能为我的生命得到改变的代价.格里尔..。
如果有人能为我指出正确的方向,如何通过前端的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{
?> 发布于 2012-10-22 16:39:26
这里有个片段可以帮你..。当产品被添加到购物车中时,你可以立即改变价格。我在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);
}
}
}发布于 2012-10-18 23:59:31
你的问题还不完全清楚。解释这个问题有两种可能的方法(我猜你指的是第二种方法,因为第一个问题有一个相对容易的解决方案):
1)你只需要购物车中的自定义价格,但它不需要在结账过程中持续
2)您确实需要能够使用Magento结帐以自定义的价格销售产品。
广告1:仅在购物车中改变价格
这是相对容易的。我将使用JavaScript和一个可以通过AJAX访问的自定义PHP脚本,并且可以计算应该显示的价格。然后可以通过DOM操作来完成这一任务。CSS可以帮助您隐藏价格,直到AJAX计算完成。
另一种方法是编辑价格模板文件。因为Magento文件是在当前呈现的对象的View类中调用的(例如,购物车或引号),所以您将能够获得ProductID。然后,您可以检查正在添加的产品是否是您神奇的自定义模板产品,并相应地更改价格。
在基本/默认模板中,您将在base/default/template/checkout/cart/item/default.phtml中获得项ID。
$product_id = $_item->getProduct()->getId();当你找出你的网站使用的Weee,InclTax等的组合(所以你知道在default.pthml中你的价格会在哪里显示),你可以在那里得到一个if语句,并以某种方式显示定制的价格。
广告2:通过结帐保持价格变动
我觉得这样做是不可能的。特别是在Magento沉迷于订单完整性的情况下(因为即使您从目录中删除了它们,产品及其信息也始终可以通过该订单获得)。
最接近这一点(至少据我所能想象的)是让您设置的模板产品包括一个自定义下拉选项,该选项允许使用可变的价格。
您可以尝试动态地设置自定义下拉选项的唯一值的价格,但我甚至怀疑这是否有效。最后一件事,你可以尝试是增加一个价值(与您的自定义价格),为该产品的定制选项,每次下订单。这样,你可以将马根托的开销保持在最低限度,但仍然满足马根托官僚主义,提供马根托一种方法来保存你销售的实物产品的历史记录。
另一项建议
也有可能使用具有自定义选项的产品,就像使用它们的方式一样。如果您创建一个基本的模板产品与足够的定制选项(例如衬衫的大小,颜色,打印,织物),并添加新的定制选项值。这样,您还可以检查一个选项是否已经存在,并且每个选项都可以有自己的附加价格价值。
最后的建议
如果您真的想全力以赴,可以尝试为Magento编写一个自定义模块:
这将创建临时产品,而不是完全没有产品。
我希望我已经分享了一些想法,可以帮助你前进!
https://stackoverflow.com/questions/12844129
复制相似问题