2013-03-27 105 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

相關問題