Problème avec les URI de données et la fusion de fichiers CSS


9

La fusion de fichiers CSS Magento prétend que le nom d'hôte de mes données-uris parce que le RegEx dans Mage_Core_Model_Design_Package( beforeMergeCss) ne fonctionne pas comme prévu. Il doit ajouter le nom d'hôte aux chemins d'image relatifs, mais pas aux URI de données.

$cssUrl = '/url\\(\\s*(?!data:)([^\\)\\s]+)\\s*\\)?/';
$contents = preg_replace_callback($cssUrl, array($this, '_cssMergerUrlCallback'), $contents);

Code CSS:

background: #fafafa url("data:image/svg+xml;base64, PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iM3B4IiB2aWV3Qm94PSIwIDAgNiAzIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA2IDMiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwb2x5Z29uIHBvaW50cz0iNS45OTIsMCAyLjk5MiwzIC0wLjAwOCwwICIvPjwvc3ZnPg==") no-repeat;

Résultat après fusion:

background: #fafafa url("http://shop12.dev/skin/frontend/shop/default/styles/data:image/svg+xml;base64")PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iM3B4IiB2aWV3Qm94PSIwIDAgNiAzIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA2IDMiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwb2x5Z29uIHBvaW50cz0iNS45OTIsMCAyLjk5MiwzIC0wLjAwOCwwICIvPjwvc3ZnPg==") no-repeat;

Comment éviter cela? Je n'ai pas pu trouver comment corriger le synthax du RegEx utilisé. (L'utilisation d'un GIF n'est pas une vraie solution pour moi)

Réponses:


13

Dans iphone.css, magento utilise également l'URI de données mais sans guillemets, essayez de faire de même

background: #fafafa url(data:image/svg+xml;base64, PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iM3B4IiB2aWV3Qm94PSIwIDAgNiAzIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA2IDMiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwb2x5Z29uIHBvaW50cz0iNS45OTIsMCAyLjk5MiwzIC0wLjAwOCwwICIvPjwvc3ZnPg==) no-repeat;

Dans votre cas au lieu de

/url\\(\\s*(?!data:)([^\\)\\s]+)\\s*\\)?/

Tu devrais utiliser

/url\\(\\s*(?![\"\']?data:)([^)]+)\\)/

Désolé, je le savais. Le problème est que le code CSS fait partie du framework de fondation, qui est lié à mon projet via bower. Je pourrais sûrement éditer le code, mais tous mes collègues travaillant sur le projet auraient fait de même. À chaque mise à jour. Quel serait le RegEx correct pour tous les types (avec guillemets simples, guillemets doubles et sans guillemets)?
michael

Réponse mise à jour.
oleksii.svarychevskyi

Si ma réponse vous a aidé, veuillez la marquer comme acceptée.
oleksii.svarychevskyi

Cette réponse a empêché la compilation d'autres ressources CSS. L'autre réponse de @jblandry était ce que nous avons fini par utiliser pour tout corriger.
FactoryAidan

4

En fait, cette expression rationnelle couvre plus de cas

/url\\(\\s*(?![\"\']?data:)(?!\%)([^\\)\\s]+)\\s*\\)?/

Surtout ces données svg optimisées avec des dégradés: http://codepen.io/tigt/post/optimizing-svgs-in-data-uris


Cette réponse a corrigé TOUS les problèmes sans rien casser. La réponse «autre» (actuellement acceptée) a corrigé une chose mais en a cassé beaucoup d'autres. Cela devrait être changé pour la réponse acceptée.
FactoryAidan

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.