Magento 2 - 如何让 2 个单独的 phtml 来处理产品列表和产品网格?

Posted

技术标签:

【中文标题】Magento 2 - 如何让 2 个单独的 phtml 来处理产品列表和产品网格?【英文标题】:Magento 2 - How to have 2 separates phtml to handle products list and products grid? 【发布时间】:2020-07-14 07:40:34 【问题描述】:

我正在基于 Magento 2 构建一个新网站。我还在学习这个 CMS,我想知道一件事。根据网页设计师的工作,我在产品列表的网格布局和列表一之间有太多差异。

现在,为了设置产品网格的样式,我复制并编辑了这个文件: app/design/frontend/MYTHEME/default/Magento_Catalog/templates/product/list.phtml

当然,它同时处理网格和列表布局:

<div class="products wrapper <?= /* @noEscape */ $viewMode ?> products-<?= /* @noEscape */ $viewMode ?>">

我需要为列表布局移动太多东西,所以我尝试使用 2 个单独的 phtml,一个用于列表布局,一个用于网格布局。是否有可能,例如在app/design/frontend/MYTHEME/default/Magento_Catalog/layout/catalog_category_view.xml 中定义东西我猜?

感谢您的帮助。

【问题讨论】:

【参考方案1】:

在您的 phtml 文件中:

app/design/frontend/MYTHEME/default/Magento_Catalog/templates/product/list.phtml

你为什么不做这样的事情:

<?php if ($viewMode == 'grid') :?>
    // Grid layout
<?php else :?>
    // List layout
<?php endif; ?>

【讨论】:

哼,确实很有趣!即使它会使这个文件的行数几乎翻倍,我也会尝试。我可以试试,是的,谢谢!【参考方案2】:

如果你想分开,你会找到调用这个模板的块类(list.phtml)。

在那里,您将看到 setTemplate 函数(某些块将没有,因为它已经在父类中)。

您也会在此处获得 viewMode,因此您必须设置如下条件:

if ($viewMode == 'grid') : 
   $this->setTemplate = '...../grid.phtml';
else : 
   $this->setTemplate = '...../list.phtml';

setTemplate 函数内。

我想你已经知道在哪里以及如何创建 grid phtml 文件了。

【讨论】:

以上是关于Magento 2 - 如何让 2 个单独的 phtml 来处理产品列表和产品网格?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Pygame 2.5 让 2 个单独的图像相互追逐并相互跟随?

如何让函数返回 2 个单独的值? [复制]

如何让 FORM 与 2 个单独的数据库一起工作,而表中没有定义外键?

如何在 magento 2 中打开错误消息

Magento 2在愿望清单中仅显示5个产品

Magento 1.9 Multi Store不同的超级属性值