我的目标很简单。我有一个名为Quotes的模块,我已经设法让Magento在每次创建购物车时创建一个新的报价记录,方法是在“检出”报价时更改is_active列。所以我有一堆报价,每个报价都与客户有关,我有sales / order_item行,每行与报价相关。 我在后端有一个页面,显示所有引号的网格。单击引号时,编辑页面有两个选项卡,一个带有Form.php,显示引用的详细信息。 (客户名称,日期等),然后我有另一个选项卡,其中应包含该引用中所有项目的网格。看起来很简单:
$this->addTab("items_section", array(
"label" => Mage::helper("quote")->__("Quote Items"),
"title" => Mage::helper("quote")->__("Quote Items"),
"content" => $this->getLayout()->createBlock("quote/adminhtml_quotes_edit_tab_cart")->toHtml(),
));
然后在我的购物车块中我有这个:
protected function _prepareCollection()
{
$collection = Mage::getModel('sales/order_item')->getCollection();
print_r($collection);
$this->setCollection($collection);
return parent::_prepareCollection();
}
我甚至不想加载正确的集合(通过order_id),因为这里首先要解决一个问题:print_r
语句显示我指定的集合,但将其传递给$ this-> setCollection($ collection)让我在网格中呈现'找不到记录'。在典型的Magento方式中没有错误等。我理解该模型应该根据需要查询数据库,但似乎并没有发生。我想是时候阅读Mage :: core文件,但是你可以想象我对如此简单的任务感到非常沮丧,所以如果有人知道这里发生的事情可以帮助我,我会很感激。提前谢谢。
答案 0 :(得分:0)
我可能错了,但您不能在带有销售订单商品的报价上设置.Collection()。它必须填充销售/报价模型项目。
我不知道$ this在_prepareCollection()中的范围是什么,但我假设它在购物车块上,它处理报价。
只是提示,你可能而不是print_r($ collection),尝试这样做......
echo "<pre>";
foreach ($collection as $item) {
var_dump($item->debug());
}
它几乎只提供重要信息而不是数据库结构。您还可以检查项目类型,并确保使用setCollection方法的正确模型。你也可以休息一下;在那里如果你想获得第一个项目等。调试magento对象可能很乏味,我发现这有帮助。
答案 1 :(得分:0)
我们的首席开发人员成功帮助我实现了目标。我们仍然不确定为什么,但这似乎有效
protected function _prepareCollection()
{
$quoteId = $this->getRequest()->getParam('id');
$quote = Mage::getModel('sales/quote')->getCollection()->addFieldToFilter('entity_id', $quoteId);
if ($quote->getFirstItem()->getId()) {
$collection = $quote->getFirstItem()->getItemsCollection(false);
}
$this->setCollection($collection);
return parent::_prepareCollection();
}