You will be able to use relative or absolute path, to include js and css files from plugins and to control the location of your assets files.
How to install
Download this plugin into your /plugins dir and activate it in your ProjectConfiguration.class.php (for example).
Create a file /config/assets_manager.yml :
packages: mypage: js: [script1.js, script2.js] css: [style1.css, style2.css]
In your template :
Use the helper and import the "mypage" package :
<? php use_helper('sfAssetsManager') ?> <? php load_assets('mypage') ?>
If you use this plugin, you should use it for your whole project and therefore you will use sfAssetManager helper all the way.
So you can set it up in your configuration (…/config/settings.yml) :
standard_helpers: [Partial, Cache, sfAssetsManager]
And configure your packages (…/config/assets_manager.yml) :
packages: jquery: js: http://code.jquery.com/jquery-1.4.2.min.js jquery-ui: import: jquery js: jquery-ui-1.8.min.js css: themeroller.css dragndrop: import: jquery-ui js: [jquery.draggable.js, jquery.droppable.js] datepicker: import: jquery-ui js: jquery.datepicker.js css: yellowDatepicker.css layout: css: layout.css homepage: import: [dragndrop, datepicker, layout] js: [shopCart.js, dateSelect.js] css: dualview.css subscribe: import: [datepicker, layout] css: niceform.css
In your templates :
<?php use_helper('sfAssetsManager') ?> <?php load_assets('homepage') ?>
<?php use_helper('sfAssetsManager') ?> <?php load_assets('subscribe') ?>
From there, you can easily change your theme, update your jquery version , use another datepicker for all your templates by updating the appropriate package, change framework,… Without modifying each of your templates !
Using the above "Advanced example" for loading stylesheets only :
… <?php load_assets('homepage', 'css') ?> …
Would import theses stylesheets in current page :
themeroller.css, yellowDatepicker.css, layout.css, dualview.css
Mixing assets manager with regular calls
Calling assets manager from an action or a class
By default it should be called in a template and therefore use the helper.
However, in some case you must call a package from an action or a class.
$manager = new sfAssetsManager(); $manager->load('mypackage');
See Source code or tests for futher details or methods.
List of packages :
- Packages are declared in config/assets_manager.yml. This file can be in any level of config dir (module, application, project, plugin) and be overriden by each other.
- Packages are based on their names and therfore must be unique.
- They must all be under the "packages:" root node.
Configuring a package :
import: string or array. Existing packages to include. Note that assets used in imported packages will be included before the current package assets.
css: string or array. stylesheets to include.
Note that js and css options and treated the same way that the Response object usually treats them. That means if you set a relative path, files will be searched from /web/js and /web/css. The assets will be loaded in the same order than the array.
See the tests files for further details.
- Use a minifier to automatically compact files but make it optional.