【发布时间】:2013-03-27 22:04:12
【问题描述】:
已解决 我在 Jonathan Hussey 的帮助下解决了这个问题 我改变了这一行:
$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();
你有什么想法可以解决这个问题吗?
编辑 管理模板标签文件的内容:
<?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 中的 $mModel->getCollection()->load($mId)->getData(); 行之后调试回溯
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
【问题讨论】:
-
可能是你在
?>标签之后的源文件末尾留下了一些空格,或者你在发送标头之前使用echo命令开始输出。 -
感谢您的建议。但是我检查了所有模块文件中的空格几次,但没有找到任何空格。也许管理模板是造成这个问题的原因。请看,我编辑帖子。
-
考虑到 Magento 的 MVC 架构,这是一个奇怪的问题。你能得到完整的堆栈跟踪吗?
-
可能发生的情况是您在发送标头后尝试运行一些代码。这个错误告诉你的是标题已经从被调用的页面返回,实际上修改它们为时已晚。确保您的代码在函数中调用 header() 之前没有回显或打印。 (堆栈跟踪有助于找到这个)..这就是我得到的不幸..祝你好运。
-
@netme - 我认为这是最可能的解决方案,到目前为止我已经多次遇到过。您可以从所有类/函数文件中删除
?>,并确保在打开<?php之前没有空格(例如,没有_<?php)
标签: php magento zend-framework magento-1.7