让Magento呈现完整的HTML页面

时间:2017-03-29 18:53:00

标签: php magento view routes magento2

我是Magento的新手

我得到这个模板,我不想分成多个块。我只想在不同的情况下呈现页面(不仅如此,我以后可以尝试理解这些内容)。当我找到一些网址时。

例如,转到/route/controller/action应该会显示我从<HTML>写到</HTML>的html页面(当然包括HEAD和BODY)。

所以我读了几件事。我遵循了一些官方教程,可以创建一个模块和一个Action来呈现JSON。工作良好!转到/ test / page / view显示一个愚蠢的json。现在我想做一些类似于渲染页面的事情(并最终将参数传递给它)

http://devdocs.magento.com/videos/fundamentals/create-a-new-module/

所以这就是我现在所能得到的:

/Vendor/Module/etc/frontend/routes.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="standard">
        <route id="victor" frontName="test">
            <module name="Victor_Template" />
        </route>
    </router>
</config>

/Vendor/Module/Controller/Page/View.php

namespace Victor\Template\Controller\Page;

use \Magento\Backend\App\Action\Context;
use \Magento\Framework\App\Action\Action;
use \Magento\Framework\Controller\Result\JsonFactory;
use \Magento\Framework\View\Result\PageFactory;

class View extends Action
{
    protected $resultPageFactory;

    function __construct(Context $context, PageFactory $resultPageFactory){
        $this->resultPageFactory = $resultPageFactory;
        parent::__construct($context);
    }

    public function execute(){
         return $this->resultPageFactory->create();
    }
}

... / view / frontend / layout / template_page_view.xml (可能错误在这里)

<?xml version="1.0" ?>
<page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="content">
            <block class="Victor\Template\Block\Page\View" name="page.view" template="Victor_Template::page/view.phtml"/>
        </referenceContainer>
    </body>
</page>

... / view / frontend / templates / page / view.phtml

<h1>Hello World!</h1>

清理缓存,刷新缓存,提供权限和升级设置(我必须在代码中发生某些变更时),我得到一个HTTP代码200,它给了我一个空白(完全白色)Magento页面它包含对css,javascript文件的引用以及类似这样的奇怪:

<body data-container="body" data-mage-init='{"loaderAjax": {}, "loader": { "icon": "http://localhost/magento/pub/static/version1490812084/frontend/Magento/luma/en_US/images/loader-2.gif"}}' class="victor-page-view page-layout-admin-1column">

无论如何,我不知道后台发生了什么。有些东西告诉我错误是布局的定义(template_page_view

我尝试在视图中echo方法的return之前使用execute(),但它没有显示,exit也不会停止要呈现的magento黑/白页。

我希望回复只是<h1>Hwllo World!</h1>

我做错了什么,在Magento上做这件事的正确方法是什么?

@edit 好吧似乎有很多缓存问题。现在echoexit有效。但我仍然没有得到Hello world

1 个答案:

答案 0 :(得分:0)

这不容易,但试试这个:

1)在你的布局xml文件(view/frontend/layout/template_page_view.xml)中:

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="empty" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="top.container" remove="true" />
        <referenceContainer name="top.container" remove="true" />
        <referenceContainer name="page.bottom.container" remove="true"/>
        <referenceContainer name="before.body.end" remove="true"/>
        <referenceContainer name="after.body.start" remove="true"/>
        <referenceContainer name="footer" remove="true" />
        <referenceContainer name="footer-container" remove="true" />
        <referenceContainer name="global.notices" remove="true" />

        <referenceContainer name="content">
            <block class="Victor\Template\Block\Page\View" name="page.view" template="Victor_Template::page/view.phtml"/>
        </referenceContainer>
    </body>
</page>

您可能需要添加更多容器才能删除,具体取决于您的主题和任何其他第三方模块

2)在您的控制器中创建Page对象,如下所示:

return $this->resultPageFactory->create(false, ['template' => 'Vendrom_Module::blank.phtml']);

3)最后创建文件../view/frontend/blank.phtml

<!doctype html>
<html>
<body>
<?php /* @escapeNotVerified */ echo $layoutContent ?>
</body>
</html>