2010-12-08 4 views
0

J'ai un problème avec mon Magento. Lorsque je me connecte et afficher ma commande la page, l'erreur suivante apparaît:Magento Erreur Appel à une fonction membre setCollection() sur un non-objet

Fatal error: Call to a member function setCollection() on a non-object in C:\wamp\www\danfemall\app\code\core\Mage\Sales\Block\Order\History.php on line 58

Lorsque je supprime la fonction setCollection à partir du code, il fonctionne bien, mais je me demande ce que la fonction setCollection fait et est-il sage de supprimer cette fonctionner à partir du code.

Aidez-moi s'il vous plaît à m'aider.

+0

Est-ce que le fichier a déjà été modifié d'une autre manière? Quand je vérifie que la ligne source 58 est vide et que la ligne 60 a 'setCollection', cela suggère que quelque chose manque dans votre fichier. – clockworkgeek

Répondre

0

Les numéros de version Magento aident toujours lors du débogage des problèmes Mangeto. Aussi, où s'inscrit Android (votre tag)?

En supposant que la ligne suivante est celle qui vous cause des problèmes sur votre système

$pager = $this->getLayout()->createBlock('page/html_pager', 'sales.order.history.pager') 
    ->setCollection($this->getOrders()); 

Magento tente de créer un objet bloc page/html_pager (qui, en supposant aucun remplacement sont en place, correspond à un Mage_Page_Block_Html_Pager).

Dans un système de travail, cela se fait avec l'appel suivant.

$this->getLayout()->createBlock('page/html_pager', 'sales.order.history.pager') 

qui retourne l'objet bloc, puis la méthode SetCollection du bloc est appelé

->setCollection($this->getOrders()); 

Cependant, dans votre système, la méthode createBlock ne retourne pas un objet, et je suppose ça retourne un booléen. Jetez un oeil au début de la méthode createBlock de la classe Layout.

#File: app/code/core/Mage/Core/Model/Layout.php 
public function createBlock($type, $name='', array $attributes = array()) 
{ 
    try { 
     $block = $this->_getBlockInstance($type, $attributes); 
    } catch (Exception $e) { 
     Mage::logException($e); 
     return false; 
    } 

Ainsi, votre système a été modifié ou est configuré de telle sorte que les tentatives de créer le bloc page/html_pager sont lancer une exception. Vérifiez votre exception Magento journal pour voir quel genre d'erreurs sont en cours d'enregistrement, ou tout simplement laisser tomber temporairement dans un var_dump

try { 
    $block = $this->_getBlockInstance($type, $attributes); 
} catch (Exception $e) { 
    var_dump($e->getMessage()); //don't forget to remove me before pushing 
           //to production 
    Mage::logException($e); 
    return false; 
} 

En ce qui concerne ce que ce code fait et comment cela affectera votre système, la méthode setCollection ajoute une collection object (un tableau comme objet de modèles) à votre objet Block. Sans une collection, votre bloc pager ne s'affichera (probablement) pas correctement.

Questions connexes