使用“ ifconfig”有条件地添加CSS资产


10

ifconfig与Magento 1类似,Magento 2中有什么方法可以有条件地添加CSS资产?这是Magento的一个示例:

<action ifconfig="config_path/group/field" method="addItem">
    <type>skin_css</type><name>css/styles.css</name>
</action>

我在Magento 2中尝试了类似的方法,但是没有用:

<head>
    <css src="css/styles.css"
        ifconfig="config_path/group/field" />
</head>

它只是ifconfig在前端显示属性:

<link rel="stylesheet" type="text/css" 
    ifconfig="config_path/group/field" 
    href="http://example.com/pub/static/frontend/Magento/luma/en_US/css/styles.css" />

Magento 2中有等效的功能吗?

Answers:


3

似乎目前无法查看head.xsddevelop分支中的定义:

https://github.com/magento/magento2/blob/develop/lib/internal/Magento/Framework/View/Layout/etc/head.xsd#L9

您可以执行类似Require Js模块的操作:https : //github.com/magento/magento2/blob/develop/app/code/Magento/RequireJs/Block/Html/Head/Config.php

在这里,require config和mixins直接插入require.js文件之后。

您可以添加带有条件的css文件。

我在这里也发现了一个类似问题的问题,但没有得到答案:https : //github.com/magento/magento2/issues/2004


1

您可以使用config将一个类添加到主体,而CSS样式仅适用于该类。

<reference name="root">
    <action method="addBodyClass" ifconfig="section/group/isactive_full_homepage">
        <classname>home-full-page</classname>
    </action>
</reference>

无法使它工作?
00-BBB

0

看看另一个线程:

/programming/32582704/magento-2-get-scopeconfig-values

他应用了块节点而不是动作节点,也许可以解决。

PS:确保清空缓存并重新编译。


对于blockType,它实际上是在xsd中定义的:github.com/magento/magento2/blob/develop/lib/internal/Magento/…。@maginfortis您是否尝试将ifconfig添加到css节点?如果抛出验证错误,您可以尝试在我的答案中将ifconfig添加到head.xsd提及端,以验证他们是否忘记将其添加到xsd,或者实际上是否未实现此参数;)
David Verholen

是的,您是对的,我只是在CSS中进行了检查。也许一种选择是通过定义插件来使用“ around”方法包装器。
Phoenix128_RiccardoT

1
这可能适用于此方法:github.com/magento/magento2/blob/develop/lib/internal/Magento/…。但是您应该始终非常小心,不要执行该过程(即使在这种情况下似乎合法),因为侦听此方法并在此插件之后执行的所有其他插件也不会被执行
David Verholen

另一个选择是仅使用after插件将其过滤到html输出中,您认为呢?
Phoenix128_RiccardoT

这一切(也是我的回答)不是真的“正确”
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.