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.

Loading Conversation