<?php 
 
use gdgrid\gd\bundle\connectors\AssetConnector; 
use gdgrid\gd\Grid; 
 
/* @var \gdgrid\gd\plugin\GridPlugin $this */ 
 
$this->setConfig('assets', [ 
    'sourceDir' => [], 
    'outputDir' => 'gd-assets', 
    'prepend'   => [], 
    'append'    => [], 
]); 
 
$this->fetchComponent('assets', function(AssetConnector $plugin, Grid $grid) 
{ 
    /* @var \gdgrid\gd\plugin\GridPlugin $this */ 
 
    $plugin->setSourceDir(array_merge([dirname(dirname(__FILE__))], $plugin->getSourceDir())); 
 
    $plugin->find(function($subDir) 
    { 
        return preg_replace('/^([^\/]+)(\/assets)?(.*?)/i', '$1$3', $subDir); 
    }); 
 
    $prepend = $append = []; 
 
    foreach (array_keys($this->getComponents()) as $component) 
    { 
        $dirName = dirname($this->getComponentInitPath($component)); 
 
        $dir = dirname($dirName); 
 
        $activePlugin = str_replace($dir . '/', '', $dirName); 
 
        if ($activePluginDir = is_dir($plugin->getOutputDir() . '/' . $activePlugin) 
 
            ? $plugin->getOutputDir() . '/' . $activePlugin : null) 
 
            $plugin->output($activePluginDir, function($file) use ($plugin, & $prepend, & $append) 
            { 
                $ext = pathinfo($file, PATHINFO_EXTENSION); 
 
                if ($ext === 'css') 
 
                    $prepend[] = $plugin->webPath($file); 
 
                elseif ($ext === 'js') 
 
                    $append[] = $plugin->webPath($file); 
            }); 
    } 
 
    $prepend = array_merge($prepend, (array)$this->getConfig('assets', 'prepend')); 
 
    $append = array_merge($append, (array)$this->getConfig('assets', 'append')); 
 
    $prependHtml = $appendHtml = ''; 
 
    if ($sz = sizeof($prepend)) 
    { 
        for ($i = 0; $i < $sz; ++$i) 
        { 
            $asset = ltrim($prepend[$i], '/'); 
 
            $prependHtml .= '<link rel="stylesheet" href="/' . $asset . '?v=' . $plugin->timestamp($asset) . '">'; 
        } 
    } 
 
    if ($sz = sizeof($append)) 
    { 
        for ($i = 0; $i < $sz; ++$i) 
        { 
            $asset = ltrim($append[$i], '/'); 
 
            $appendHtml .= '<script src="/' . $asset . '?v=' . $plugin->timestamp($asset) . '"></script>'; 
        } 
    } 
 
    $grid->bindLayout('{assets}', [$prependHtml, ''])->bindLayout('{/assets}', [$appendHtml, null, '']); 
}); 
 
 |