gpt4 book ai didi

php - 扩展 Layout .xml 文件在不同 的子主题中对父主题不起作用 : Magento 2. 0.4

转载 作者:数据小太阳 更新时间:2023-10-29 03:01:06 24 4
gpt4 key购买 nike

重现步骤

  1. 在 WAMP 服务器 3.0、Windows 10 Pro - 32 位、PHP 5.6.15、MySQL 5.7.9 上安装了 Magento 2.0.4
  2. 在 app\design\frontend\Vendor1\themeparent 中创建了 ma​​gento_blank 的子主题 themeparent 以及几个用于扩展的布局 xml 文件,以及使用模板 .phtml 文件。从管理员激活。工作正常。

theme.xml => <parent>Magento/blank</parent>

  1. 创建了上述主题 themeparent 的另一个子主题 themechild(它本身是 magento blank 的子主题)。这个子主题是在不同的供应商文件夹中创建的,即 Vendor2这个主题路径是 app\design\frontend\Vendor2\themechild 。在内部创建布局 .xml 文件以扩展其父主题布局。从管理员激活这个二级子主题。甚至没有处理 .xml 文件。不工作。

theme.xml => <parent>Vendor1/themeparent</parent>

3b。尽管 childtheme 中存在的模板 .phtml 文件或 .css 文件如果从 Vendor1\themeparent 布局文件中调用相应的布局容器/ block ,则可以正常工作。

  1. 如果为了测试,将相同的子主题 childtheme 放入其父主题的同一供应商内,即 Vendor1 ,主题路径变为 app\design\frontend\ Vendor1\themechild 然后相同的布局 .xml 文件工作正常。

已经尝试清除 magento 的 public/staticvar 文件夹。此外,在使用 cli 命令运行后尝试

php bin/magento setup:static-content:deploy
php bin/magento indexer:reindex
php bin/magento setup:upgrade

但没有解决它。

预期结果

需要的主题继承是这样的:

Magento_blank => Vendor1_th​​emeparent => Vendor2_childtheme 。 (注意供应商不同)

结果:Layout .xml 无法在子主题中加载。

但是如果为了测试,继承是这样的:

Magento_blank => Vendor1_th​​emeparent => Vendor1_childtheme 。 (注意供应商相同)

结果:Layout .xml 正确加载并在子主题中正常工作。

根据关于 http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/themes/theme-inherit.html#set-a-parent-theme 的 Magento 2 指南明确提到“父主题和子主题可以属于不同的供应商。例如,您的自定义主题可以继承自Magento Blank 主题。”。因此,如果我从父主题(在供应商 1 中)创建第二级子主题(在供应商 2 中),该主题是 Magento_blank(供应商:Magento)的子主题,理想情况下这应该可以正常工作。但它没有发生。如果布局 .xml 文件属于不同的供应商,则没有一个布局 .xml 文件被处理为输出。如果我将两个主题放在同一个供应商处,它们工作正常。

实际结果

在不同供应商文件夹中的二级子主题中扩展布局 .xml 文件不起作用。

为什么 Magento 2.0.4 对于具有不同供应商名称的 2 级主题继承无法正常工作?这是一个严重的问题,就好像您假设从某个地方购买了付费主题(他们通过继承 Magento_blank 创建了该主题),现在您想要创建该付费主题的子主题但在不同的供应商名称文件夹中(显然在您的公司名称下) ,你将无法这样做!您只剩下两个选择,要么将您的子主题放在他们的供应商名称中;要么或编辑他们的主题 .xml 文件以调用您的子主题模板文件或 .css/.js(如果在您的供应商名称中);第二种情况显然会松散更新,这种方式很奇怪,不推荐。

那有什么办法呢??

最佳答案

为了给它更多的时间来寻找原因,我用不同的供应商名称创建了不同的父主题和子主题集,并在相同的安装上检查它并且它有效!我很惊讶,这种方式与我之前在主题中所做的相匹配;新旧都完全一样。再次激活我的 child 主题,令人惊讶的是它没有用。更惊讶和受够了。 :(

然后我深入研究了 ma​​gento 数据库,我发现了一件令人惊奇的事情。在 magento 数据库的 'theme' mysql 表 中,与我的 childtheme 对应的 'type' 列的值设置为 '1' 并且所有其他的都设置为“0”。在怀疑之下,我试图通过表列名称中的注释来找到它的含义,它显示..

0 => Physical
1 => Virtual
2 => Staging

我猜想可能是一个原因,手动将'type'列值设置为0对应我的childtheme。清除了 var 和 public/static 文件夹。重新测试,瞧!成功了!!

这个小问题浪费了我4-5天的时间,无解。即使停用-激活或从管理员切换主题也没有将其值重置为 0(它始终保持为 1),因此它从未起作用。

为了进行交叉检查以确认,我从数据库主题表中删除了该行,并重新安装了主题,运行 php bin/magento setup:upgrade,现在将值设置为 0,这完美且自动运行。

不知道它是如何设置为 1 以及何时设置的。应该是0。

总之,问题已经解决了,

I found a very tiny thing but a VERY BIG thing

,如果不知道,可能会浪费每个开发人员的时间。但是,令人惊讶的是,这个愚蠢的观点在互联网上没有提及,甚至在 magento 文档中也没有提及,而 magento 文档必须存在。希望这个解释和解决方案能帮助更多后来对同一问题感到沮丧的人。 :)

此问题也在 https://github.com/magento/magento2/issues/4330 上提出并进行了解释

谢谢。

关于php - 扩展 Layout .xml 文件在不同 <vendor> 的子主题中对父主题不起作用 : Magento 2. 0.4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36900299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com