【问题标题】:Getting product list in a magento2 module在 magento2 模块中获取产品列表
【发布时间】:2016-12-07 16:17:48
【问题描述】:

我正在尝试将所有产品列表获取到我在 magento2 应用程序中的模块中,但无法弄清楚如何。

我的块代码:

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;
    }
}

我的模板代码:

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

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

我的浏览器报错如下:

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

我是 magento 的新手,如果我删除构造函数并从代码中删除方法 getProductList(),则块代码正在工作。我可以在 magento 块中编写代码吗?

【问题讨论】:

    标签: php magento magento2


    【解决方案1】:

    您忘记声明函数的可见性。这可能会解决您的问题。如果没有,请包含您的布局 xml 文件、文件顶部的命名空间和您的控制器。

    变化:

    function getProducts(){public function getProducts() {

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

    function getCrudName(){public function getCrudName(){

    function getProductList(){public function getProductList(){

    【讨论】:

    • 我尝试改变可见性。但我认为问题不存在。该块适用于 getCrudName() 等其他方法。如果未调用 getProductList(),则正确呈现视图。我认为获取产品列表的逻辑或实现存在问题
    • 我发现了另一个错误:$objectMan= $objectManager; 应该是$objectMan = $this-&gt;objectManager; 这能解决什么问题吗?另请注意,如果该函数有效,则返回的对象将是巨大的。
    • 不,我仍然得到一个例外,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
    • (Magento\Framework\View\Element\Template\Context $context, 你应该把它改成(\Magento\Framework\View\Element\Template\Context $context, 然后在你的 Magento 根文件夹中运行php bin/magento setup:di:compile &amp;&amp; chmod -R 777 var。奇怪的是,如果你不打电话给getProductList(),它会起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2012-03-19
    • 2021-08-29
    相关资源
    最近更新 更多