Неустранимая ошибка: вызов функции-члена getName () в magento - PullRequest
0 голосов
/ 21 октября 2011

Я пытаюсь создать пользовательский модуль (Копировать вставить из окончательного руководства), чтобы показать случайные продукты на домашней странице. Я начал с Привет, мир. Это было прекрасно. Но когда я добавил дополнительный код для отображения продуктов на домашней странице, это дает мне следующую ошибку.

Fatal error: Call to a member function getName() on a non-object in /opt/lampp/htdocs/magento/app/code/local/Magentotutorial/Definitivehello/Block/Randomproducts.php on line 12

здесь идет мой код для /app/code/local/Magentotutorial/Definitivehello/Block/Randomproducts.php

<?php
class Magentotutorial_Definitivehello_Block_Randomproducts 
    extends Mage_Core_Block_Template
{
    protected function _toHtml()
    {
        $randProdModel = Mage::getModel('Magentotutorial_Definitivehello/Randomproducts');
        $randProducts = $randProdModel->getRandomProducts();
        $html = "<ul>";
        foreach ($randProducts as $product) {
            $name = $product->getName();
            $price = number_format($product->getPrice(), 2);
            $imageLink = $this->helper('catalog/image')->init($product, 'thumbnail')->resize(100,100);
            $productLink = $this->helper('catalog/product')->getProductUrl($product);
            $html .= "<p><a href='$productLink'><img src='$imageLink' alt='$name'/></a><br/> $name <br/> $price </p>";
        }
        $html .= "<ul>";
        return $html;
    }
}

Может кто-нибудь сказать мне, что не так. Спасибо

Здесь идет мой код для метода GetRandomProducts ()

<?php
class Magentotutorial_Definitivehello_Model_Randomproducts 
    extends Mage_Core_Model_Abstract
{
    public function getRandomProducts($maxCount = 3)
    {
        $randProducts = array();
        $allProducts = array();
        $productCollection = Mage::getModel('catalog/product')
            ->getCollection()
            ->addAttributeToSelect('*')
            ->getItems();

        foreach ($productCollection as $id => $data) {
            //print_r($data); exit;
            $allProducts[] = $data;
        }

        $productIds = array_keys($allProducts);
        $totalProductIds = count($productIds);
        for ($i=0; $i<$maxCount; $i++) {
            $randIndex = rand(0,$totalProductIds);
            $randProductId = $productIds[$randIndex];
            $randProducts[] = $allProducts[$randProductId];
        }
        return $randProducts;
    }
}

1 Ответ

1 голос
/ 21 октября 2011

Похоже, getRandomProducts из Magentotutorial_Definitivehello/Randomproducts модель не возвращает коллекцию продуктов.

UPD:

Вот более простая реализация метода getRandomProduct:

<?php
public function getRandomProducts($maxCount = 3)
{
    $productCollection = Mage::getModel('catalog/product')
        ->getCollection()
        ->addAttributeToSelect('*');

    $productCollection->getSelect()->order('RAND()')->limit($maxCount);

    return $productCollection;
}
...