Funktionsaufruf gibt schwerwiegenden Fehler zurück:Aufruf der undefinierten Funktion getRecentProducts()
-
29-09-2020 - |
Frage
Hallo, ich bin ein Neuling in Magento.Ich versuche, einen benutzerdefinierten Modulblock mit aufzurufen getChildHtml()
Funktion, die leider einen schwerwiegenden Fehler anzeigt:Aufruf einer undefinierten Funktion getRecentProducts()
Ich verwende Magento 1.9.2.4
Ich habe ein untergeordnetes Thema (Childtheme) unter dem Magento-Standard-RWD-Thema eingerichtet.
Ich habe page.xml aus dem Standardthema des rwd-Pakets kopiert.
Ich habe auch eine neue Layoutdatei (home.phtml) erstellt und versuche, den Block in diese Datei zu bekommen.
Ich habe unter aktive Themes page.xml einen neuen Block erstellt <default>
Etikett:
<block type="core/text_list" name="newreference" as="newreference"/>
Dann in aktiven Themes local.xml:
<default>
<reference name="newreference">
<block type="recentproducts/recentproducts" name="recentproducts_recentproducts" template="recentproducts/recentproducts.phtml"></block>
</reference>
</default>
Und in meiner home.phtml-Datei wird Folgendes aufgerufen: getChildHtml('newreference');
Die Konfigurationsdatei des Moduls:
<?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>
Recentproducts.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 (Block)
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;
}
}
Recentproducts.php (Modell)
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;
}
}
Jede Hilfe wäre sehr dankbar.
Aktualisieren:
Ich versuchte zu get_class($this)
und es gibt perfekt die richtige Klasse zurück, die es ist Test_Recentproducts_Block_Recentproducts
.
Es kehrt auch zurück getRecentProducts()
als Klassenmethode.
Lösung
BEARBEITEN:Ich habe Ihren Code auf einer lokalen Installation getestet. Ich gehe davon aus, dass Sie ihn von irgendwoher kopiert haben.Das Problem besteht darin -
ist nicht wirklich ein Minus, sondern ein anderes Sonderzeichen (ich habe es leider nicht weiter untersucht), und ich habe die gleiche Fehlermeldung erhalten wie Sie.Ich hab geschrieben $this->
Ich selbst und es hat funktioniert.
Wahrscheinlich $this>getRecentProducts();
sollte sein $this->getRecentProducts();
Andere Tipps
Stellen Sie sicher, dass Sie eine Datei in „recentproducts/block/recentproducts.php“ erstellt haben und diese Datei „recentproducts.php“ die Funktion getRecentProducts() enthält.