扩展布局.xml文件在不同<vendor>中的子主题中不起作用于父主题:Magento 2.0.4

时间:2016-04-27 20:31:59

标签: php xml magento magento-2.0 magento2.0.2

重现的步骤

  1. 在WAMP服务器3.0上安装Magento 2.0.4,Windows 10 Pro - 32位,PHP 5.6.15,MySQL 5.7.9
  2. 在app \ design \ frontend \ Vendor1 \ themeparent中创建了 Magento_blank 的子主题 themeparent ,其中包含多个用于扩展的布局xml文件用模板.phtml文件。从管理员激活。工作得很好。
  3. theme.xml =&gt; <parent>Magento/blank</parent>

    1. 创建了上述主题 themeparent 的另一个子主题 themechild (它本身就是magento blank的子项)。此childtheme在不同的供应商文件夹中创建,即 Vendor2 此主题路径为app \ design \ frontend \ Vendor2 \ themechild。在里面创建布局.xml文件以扩展其父主题布局。从admin激活此第二级子主题。甚至没有处理.xml文件。不工作。
    2. theme.xml =&gt; <parent>Vendor1/themeparent</parent>

      3B。虽然 childtheme 中存在的模板.phtml文件或.css文件在 Vendor1 \ themeparent布局文件中调用相应的布局容器/块时工作正常。

      1. 如果对于测试,相同的子主题 childtheme 放在其父级的同一供应商中,即 Vendor1 ,主题路径将变为app \ design \ frontend \ Vendor1 \ themechild,然后相同的布局.xml文件工作正常。
      2. 已经尝试清除magento的 public / static var 文件夹。此外,在使用cli命令运行后尝试

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

        但没有解决它。

        预期结果

        所需的主题继承就是这样:

        Magento_blank =&gt; Vendor1 _themeparent =&gt; Vendor2 _childtheme。 (注意供应商不同)

        结果:布局.xml无法加载到子主题中。

        但是如果进行测试,继承就是这样做的:

        Magento_blank =&gt; Vendor1 _themeparent =&gt; Vendor1 _childtheme。 (注意供应商相同)

        结果:布局.xml正确加载并在childtheme中正常工作。

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

        实际结果

        在不同供应商文件夹中的第二级子主题中扩展布局.xml文件无效。

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

        那么解决方案是什么?

1 个答案:

答案 0 :(得分:4)

给它更多时间找到原因,我用不同的vendornames创建了不同的父和子主题集,并在同一个安装上检查它并且它工作了! 我很惊讶,与我之前在主题中所做的事情相匹配;新旧两者完全相同。再次激活了我的孩子主题,令人惊讶的是它没有用。更加惊讶和美联储。 :(

然后我深入了解 magento数据库,我发现了一件令人惊奇的事情。在magento数据库的“主题 mysql表中,与我的childtheme对应的“类型”列的值设置为“1”并且所有其他人都设置为'0'。在怀疑的情况下,我试图通过表格列名中的评论找到它意味着什么......

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

我猜这可能是一个原因,并手动将“类型”列值设置为与我的孩子主题相对应的 0 。清除var和公共/静态文件夹。重新测试了,瞧!它工作!!

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

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

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

无论如何,问题现在已经解决了,

  

我发现了一件非常小的东西,但是非常重要的事情

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

此问题也在https://github.com/magento/magento2/issues/4330

上提出并解释

感谢。