Rendered view is not displaying in my back office in PS 1.7

风格不统一 提交于 2021-01-29 07:27:21

问题


I am trying to create a view in the back office tab that I created in the installation of my Module. My Module adds the tab like this:

protected function _installTabs()
{
    if(!$tabId = \Tab::getIdFromClassName('IezonPortfolio')) {
        $tab = new \Tab();
        $tab->class_name = 'IezonPortfolio';
        $tab->module = $this->name;
        $tab->id_parent = \Tab::getIdFromClassName('ShopParameters');
        $tab->active = 1;
        
        foreach (Language::getLanguages(false) as $lang):               
           $tab->name[(int) $lang['id_lang']] = 'My Portfolio';
        endforeach;
        
        return $tab->save();
    }
    
   new \Tab((int) $tabId);
   return true;
}

This works fine and I can navigate to my Shop Parameters and click the My Portfolio tab. The issue I'm having is that it is blank. My ModuleAdminController looks like this:

class IezonPortfolioController extends ModuleAdminController {
    private $_module;
    
    public function __construct()
    {
        $this->bootstrap = true;
        parent::__construct();
        $this->_module = \Module::getInstanceByName('iezonportfolio');
    }
    
    public function indexAction()
    {
        return $this->render('@Modules/iezonportfolio/views/templates/admin/display.html.twig', array(
            'contents_iezonportfolio' => $this->_module->selectAll()
        ));
    }
}

My display.html.twig just has test in it to see if it would output anything which it didn't. On looking at the Docs it doesn't mention anything other than using the render function and returning it. Any help would be appreciated. I just get a blank Tab.

EDIT: After looking at some of the pre-installed modules and referencing them to the Docs, I saw that I was missing my route configuration. My Controller is in the documented directory set-up: iezonportfolio/controllers/admin/iezonportfolio.php so I made my route like this:

iezonportfolio:
  path: iezonportfolio
  methods: [GET]
  defaults:
    _controller: 'IezonPortfolio\Controllers\Admin\Controller::indexAction'
    _legacy_controller: 'IezonPortfolioController'
    _legacy_link: 'IezonPortfolioController:index'

This has still not yet fixed the blank display so I tried to dig deeper into some other modules and have now updated my display.html.twig to show this:

{% extends '@PrestaShop/Admin/layout.html.twig' %}

{% block content %}
  Test
{% endblock %}

This did not fix the blank display either. I hope this addition is useful for future viewers.


回答1:


This is not how the modern controllers works, you are extending legacy ModuleAdminController, take a look here:

https://github.com/PrestaShop/example-modules

you have a plenty of module examples, here's a little snippet from one of those modules:

declare(strict_types=1);

namespace PrestaShop\Module\DemoControllerTabs\Controller\Admin;

use PrestaShopBundle\Controller\Admin\FrameworkBundleAdminController;
use Symfony\Component\HttpFoundation\Response;

class MinimalistController extends FrameworkBundleAdminController
{
    /**
     * @return Response
     */
    public function indexAction()
    {
        return $this->render('@Modules/democontrollertabs/views/templates/admin/minimalist.html.twig');
    }
}

I recommend you to think wether you want to use, or not, modern controller. It depends on wether you want to sell your module, use it in client projects etc.



来源:https://stackoverflow.com/questions/63382315/rendered-view-is-not-displaying-in-my-back-office-in-ps-1-7

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!