How to re-use assets provided by the default view.
This is a community-contributed tutorial. This tutorial is over a year old and may not apply to your version of Concrete CMS.
Mar 7, 2016
Edited
Hold on with this tutorial for a bit. I found some issues on updated concrete5 installs. I'll investigate further asap. When using this Trick, the assets will be searched in updates/concrete5version/packages...
Original:
Problem:
Sometimes you would like to re-use those assets you created for your normal view. And would only make small changes on your template. But the original assets are no longer auto-loaded. Only the assets in your template map are. Of course you could create a copy, or include them, but that has a number of disadvantages (speed, double loading, upgrades)
Situation:
- custom block with auto-loaded assets in myblock/css and myblock/js:
- myblock/css/myblock.css
- myblock/js/myblock.js
- a template in /templates/myblock/myblocktemplate:
- view.php
- view.css
- view.js
Goals:
- re-use and extend on the assets loaded by the normal view template.
- use concrete5's asset system so files don't get loaded twice (no @import or addheader)
Trick:
- use the same asset handle as the autoloader does. You might expect them to be something like: 'blocks/myblock', but they have the full name of the asset -> 'blocks/myblock/myblock.js'
block controller:
public function on_start()
{
$al = \Concrete\Core\Asset\AssetList::getInstance();
$al->register('css', 'blocks/myblock/myblock.css','../packages/myblock/blocks/myblock/css/image_plus.css');
$al->register('javascript', 'blocks/myblock/myblock.js', '../packages/myblock/blocks/myblock/js/myblock.js');
$al->registerGroup('blocks/myblock', array(
array('css', 'blocks/myblock/myblock.css'),
array('javascript', 'blocks/myblock/myblock.js')
));
}
and:
public function registerViewAssets($outputContent = '')
{
$this->requireAsset('blocks/myblock');
}
Now, these original assets are also loaded when you apply a myblocktemplate on your block. In templates/myblock/myblocktemplate you can override or extend them.