Вызов функции возвращает фатальную ошибку:Вызов неопределенной функции getRecentProducts()
-
29-09-2020 - |
Вопрос
Привет, я новичок в Magento.Я пытаюсь вызвать блок пользовательского модуля, используя getChildHtml()
функция, которая, к сожалению, показывает фатальную ошибку:Обращение к неопределенной функции getRecentProducts()
Я использую Magento 1.9.2.4.
Я установил дочернюю тему (childtheme) в теме rwd по умолчанию для magento.
Я скопировал page.xml из темы по умолчанию пакета rwd.
Я также создал новый файл макета (home.phtml) и пытаюсь получить блок в этом файле.
Я создал новый блок в файле page.xml активных тем в разделе <default>
ярлык:
<block type="core/text_list" name="newreference" as="newreference"/>
Затем в активных темах local.xml:
<default>
<reference name="newreference">
<block type="recentproducts/recentproducts" name="recentproducts_recentproducts" template="recentproducts/recentproducts.phtml"></block>
</reference>
</default>
И в моем файле home.phtml вызов: getChildHtml('newreference');
Конфигурационный файл модуля:
<?xml version="1.0"?>
<config>
<modules>
<Test_Recentproducts>
<version>1.0</version>
</Test_Recentproducts>
</modules>
<global>
<blocks>
<recentproducts>
<class>Test_Recentproducts_Block</class>
</recentproducts>
</blocks>
<models>
<recentproducts>
<class>Test_Recentproducts_Model</class>
</recentproducts>
</models>
</global>
</config>
последниепродукты.phtml
<?php
$products = $this->getRecentProducts();
?>
<div id="product_list">
<h1>Recent Products</h1>
<?php if (is_array($products) && count($products)) { ?>
<?php foreach($products as $product) { ?>
<div>
<a href="<?php echo $product['url'] ?>"><?php echo $product['name'] ?></a>
</div>
<?php } ?>
<?php } ?>
</div>
Recentproducts.php (блок)
class Test_Recentproducts_Block_Recentproducts extends Mage_Core_Block_Template {
public function getRecentProducts() {
// call model to fetch data
$arr_products = array();
$products = Mage::getModel("recentproducts/recentproducts")->getRecentProducts();
foreach ($products as $product) {
$arr_products[] = array(
'id' => $product->getId(),
'name' => $product->getName(),
'url' => $product->getProductUrl()
);
}
return $arr_products;
}
}
Недавние продукты.php (модель)
class Test_Recentproducts_Model_Recentproducts extends Mage_Core_Model_Abstract {
public function getRecentProducts() {
$products = Mage::getModel("catalog/product")
->getCollection()
->addAttributeToSelect('*')
->setOrder('entity_id', 'DESC')
->setPageSize(5);
return $products;
}
}
Любая помощь будет высоко оценен.
Обновлять:
Я попытался get_class($this)
и он прекрасно возвращает правильный класс, который Test_Recentproducts_Block_Recentproducts
.
Оно также возвращается getRecentProducts()
как метод класса.
Решение
РЕДАКТИРОВАТЬ:Я проверил ваш код на локальной установке, предполагаю, что вы его откуда-то скопировали.Проблема там в том, что -
на самом деле это не минус, а какой-то другой специальный символ (извините, я не разбирался дальше), и я получал ту же ошибку, что и вы.Я написал $this->
я и это сработало.
Вероятно $this>getRecentProducts();
должно быть $this->getRecentProducts();
Другие советы
Убедитесь, что вы создали файл lateproducts/block/recentproducts.php и этот файл lateproducts.php содержит функцию getRecentProducts().