GithubHelp home page GithubHelp logo

fkrauthan / fkrcssurlrewritebundle Goto Github PK

View Code? Open in Web Editor NEW
33.0 3.0 15.0 34 KB

A small assetic filter for symfony to fix all url paths at css documents to correct urls

PHP 100.00%
symfony php bundle symfony-bundle assetic-bundle

fkrcssurlrewritebundle's Introduction

FkrCssURLRewriteBundle

A small assetic filter for Symfony2 to fix all url paths in css documents to correct urls. It also provides easy resource linking across platforms.

Installation

Bring in the vendor libraries

This can be done in three different ways:

Method #1) Use composer

"require": {
    "fkr/cssurlrewrite-bundle": "*"
}

Method #2) Use git submodules

git submodule add git://github.com/fkrauthan/FkrCssURLRewriteBundle.git vendor/bundles/Fkr/CssURLRewriteBundle

Method #3) Use deps file

[FkrCssURLRewriteBundle]
    git=git://github.com/fkrauthan/FkrCssURLRewriteBundle.git
	target=bundles/Fkr/CssURLRewriteBundle

Register the Fkr namespaces

If not using composer, register the Fkr namespace with Symfony's autoloader:

// app/autoload.php
$loader->registerNamespaces(array(
    'Fkr' => __DIR__.'/../vendor/bundles',
    // your other namespaces
));

Add CssURLRewriteBundle to your application kernel

// app/AppKernel.php
public function registerBundles()
{
    return array(
        // ...
        new Fkr\CssURLRewriteBundle\FkrCssURLRewriteBundle(),
        // ...
    );
}

Configuration

# app/config.yml
fkr_css_url_rewrite:
    rewrite_only_if_file_exists: true
    clear_urls: true
  • rewrite_only_if_file_exists: If true (default) only rewrites url if the resource exists in the .../BundleFolder/Resources/public/ folder.
  • clear_urls: If true (default) the generated url gets normalized. For example if the url normaly is .../less/../img this option makes .../img.

Usage

Standard usage

If you place your css file for example in

.../BundleFolder/Resources/public/css 

and you have your images in

../BundleFolder/Resources/public/img

then you have in yours css file somthing like this

background-image: url(../img/MyImageName.png)

Now you have to call

app/console assets:install

Now if you have somthing like this in your template

{% stylesheets filter='css_url_rewrite,?yui_css' 
	'@BundleName/Resources/public/css/mycssfile.css'
%}
	<link rel="stylesheet" href="{{ asset_url }}" type="text/css" />
{% endstylesheets %}

Now the filter rewrites your url in your css file

background-image: url(../img/MyImageName.png) => background-image: url(../bundles/bundlename/css/../img/MyImageName.png)

And everything works fine.

Extended usage

You can link images from other bundles by using the @ annotation. For example if you write this in you css file

background-image: url(@BundleNameBundle/img/MyImageName.png)

Now the filter rewrite this url in your css file

background-image: url(@BundleNameBundle/img/MyImageName.png) => background-image: url(../bundles/bundlename/img/MyImageName.png)

License

Resources/meta/LICENSE

fkrcssurlrewritebundle's People

Contributors

c33s avatar fkrauthan avatar jmather avatar johnkary avatar marekkalnik avatar rejinka avatar valqk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

fkrcssurlrewritebundle's Issues

filterDump fails on base64 encoded image on certain platform

Hi,

The content of an css url directive could be a base64 encoded image. The length of the string can be long. ( >4096).

On some plateforms the filename length is limited to less than 4096. Is this case the fonction filterDump fails because of using file_exists on string longer than 4096.

to prevent this, you need to check if the url directive beings with "data:"

@BundleName doesn't consider 'short' name.

When bundle is simply named: SiteBundle and not AcmeSiteBundle filter won't consider that sf2 names the directory:
bundles/site/.... and not bundles/sitebundle/ and rewrites to full path names like: bundles/sitebundle/...

Also compatible with 2.0.16

Hi, i tested your filter with Symfony 2.0.16 and it also worked perfectly. Could you correct the minimum version of symfony-framework or accept a pull request?

And perhaps you should not require symfony-framework but instead symfony/assetic-bundle.

Fatal error: Using $this when not in object context

Hi,
I get: Fatal error: Using $this when not in object context in /home/valqk/projects/mysite.com/vendor/bundles/Fkr/CssURLRewriteBundle/Assetic/Filter/CssURLRewriteFilter.php on line 38

I've the following in my base.html.twig:
{% stylesheets filter='css_url_rewrite,?yui_css'
'@FOSCommentBundle/Resources/assets/css/comments.css'
'@SiteBundle/Resources/public/css/'
'@UserBundle/Resources/public/css/
'
output='css/dist/dist.css'
%}

{% endstylesheets %}

It seems like stupid typo... anyway fix is:
$tmpPath = $that->checkForBundleLinking($matches[3]);
and change the scope to public:
public function checkForBundleLinking($path) {

I confirm the fix of the previous two Issues I've reported. Filter now works like a charm :)
thanks!

Testing

This bundle needs unit tests and maybe travis to run this test regular.

Bug in Assetic\Filter\CssURLRewriteFilter.php

I get error on app/console assetic:dump

[Symfony\Component\Debug\Exception\FatalErrorException]
Error: Call to a member function getBaseUrl() on null

I fixed it by changing line 124 to
if ($request && substr($request->getBaseUrl(), -4) != '.php') {

Undefined property:$container

Hi there, the tag 1.0.1 only works good with symfony 3. But in symfony 2.8 or less this bundle get out this error. Please put this in the bundle documentation. Thanks.

php.DEBUG: Undefined property: Fkr\CssURLRewriteBundle\Assetic\Filter\CssURLRewriteFilter::$container {"type":8,"file":"/path/project//vendor/fkr/cssurlrewrite-bundle/Fkr/CssURLRewriteBundle/Assetic/Filter/CssURLRewriteFilter.php","line":118,"level":28928}

[Symfony\Component\Debug\Exception\FatalErrorException]
Error: Call to a member function has() on a non-object

Exception trace:
() at /home/kijholf/Programas/masterUnlock/dev/vendor/fkr/cssurlrewrite-bundle/Fkr/CssURLRewriteBundle/Assetic/Filter/CssURLRewriteFilter.php:118
Fkr\CssURLRewriteBundle\Assetic\Filter\CssURLRewriteFilter->calculateSwitchPath()

Support @BundleName in css url()

Support

url(@BundleName:/image/test.png)

for example to reference resources from other Bundles without building the complete relative path.

@Bundle syntax not correctly handled in child budle not overiding image

If I have the ChildBundle which extends ParentBundle by bundle inheritance. And if I want to link image from ParentBundle in ChildBundle css file by css url with @ParentBundle/images/image.jpg it is rewriten to bundles/child/images/image.jpg even if it doesn't exist in child bundle. So it doesn't provide ParentBundle file if ChildBundle doesn't overide it.

just not working

I tried both bundle syntax and relative syntax, neither is working.

original css

background: url('@AcmeMyBundle/images/body.png') 
background: url('../images/body.png') 

generated css

background: url('../../bundles/acmemy/css/@AcmeMyBundle/images/body.png') 
background: url('../../bundles/acmemy/images/body.png') 

Rewrite does not work in child bundle

So I have let's say Base\AppBundle and App\Bundle which extends Base\AppBundle (via bundle inhertiance). css_url_rewrite correctly rewrite url() in files located in Base\AppBundle but it does nothing for files located in AppBundle. For a workaround I created App\ResourceBundle which contains .css files filled only with url() but of course it is not a solution. :)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.