Magento 2 创建视图:块、布局、模板

layout文件名为控制器路径

layout 

    class为block控制器对象

    name:它是必需的属性,用于将块标识为引用

    template:为模板文件地址


第 1 步:创建控制器

首先,我们将创建一个控制器来调用布局文件 .xml

文件:app/code/Mageplaza/HelloWorld/Controller/Index/Display.php

<?php 
namespace Mageplaza\HelloWorld\Controller\Index;
class Display extends \Magento\Framework\App\Action\Action{
	protected $_pageFactory;
	public function __construct(
		\Magento\Framework\App\Action\Context $context,
		\Magento\Framework\View\Result\PageFactory $pageFactory)
	{
		$this->_pageFactory = $pageFactory;
		return parent::__construct($context);
	}
	public function execute()
	{
		return $this->_pageFactory->create();
	}}

我们必须声明 PageFactory 并在 execute 方法中创建它来呈现视图。

第 2 步:创建布局文件 .xml

布局Magento 2 模块中视图层的主要路径布局文件是一个 XML 文件,它将定义页面结构并将位于{module_root}/view/{area}/layout/文件夹中。Area 路径可以是frontendadminhtml,它们定义了布局的应用位置。

有一个特殊的布局文件名default.xml,将应用于其区域内的所有页面。另外,布局文件的名称格式为:{router_id}_{controller_name}_{action_name}.xml.

您可以在这个 Magento主题中详细了解布局,以及布局结构的说明。

在渲染页面时,Magento 会检查布局文件以找到页面的句柄,然后加载 Block 和 Template。我们将为这个模块创建一个布局句柄文件:

文件:app/code/Mageplaza/HelloWorld/view/frontend/layout/helloworld_index_display.xml

<?xml version="1.0"?><page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <referenceContainer name="content">
        <block class="Mageplaza\HelloWorld\Block\Display" name="helloworld_display" template="Mageplaza_HelloWorld::sayhello.phtml" />
    </referenceContainer></page>

在这个文件中,我们定义了这个页面的块和模板

块类:Mageplaza\HelloWorld\Block\Display

模板文件:Mageplaza_HelloWorld::sayhello.phtml

name:它是必需的属性,用于将块标识为引用

第 3 步:创建块

Block 文件应该包含所有需要的视图逻辑,它不应该包含任何类型的 html 或 css。块文件应该具有所有应用程序视图逻辑。

创建一个文件:

app/code/Mageplaza/HelloWorld/Block/Display.php

内容将是:

<?phpnamespace Mageplaza\HelloWorld\Block;class Display extends \Magento\Framework\View\Element\Template{
	public function __construct(\Magento\Framework\View\Element\Template\Context $context)
	{
		parent::__construct($context);
	}
	public function sayHello()
	{
		return __('Hello World');
	}}

Magento 2 中的每个块都必须从Magento\Framework\View\Element\Template在这个块中,我们将定义一个方法 sayHello() 来显示单词“Hello World”。我们将在模板文件中使用它。

步骤 4. 创建模板文件

创建模板文件调用sayhello.phtml

app/code/Mageplaza/HelloWorld/view/frontend/templates/sayhello.phtml

插入以下代码:

<?php/**
 * @var \Mageplaza\HelloWorld\Block\Display $block
 */echo $block->sayHello();

在布局文件中,我们通过Mageplaza_HelloWorld::sayhello.phtml这意味着 Magento 将在模块 Mageplaza_HelloWorld 的模板文件夹中找到文件名sayhello.phtml模块的模板文件夹是app/code/{vendor_name}/{module_name}/view/frontend/templates/.

在模板文件中,我们可以将变量 $block 用于块对象。sayHello()如您所见,我们在 Block 中调用该方法。已完成,请再次访问此页面(http:///helloworld/index/display) 并查看结果。

nba2k2球员数据

在之前的Models (CRUD)中,我们在控制器中调用了 postFactory 模型。现在,我们尝试显示表使用块和模板的所有数据。

我们编辑了文件app/code/Mageplaza/HelloWorld/Block/Display.php

内容将是:

<?phpnamespace Mageplaza\HelloWorld\Block;class Display extends \Magento\Framework\View\Element\Template{
	protected $_postFactory;
	public function __construct(
		\Magento\Framework\View\Element\Template\Context $context,
		\Mageplaza\HelloWorld\Model\PostFactory $postFactory
	)
	{
		$this->_postFactory = $postFactory;
		parent::__construct($context);
	}
	public function sayHello()
	{
		return __('Hello World');
	}
	public function getPostCollection(){
		$post = $this->_postFactory->create();
		return $post->getCollection();
	}}

在块文件中,我们创建了一个getPostCollection获取mageplaza_helloworld_post表上所有数据的方法,我们将在模板中调用它。

我们编辑了文件app/code/Mageplaza/HelloWorld/view/frontend/templates/sayhello.phtml

内容将是:

<?php/**
 * @var \Mageplaza\HelloWorld\Block\Display $block
 */echo $block->sayHello();?><style>table {  font-family: arial, sans-serif;  border-collapse: collapse;  width: 100%;  margin-top: 30px;}td, th {  border: 1px solid #dddddd;  text-align: left;  padding: 8px;  }tr:nth-child(even) { background-color: #dddddd; }.post-id{width:2%} .post-name{width:30%}</style><table>
  <tr>
    <th class="post-id">Id</th>
    <th class="post-name">Name</th>
    <th>Content</th>
  </tr>
    <?php
        foreach ($block->getPostCollection() as $key=>$post){
            echo '<tr>
                    <td>'.$post->getPostId().'</td>
                    <td>'.$post->getName().'</td>
                    <td>'.$post->getPostContent().'</td>
                  </tr>';
        }
    ?></table></body></html>

完成后,请运行php bin/magento cache:clean并检查结果。它会像这样显示

nba2k2球员数据


nba2k2球员数据
请先登录后发表评论
  • 最新评论
  • 总共0条评论