3

我用过很多次magento,但这是终极挑战。我在一家拥有超过 400,000 种产品的 magento 商店工作——每种产品都有自己的变体/产品选项。每天在我们的主商店(基于自定义购物车系统并在 MSSQL 上运行)上添加和删除数百种产品。

我已将 magento 配置为获取所有类别、产品、文本、描述、价格、变化等,并动态创建产品页面,例如http://www.offices-furniture.co.uk/pp?prod=mercury-接收单元.html

问题是我现在需要能够将这些产品添加到购物车中,而它们实际上并不存在于后端。我已将一种产品添加到后端并计划将其用作 GENERAL 模板类型的产品,因此始终将其添加到购物车中的该产品(它的变体),例如

http://www.offices-furniture.co.uk/frodo.php但我这辈子都无法改变价格...... grrrr ..

如果有人能指出我如何在前端通过 HTML 或 PHP 更改价格并将其发布到购物车而不更改后端价格的正确方向

在此先感谢大家...</p>

这是我尝试用来更改价格的代码;

    <?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{
?> 
4

2 回答 2

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);
        }
    }
}
于 2012-10-22T16:39:26.263 回答
2

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

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

广告一:只在购物车中更改价格

这相对容易。我会使用 JavaScript 和自定义 PHP 脚本,该脚本可通过 AJAX 访问,并且可以计算应显示的价格。这可以通过 DOM 操作来完成。CSS 可以帮助您隐藏价格,直到 AJAX 计算完成。

另一种方法是编辑价格模板文件。因为 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),前提是它们还没有存放在为您的任何客户准备的仓库中。

这将创建临时产品,而不是根本没有产品。

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

于 2012-10-18T23:59:31.290 回答