2013-03-27 104 views
1

已经发送了头解决 我解决了这个问题与乔纳森·赫西帮助 我改变了这一行:Magento 1.7无法发送标题;在

$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(); 

你有什么想法如何解决这一问题?

编辑 内容管理模板标签文件:行$mModel->getCollection()->load($mId)->getData();

<?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>'; 


调试回溯从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 
+3

或许你在'?>'标签之后在源文件的结尾留下了一些空格,或者在发送标题之前使用'echo'命令开始输出。 – 2013-03-27 22:06:00

+0

感谢您的建议。 但我检查了所有模块文件的空白几次,我没有找到任何空格。也许管理员模板负责这个问题。请见,我编辑帖子。 – Krzysztof 2013-03-27 22:14:58

+1

这是一个很奇怪的考虑Magento的MVC架构。你能够得到一个完整的堆栈跟踪? – 2013-03-27 22:25:35

回答

4

当使用集合,你应该只参数传递给->load()如果您希望记录或输出该集合的SQL。如果您不希望集合返回所有项目,则可以使用->getSelect()从集合中选取对象,并使用standard Zend methods这种方式进行筛选。

如果你回溯你的集合命令,你会看到,因为你传递了一个参数,它回显出集合SQL。

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

看一看lib/Varien/Data/Collection/Db.php按照错误信息,并找到load()方法。你会看到它接受两个aguments,$ printQuery$ logQuery,您已将一个参数传递给$ printQuery。几行下来的方法,你看:

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

纵观printLogQuery()方法,你会看到什么作为$ printQuery参数,该参数的计算结果为真通过触发回声线693按照错误信息:

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

这就是你的情况发送标题。从->load()删除参数或通过false它应该解决您的问题。

+0

你的答案解决了我的问题:)谢谢大家的帮助。我不能点击“这个答案很有用”,因为我没有足够的声望点。 – Krzysztof 2013-03-28 10:03:15

+0

不用担心,很高兴你的问题被排序。 – 2013-03-28 10:25:47

相关问题