Magento - 动态产品/动态定价/动态创建产品

时间:2012-10-11 16:20:05

标签: php magento

我多次使用过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{
?> 

2 个答案:

答案 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编写一个自定义模块,反过来:

  • 将产品添加到购物篮时创建产品。
  • 订单完成后或客户将其从购物篮中移除时,再次移除该产品。
  • 定期修剪定制产品(例如通过Mage / cron),前提是它们还没有为您的任何客户存放。

这会产生临时产品而不是产品。

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