摘要
我想创建一个未保存到产品的产品属性,或者像普通产品属性一样显示在产品编辑页面上.相反,我希望它保存到订单/报价项目并显示在订单,发票等.在将产品添加到购物车之前,它还应该由前端的客户配置.
细节
我的问题
<input>当产品添加到购物车时,以及稍后在结账过程中,如何验证并最终将前端产品页面上的值保存到报价项目中?更新1
我发现我可以在诸如此类的事件中在catalog/product模型上运行此代码(并且可能sales/quote_item也是如此)sales_quote_item_qty_set_after
$infoBuyRequest = $product->getCustomOption('info_buyRequest');
$buyRequest = new Varien_Object(unserialize($infoBuyRequest->getValue()));
$myData = $buyRequest->getMyData();
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我能够从<input>产品页面上检索我的自定义客户提供的数据.
我怀疑这info_buyRequest是与报价和订单项目一起保存的.如果是这样,这部分解决了我的问题1和2.但是,我仍然不知道在哪里运行此代码是合适的,我不知道如何在后端订单/报价/报告页面上显示它.另外我相信,因为它作为序列化值存储在数据库中,根据我的自定义数据获取报价/订单项集合将是最困难的.
我想(临时)删除我的变量的单位@baseLineHeight和@baseFontSize,这样我可以把他们得到相对line-height.这就是我尝试过的:
@baseFontSize: 12px;
@baseLineHeight: 18px;
font: @baseFontSize~"/"@baseLineHeight/@baseFontSize sans-serif;
Run Code Online (Sandbox Code Playgroud)
生成以下错误:
Object #<Object> has no method 'toCSS' (Less::ParseError)
Run Code Online (Sandbox Code Playgroud)
首选输出:
font: 12px/1.5 sans-serif;
Run Code Online (Sandbox Code Playgroud) 使用Magentos集合模型,我该如何添加查询部分/过滤器,例如:
WHERE (main_table.x < 1 OR (main_table.x - main_table.y) >= 5)
Run Code Online (Sandbox Code Playgroud)
更新 我现在运行这个:
$this->getSelect()
->where('main_table.x < 1')
->orWhere('(main_table.x - main_table.y) >= :qty');
$this->addBindParam(':qty', $qty);
Run Code Online (Sandbox Code Playgroud)
结果:
SELECT ... WHERE ... AND ... AND (main_table.x < 1) OR ((main_table.x - main_table.y) >= :qty) ORDER BY ...
Run Code Online (Sandbox Code Playgroud)
问题是,我似乎无法得到绑定$qty到:qty
更新2
我最终得到了这个,因为我需要OR在括号内
$this->getSelect()->where('(main_table.x < 1 OR (main_table.x - main_table.y) >= ?)', $qty);
Run Code Online (Sandbox Code Playgroud) 以下网页将在Firefox 3.5中以意外结果呈现.第一个<address>元素不会有粉红色背景,但第二个元素将不会.这只发生在我身上吗?我的代码不正确吗?或者这是一个错误?
编辑:这也发生在Firefox 3.6中
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Firefox 3.5 bug!</title>
<style>
address
{
background: pink;
}
</style>
</head>
<body>
<address>
<ul>
<li>This will NOT have a pink background in Firefox 3.5</li>
</ul>
</address>
<address>
<p>But this will</p>
</address>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我想对某些产品实施全球订单限制.关键是我想在某些产品上启用延期交货,并定义几个日期,这些日期对可订购的这些单个产品的数量有限制.
目前,我的自定义模型已加载所选日期期间的相关信息,并$product->setMyModel(...)在这些事件加载时附加到产品模型:
catalog_product_load_aftercatalog_product_collection_load_aftersales_quote_item_collection_products_after_load使用特定产品的数据访问我的模型就像调用一样简单$product->getMyModel(),因此我将其简称为我的模型.
这就是我想要做的:
1.每当产品被添加到购物车/报价或订单时,我都想做这样的事情(伪代码):
// Somehow get $product and $requestedQty (most likely from an event)
$myModel = $product->getMyModel();
if($myModel->applyOrderLimit()) {
// ($orderedQty + $requestedQty) <= $orderLimit
if($myModel->isRequestedQtyAvailable($requestedQty)) {
// Issue an error and prevent the item from being ordered
return;
}
// $orderedQty += $requestedQty
$myModel->addToQtyOrdered($requestedQty);
}
// Continue Magentos default behaviour
Run Code Online (Sandbox Code Playgroud)
1.1.我怀疑Mage_CatalogInventory_Item::checkQuoteItemQty()应该重写以捕获$requestedQty这里.
2.更新$myModel::ordered_qty每当订单被取消,退款或这样.
我想真正的问题是我在哪里运行这个代码,是否有更多的东西来实现这样的订单限制并跟踪数量而不是我已经意识到的?
对我来说,这似乎是一项非常复杂的任务.这就是为什么我需要更有经验的Magento开发人员的帮助!
注意:我无法弄清楚如何混合编号列表和代码块,但我希望它足够可读
magento ×3
php ×3
css ×2
php-5.3 ×2
firefox3.5 ×1
firefox3.6 ×1
html ×1
html5 ×1
less ×1
web ×1