Skip to content

Commit 5bb5e0b

Browse files
committed
Render block
1 parent f62f007 commit 5bb5e0b

File tree

5 files changed

+111
-27
lines changed

5 files changed

+111
-27
lines changed

AssetsBundle/DependencyInjection/DocplannerAssetsExtension.php

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,26 @@
99

1010
/**
1111
* This is the class that loads and manages your bundle configuration
12-
*
1312
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html}
1413
*/
1514
class DocplannerAssetsExtension extends Extension
1615
{
17-
/**
18-
* {@inheritdoc}
19-
*/
20-
public function load(array $configs, ContainerBuilder $container)
21-
{
22-
$configuration = new Configuration();
23-
$config = $this->processConfiguration($configuration, $configs);
16+
/**
17+
* {@inheritdoc}
18+
*/
19+
public function load(array $configs, ContainerBuilder $container)
20+
{
21+
$configuration = new Configuration();
22+
$config = $this->processConfiguration($configuration, $configs);
2423

2524
$container->setParameter('docplanner_assets.configuration', $config);
2625

2726
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
2827
$loader->load('services.yml');
2928
}
29+
30+
public function getAlias()
31+
{
32+
return 'docplanner_assets';
33+
}
3034
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
parameters:
2+
docplanner_assets_bundle.twig.assets.class: Docplanner\AssetsBundle\Twig\AssetsExtension
3+
docplanner_assets_bundle.service.assets_loader.class: Docplanner\AssetsBundle\Service\AssetsLoader
4+
5+
services:
6+
docplanner_assets_bundle.twig.assets:
7+
class: %docplanner_assets_bundle.twig.assets.class%
8+
arguments: [ @docplanner_assets_bundle.service.assets_loader ]
9+
tags:
10+
- { name: twig.extension }
11+
12+
docplanner_assets_bundle.service.assets_loader:
13+
class: %docplanner_assets_bundle.service.assets_loader.class%

AssetsBundle/Service/AssetsLoader.php

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,64 @@
44

55
class AssetsLoader
66
{
7-
public function renderScript($type = null)
7+
/**
8+
* @param null $type
9+
*
10+
* @return string
11+
*/
12+
public function renderScript($type = 'file')
813
{
9-
$file = 'file.js';
10-
$hash = 'xxx';
14+
$files = 'file.js';
1115

12-
if (null === $type)
16+
$mask = $type == 'file' ? '<script>%s</script>' : '<script src="%s?%s"></script>';
17+
18+
return $this->render($mask, $files, $type);
19+
}
20+
21+
/**
22+
* @param null $type
23+
*
24+
* @return string
25+
*/
26+
public function renderStyle($type = 'file')
27+
{
28+
$files = 'file.js';
29+
30+
$mask = $type == 'file' ? '<style>%s</style>' : '<link rel="stylesheet" type="text/css" href="%s?%s">';
31+
32+
return $this->render($mask, $files, $type);
33+
}
34+
35+
/**
36+
* @param $mask
37+
* @param $files
38+
* @param $type
39+
*
40+
* @return string
41+
*/
42+
private function render($mask, $files, $type)
43+
{
44+
$ret = '';
45+
46+
if ($type == 'file')
1347
{
14-
return sprintf('<script src="%s?%s"></script>', $file, $hash);
48+
foreach ($files as $file)
49+
{
50+
$ret .= sprintf($mask, $file, crc32(file_get_contents($file)));
51+
}
1552
}
1653
else
1754
{
18-
if ('inline' == $type)
55+
foreach ($files as $file)
1956
{
20-
return sprintf('<script>%s</script>', $file);
57+
$source = file_get_contents($file);
58+
$ret .= $source;
2159
}
60+
61+
$ret = sprintf($mask, $ret);
2262
}
63+
64+
return $ret;
2365
}
2466
}
2567

AssetsBundle/Twig/AssetsExtension.php

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,58 @@
22

33
namespace Docplanner\AssetsBundle\Twig;
44

5-
class AsseticExtension extends Twig_Extension
5+
use Docplanner\AssetsBundle\Service\AssetsLoader;
6+
7+
class AssetsExtension extends \Twig_Extension
68
{
9+
/** @var AssetsLoader $assetsLoader */
10+
private $assetsLoader;
11+
12+
/**
13+
* @param AssetsLoader $assetsLoader
14+
*/
15+
public function __construct(AssetsLoader $assetsLoader)
16+
{
17+
$this->assetsLoader = $assetsLoader;
18+
}
19+
720
/**
8-
* @return array
21+
* {@inheritdoc}
922
*/
1023
public function getFunctions()
1124
{
1225
return [
13-
new Twig_SimpleFunction('assets_script', [$this, 'assetsScript']),
14-
new Twig_SimpleFunction('assets_style', [$this, 'assetsStyle']),
26+
new \Twig_SimpleFunction('assets_script', [$this, 'assetsScript']),
27+
new \Twig_SimpleFunction('assets_style', [$this, 'assetsStyle']),
1528
];
1629
}
1730

18-
protected function assetsScript($type = '')
31+
/**
32+
* @param null $type
33+
*
34+
* @return string
35+
*/
36+
protected function assetsScript($type = null)
1937
{
20-
return 'script';
38+
return '';
39+
// return $this->assetsLoader->renderScript($type);
2140
}
2241

23-
protected function assetsStyle($type = '')
42+
/**
43+
* @param null $type
44+
*
45+
* @return string
46+
*/
47+
protected function assetsStyle($type = null)
2448
{
25-
return 'style';
49+
return $this->assetsLoader->renderScript($type);
2650
}
2751

2852
/**
29-
* @return string
53+
* {@inheritdoc}
3054
*/
3155
public function getName()
3256
{
33-
return 'docplanner_assets_extension';
57+
return 'docplanner_assets';
3458
}
35-
}
59+
}

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
],
1111
"require": {
1212
"php": ">=5.3.3",
13-
"symfony/framework-bundle": "2.*"
13+
"symfony/framework-bundle": "2.*",
14+
"twig/twig": "~1.20|~2.0"
1415
},
1516
"autoload": {
1617
"psr-4": {

0 commit comments

Comments
 (0)