59 votes

Symfony2 - Assetic - charger les images dans le CSS

J'ai un CoreBundle qui contient les principaux fichiers css et les images. Maintenant, j'ai un problème lorsque je charge une image à partir de css; l'image n'est pas affichée.

 background-image:url(../images/file.png)

(avec un chemin d'accès complet, il fonctionne)

J'ai installé les actifs à l'aide de la commande: assets:install web et je peux voir les images et la css de fichiers sous web/bundles/cmtcore/(css|images).

Voici la structure du fichier, à l'intérieur de l'offre groupée de base:

  • CoreBundle
    • Ressources
      • public
        • css
          • principal.css
        • images
          • fichier.png

Et voici comment je charge le fichier css dans le template:

 {% stylesheets '@CmtCoreBundle/Resources/public/css/*' %}
        <link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}" />
 {% endstylesheets %}

Je vous remercie pour votre aide à l'avance.

54voto

Inoryy Points 4353

utiliser l' cssrewrite filtre Assetic bundle

Dans la configuration.yml:

assetic:
    debug:          %kernel.debug%
    use_controller: false
    filters:
        cssrewrite: ~

Et ensuite appeler vos feuilles de style comme ceci:

 {% stylesheets 'bundles/cmtcore/css/*' filter='cssrewrite' %}
        <link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}" />
 {% endstylesheets %}

Oh, et n'oubliez pas d'utiliser php app/console assetic:dump

17voto

user257980 Points 513

Il y avait quelques problèmes avec ccsrewrite:

le CssRewrite filtre ne fonctionne pas lors de l'utilisation de l' @MyBundle syntaxe dans AsseticBundle de référence de l'actif. C'est une limitation connue.

Ici est la version de php pour cssrewrite:

<?php foreach ($view['assetic']->stylesheets(
            array(
                'bundles/test/css/foundation/foundation.css',
                'bundles/test/css/foundation/app.css',
                'bundles/test/css/themes/adapzonManager.css'), array('cssrewrite')) as $url): ?>
        <link rel="stylesheet" href="<?php echo $view->escape($url) ?>" />
    <?php endforeach; ?>

13voto

Yann Points 129

J'ai résolu le problème en suivant les instructions sur ce site: http://www.craftitonline.com/2011/06/symfony2-beautify-with-assetic-and-a-template-part-ii/

Le problème réel est que vous faites référence à votre bundle de ressources absolue, mais doit faire référence à leur parent.

{% stylesheets filter='cssrewrite' output='css/*.css'
    'bundles/blistercarerisikobewertung/css/*'  %}
    <link href="{{ asset_url }}" type="text/css" rel="stylesheet" />
{% endstylesheets %}

Vider votre cache et installer vos actifs de nouveau

6voto

tystr Points 51

Quant à Yann réponse, en fait, vous n'avez pas à installer de nouveau actif après chaque changement si vous utilisez l' --symlink option.

Notez, cependant, que l'exécution de la vendeurs installer le script remplace les liens symboliques, de sorte que vous aurez besoin de supprimer l' bundles/* des dossiers et installer les actifs à l' --symlink option de nouveau après l'exécution de la vendeurs script.

6voto

fkrauthan Points 171

J'ai développé un petit paquet avec un filtre supplémentaire pour résoudre ce problème. Vous pouvez le trouver sur github: https://github.com/fkrauthan/FkrCssURLRewriteBundle.git

Avec ce bundle la Notation @pour assetic fonctionne si vous avez relativ chemins d'accès dans votre fichier css.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X