2016-08-02 6 views
1

Ich versuche, alle Produktlisten in mein Modul in Magento2-Anwendung zu holen, aber nicht in der Lage, herauszufinden, wie.Ermitteln der Produktliste in einem Magento2-Modul

My Block Code:

class Crud extends \Magento\Framework\View\Element\Template 
{ 
    protected $objectManager; 
    public function __construct(Magento\Framework\View\Element\Template\Context $context, 
     \Magento\Framework\View\Result\PageFactory $resultPageFactory, 
     \Magento\Framework\ObjectManagerInterface $objectManager, 
     \Magento\Framework\App\State $appState 
    ) 
    { 
     $this->objectManager = $objectManager; 
     // $appState->setAreaCode('frontend'); 
     parent::__construct($context); 
    } 

    function _prepareLayout(){} 

    function getCrudName(){ 
     return "Products for holmes chat client"; 
    } 

    function getProductList(){ 
    // $objectMan= new \Magento\Framework\App\ObjectManager; 
     $objectMan= $this->$objectManager; 
     $repo = $objectMan->get('Magento\Catalog\Model\ProductRepository'); 
     $search_criteria = $objectMan->create(
      'Magento\Framework\Api\SearchCriteriaInterface' 
     ); 
     $result = $repo->getList($search_criteria); 
     // $list = $repo->getList(); 
     $products = $result->getItems(); 
     return $products; 
     // return 'some'; 
    } 

    function getProducts(){ 
     $objectMan = new Holmes\ChatClient\Api\ProductFetcher; 
    } 
} 

My Template-Code:

<h2>This is a crud html</h2> 
<h3> 

    <?php 
     echo $block->getCrudName(); 
    ?> 
</h3> 
<ul> 
    <?php 
     echo $block->getProductList(); 
    ?> 
</ul> 

Mein Browser einen Fehler wirft als:

3 exception(s): 
Exception #0 (Magento\Framework\Exception\LocalizedException): Invalid block type: Holmes\ChatClient\Block\Crud 
Exception #1 (ReflectionException): Class Holmes\ChatClient\Block\Magento\Framework\View\Element\Template\Context does not exist 
Exception #2 (ReflectionException): Class Holmes\ChatClient\Block\Magento\Framework\View\Element\Template\Context does not exist 

Ich bin neu in magento und der Blockcode funktioniert, wenn ich den Konstruktor entferne und die Methode getProductList() aus dem Code entferne. Und kann ich Code in einen Magento Block schreiben?

Antwort

0

Sie haben vergessen, die Sichtbarkeit der Funktionen zu deklarieren. Dies könnte Ihr Problem lösen. Wenn dies nicht der Fall ist, fügen Sie bitte Ihre XML-Layoutdatei, den Namespace oben in der Datei und Ihren Controller ein.

Wechsel:

function getProducts(){ zu public function getProducts() {

function _prepareLayout(){} zu protected function _prepareLayout(){}

function getCrudName(){ zu public function getCrudName(){

function getProductList(){ zu public function getProductList(){.

+0

Ich habe versucht, die Sichtbarkeiten zu ändern. Aber ich denke, das Problem ist nicht da. Der Block funktioniert für andere Methoden wie 'getCrudName()'. Die Ansicht wird ordnungsgemäß gerendert, wenn 'getProductList()' nicht aufgerufen wird. Ich denke, es gibt ein Problem mit der Logik oder Implementierung, um Produktliste zu holen – Roy

+0

Ich fand einen weiteren Fehler: '$ objectMan = $ objectManager;' sollte '$ objectMan = $ this-> objectManager;' Löst das irgendwas? Beachten Sie auch, dass das zurückgegebene Objekt sehr groß ist, wenn die Funktion funktioniert. –

+0

Nein, ich bekomme immer noch eine Ausnahme als '3 Ausnahme (n): Ausnahme # 0 (Magento \ Framework \ Exception \ LocalizedException): Ungültiger Blocktyp: Holmes \ ChatClient \ Block \ Crud Ausnahme # 1 (ReflectionException): Klasse Holmes \ ChatClient \ Block \ Magento \ Framework \ View \ Element \ Template \ Kontext existiert nicht Ausnahme # 2 (ReflectionException): Klasse Holmes \ ChatClient \ Block \ Magento \ Framework \ View \ Element \ Template \ Kontext existiert nicht ' – Roy

Verwandte Themen