Magento 1.7 Не удается отправить заголовки; заголовки, уже отправленные

SOLVED Я решил эту проблему с помощью Джонатана Хасси, я изменил эту строку:

$mModel->getCollection()->load($mId)->getData(); 

для этого:

 $mModel->getCollection()->addFieldToFilter('met_id',$Id)->getSelect(); 

проблема
Я создал настраиваемый модуль, который добавил вкладку на страницу продукта администратора с дополнительным текстовым полем. Когда я пытаюсь сохранить этот продукт, я получаю эту ошибку:

 a:5:{i:0;s:140:"Cannot send headers; headers already sent in /home/nano/domains/mydomain/public_html/gw/lib/Varien/Data/Collection/Db.php, line 693";i:1;s:1630:"#0 /home/nano/domains/mydomain/public_html/gw/lib/Zend/Controller/Response/Abstract.php(148): Zend_Controller_Response_Abstract->canSendHeaders(true)... 

Я видел, что эта ошибка создана в Observer.php:

 $mId = $collection['m_id']; $mModel->getCollection()->load($mId)->getData(); <-- this line give an error $data['met_id'] = $mId; $data['product_id'] = $product->getId(); $data['metf1'] = $this->_getRequest()->getPost('f1'); $mModel->setData($data); $mModel->save(); 

У вас есть идеи, как это исправить?

EDIT содержимое файла вкладки шаблона администратора:

 <?php $product = Mage::registry('current_product'); $mItem = Mage::getModel('mmodel/mmodel')->getCollection()-> addFilter('product_id',$product->getId())->getFirstItem(); echo '<div class="input-field"> <label for="f1">File</label> <input type="text" class="input-text" name="f1" id="f1" value='.$mItem['f1'].' /> </div>'; 

Отладка backtrace после строки $mModel->getCollection()->load($mId)->getData(); от Observer.php

 SELECT `main_table`.* FROM `mmodel` AS `main_table` Debug Backtrace: File Line Function /home/nano/domains/mydomain/public_html/gw/app/code/local/GW/MModel/Model/Observer.php 42 printDebugBacktrace /home/nano/domains/mydomain/public_html/gw/app/code/core/Mage/Core/Model/App.php 1338 saveProductTabData /home/nano/domains/mydomain/public_html/gw/app/code/core/Mage/Core/Model/App.php 1317 _callObserverMethod /home/nano/domains/mydomain/public_html/gw/app/Mage.php 468 dispatchEvent /home/nano/domains/mydomain/public_html/gw/app/code/core/Mage/Core/Model/Abstract.php 466 dispatchEvent /home/nano/domains/mydomain/public_html/gw/app/code/core/Mage/Catalog/Model/Product.php 548 _afterSave /home/nano/domains/mydomain/public_html/gw/app/code/core/Mage/Core/Model/Abstract.php 319 _afterSave /home/nano/domains/mydomain/public_html/gw/app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php 714 save /home/nano/domains/mydomain/public_html/gw/app/code/core/Mage/Core/Controller/Varien/Action.php 419 saveAction /home/nano/domains/mydomain/public_html/gw/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php 250 dispatch /home/nano/domains/mydomain/public_html/gw/app/code/core/Mage/Core/Controller/Varien/Front.php 176 match /home/nano/domains/mydomain/public_html/gw/app/code/core/Mage/Core/Model/App.php 354 dispatch /home/nano/domains/mydomain/public_html/gw/app/Mage.php 704 run /home/nano/domains/mydomain/public_html/gw/index.php 87 run 

При работе с коллекциями вы должны передавать аргументы в ->load() если вы хотите, чтобы SQL для этой коллекции был зарегистрирован или выведен. Если вы не хотите, чтобы коллекция возвращала все элементы, вы можете вытащить ->getSelect() объект из коллекции с помощью ->getSelect() и фильтровать со стандартными методами Zend таким образом.

Если вы отследите свою команду коллекции, вы увидите, что вы передаете аргумент, в котором echo выводит сборник SQL.

 $mModel->getCollection()->load($mId)->getData(); 

Посмотрите на lib/Varien/Data/Collection/Db.php в соответствии с сообщением об ошибке и найдите метод load() . Вы увидите, что он принимает два атрибута: $ printQuery и $ logQuery , вы передали аргумент $ printQuery . Несколько строк в методе, который вы видите:

 $this->printLogQuery($printQuery, $logQuery); 

Если вы посмотрите на метод printLogQuery() вы увидите, что все, что передавалось как аргумент $ printQuery, который вычисляет true, вызывает эхо в строке 693 в соответствии с сообщением об ошибке:

 echo is_null($sql) ? $this->getSelect()->__toString() : $sql; 

Это то, что отправляет заголовки в вашем случае. Удалите аргумент из ->load() или передайте false, и он должен исправить вашу проблему.