【问题标题】:Extending Layout .xml files not working in child theme in different <vendor> as to parent theme: Magento 2.0.4扩展布局 .xml 文件在不同 <vendor> 的子主题中不起作用,与父主题有关:Magento 2.0.4
【发布时间】:2016-08-22 08:52:13
【问题描述】:

重现步骤

  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 中创建了 Magento_blank 的子主题 themeparent,其中包含用于扩展的多个布局 xml 文件带有模板 .phtml 文件。从管理员激活。工作正常。

theme.xml => &lt;parent&gt;Magento/blank&lt;/parent&gt;

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

theme.xml => &lt;parent&gt;Vendor1/themeparent&lt;/parent&gt;

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

  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 。 (注意供应商不同)

结果:布局 .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 空白主题。” .因此,如果我从 Magento_blank(供应商:Magento)的子主题(在供应商 1 中)创建第二级子主题(在供应商 2 中),理想情况下应该可以正常工作。但它没有发生。如果布局 .xml 文件属于不同的供应商,则不会处理输出。如果我将这两个主题放在同一个供应商中,它们就可以正常工作。

实际结果

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

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

那有什么办法呢??

【问题讨论】:

    标签: php xml magento magento2


    【解决方案1】:

    给它更多的时间来寻找原因,我用不同的供应商名称创建了不同的父子主题集,并在相同的安装中检查它,它工作! 我很惊讶,与我之前在主题中所做的方式相匹配;新旧都一模一样。再次激活了我的 childtheme,但令人惊讶的是它不起作用。更加惊讶和厌烦。 :(

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

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

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

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

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

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

    不管怎样,问题已经解决了,而且

    我发现了一件非常微小但非常大的事情

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

    https://github.com/magento/magento2/issues/4330也提出并解释了这个问题

    谢谢。

    【讨论】:

    • 我认为这种情况发生在我们部署主题然后临时删除它的情况下,在这种情况下它将类型设置为1。当主题被添加回来时,类型没有更新。
    猜你喜欢
    • 2017-07-07
    • 2023-02-24
    • 1970-01-01
    • 2015-01-21
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多