首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Magento -动态产品/动态定价/动态创造产品

Magento -动态产品/动态定价/动态创造产品
EN

Stack Overflow用户
提问于 2012-10-11 16:20:05
回答 2查看 4.4K关注 0票数 3

我多次使用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更改价格,并将其张贴到购物车上,而不改变后端的价格

预先感谢所有的…

这是我尝试用以改变价格的代码;

代码语言:javascript
运行
复制
    <?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{
?> 
EN

回答 2

Stack Overflow用户

发布于 2012-10-22 16:39:26

这里有个片段可以帮你..。当产品被添加到购物车中时,你可以立即改变价格。我在checkout_cart_save_before事件观察者上使用了这个,在这个例子中,当一个项目的重量超过10磅时,它就会触发。

代码语言:javascript
运行
复制
/**
 * 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);
        }
    }
}
票数 5
EN

Stack Overflow用户

发布于 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。

代码语言:javascript
运行
复制
$product_id = $_item->getProduct()->getId();

当你找出你的网站使用的Weee,InclTax等的组合(所以你知道在default.pthml中你的价格会在哪里显示),你可以在那里得到一个if语句,并以某种方式显示定制的价格。

广告2:通过结帐保持价格变动

我觉得这样做是不可能的。特别是在Magento沉迷于订单完整性的情况下(因为即使您从目录中删除了它们,产品及其信息也始终可以通过该订单获得)。

最接近这一点(至少据我所能想象的)是让您设置的模板产品包括一个自定义下拉选项,该选项允许使用可变的价格。

您可以尝试动态地设置自定义下拉选项的唯一值的价格,但我甚至怀疑这是否有效。最后一件事,你可以尝试是增加一个价值(与您的自定义价格),为该产品的定制选项,每次下订单。这样,你可以将马根托的开销保持在最低限度,但仍然满足马根托官僚主义,提供马根托一种方法来保存你销售的实物产品的历史记录。

另一项建议

也有可能使用具有自定义选项的产品,就像使用它们的方式一样。如果您创建一个基本的模板产品与足够的定制选项(例如衬衫的大小,颜色,打印,织物),并添加新的定制选项值。这样,您还可以检查一个选项是否已经存在,并且每个选项都可以有自己的附加价格价值。

最后的建议

如果您真的想全力以赴,可以尝试为Magento编写一个自定义模块:

  • 当产品被添加到篮子中时创建一个产品。
  • 当订单完成或客户将其从篮子中移除时,再次删除该产品。
  • 定期修剪定制产品(例如,通过Mage/cron),前提是它们不在为您的任何客户保存的日光浴中。

这将创建临时产品,而不是完全没有产品。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12844129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档