2013-03-18 2 views
0

Моя цель проста. У меня есть модуль под названием «Котировки», мне удалось заставить Magento создать новую запись цитаты каждый раз, когда создается корзина, изменив столбец is_active, когда цитата «вышла». Поэтому у меня есть куча цитат, связанных с клиентом, и у меня есть строки продаж/order_item, каждая из которых связана с цитатой. У меня есть страница в бэкэнд, которая отображает сетку всех кавычек. Когда клика нажата, на странице редактирования есть две вкладки: одна с Form.php, отображающая детали цитаты. (имя клиента, дата и т. д.), то у меня есть еще одна вкладка, которая должна содержать сетку всех элементов этой цитаты. Кажется, так просто:Magento Adminhtml Сетка с использованием коллекции sales/order_item, отфильтрованной клиентом

$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

Это отличная идея, кстати – Dan

ответ

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(); 
} 
0

Возможно, я ошибаюсь, но вы не можете установитьCollection() в цитату с элементами заказа клиента. Он должен быть заполнен элементами модели продаж/кавычек.

Я не знаю, каков объем $ this в _prepareCollection(), но я предполагаю, что он находится на блоке корзины, имея дело с цитатой.

Только намек, вы мощь вместо print_r ($ коллекции), попробуйте сделать это ...

echo "<pre>"; 
foreach ($collection as $item) { 
    var_dump($item->debug()); 
} 

Это обеспечивает в значительной степени только важную информацию, а не структуры базы данных. Вы также можете проверить свой тип элемента и убедиться, что используете подходящую модель для своего метода setCollection. Вы также можете бросить перерыв; там, если вы хотите просто получить первый элемент и т. д. Отладка объектов magento может быть утомительной, и я обнаружил, что это помогает.