webapper/twigassets

TwigAssets - Twig模板引擎的即时资产管理器

dev-master 2015-12-10 12:15 UTC

This package is not auto-updated.

Last update: 2024-09-14 15:06:09 UTC


README

实现Twig的即时资产管理器

这是轻量级框架Prometheus的一部分:[Prometheus](http://webapper.vallalatiszolgaltatasok.hu/#!/prometheus)(仅提供匈牙利语,抱歉)

Creative Commons License
TwigAssetsAssarte D'Raven提供,并许可在Creative Commons Attribution 4.0 International License下。

如何帮助我

请随意使用我的扩展,希望您可能会喜欢它,并有助于提高您的效率。好吧,如果您认为我的帮助对您的工作有所帮助,您应该通过PayPal向我捐赠一些积分。

PayPal - The safer, easier way to pay online!

...或者给我发一些正面的反馈到我的电子邮件地址(您可以在我的个人资料中看到它)。

无论如何,感谢您!

工作原理

您应该将Twig的base_template_class选项值更改为:'Assarte_TwigAssets_Template'。这强烈推荐。

$loader = new Twig_Loader_Filesystem('path/to/templates');
$env = new Twig_Environment($loader, array(
	'cache'					=> 'path/to/compiled/sources',
	'base_template_class'	=> 'Assarte_TwigAssets_Template'
));

您必须将Assarte_TwigAssets_Extension_Assets扩展添加到Twig。

$env->addExtension(
	new Assarte_TwigAssets_Extension_Assets(array(
		'namespace'			=> Assarte_TwigAssets_Storage_Filesystem::STORE_NAMESPACE,
		'storage'			=> new Assarte_TwigAssets_Storage_Filesystem(
			$loader,
			'path/to/public/assets/'
		),
		'name_generator_cb'	=> 'md5' // You may use any type of callbacks
	))
);

这就在您的PHP代码中全部完成了!

如何使用

您为Twig获得了四个新的标签和一个函数

  • {{ asset_empty('collection-name') }}:此函数检查资产集合是否为空或不存在。如果您不想在HTML代码中包含类似噪声的空CSS或JS文件,应在条件位置使用它。

  • {% asset 'path/to/asset.file' bind 'collection-name' %}:这表示模板需要资产。您可以根据需要使用和重复使用许多资产。您可以将任何资产绑定到任何集合中。您可以根据需要命名任何集合。一个特定集合中的所有资产都将唯一,即使您需要多次。

  • {% build 'collection-name' as 'css|js' [no_minify] %}...{% endbuild %}构建集合的新方法!只有当集合中至少有一个资产时,才会显示build块的內容。您可以在其中使用新的use_asset标签来显示构建的资产集合的文件名。如果您想根据集合是否有资产来有条件地包含资产集合,则此方法更有效。您可以在添加任何资产到已构建集合之前放置build块(您不能使用if not asset_empty('collection-name')方法做到这一点)!

  • {% use_asset 'collection-name' %}:在build块内显示资产集合的文件名。例如

     {% build 'default-css' as 'css' %}
     	<link type="text/css" rel="stylesheet" media="all" href="path/to/public/assets/{% use_asset 'default-css' %}">
     {% endbuild %}
    
  • {% asset_build 'collection-name' as 'css|js' [no_minify] %}这是构建和放置集合的旧方法。如果您确定集合总是包含一个或多个资产,则应使用此方法。此标签指示资产集合需要使用的地方。您必须指定特定集合的类型(默认支持'js''css')。您可以使用可选的no_minify开关来控制资产的压缩。例如

     <link type="text/css" rel="stylesheet" media="all" href="path/to/public/assets/{% asset_build 'default-css' as 'css' %}">
    

如何压缩

您应该使用扩展的minify选项来指示您是否想要压缩您的资源集合(true)或者不压缩(false)。如果您表示想要使用压缩,您必须通过minifier_callback选项设置一个压缩器回调函数。压缩器回调函数必须有两个参数:string $content, string $type。这个回调函数必须返回传递的$content内容的压缩版本。使用示例:

$env->addExtension(
	new Assarte_TwigAssets_Extension_Assets(array(
		...,
		'minifing'			=> true,
		'minifier_callback'	=> function($content, $type) {
			switch ($type) {
				default: {
					throw new RuntimeException('Invalid asset minifier type: '.$type);
					break;
				}
				case 'js': {
					$result = JSMinPlus::minify($content);
					return $result;
				}
				case 'css': {
					$minifier = new CSSmin();
					$result = $minifier->run($content);
					return $result;
				}
			}
		}
	))
);

一个有趣的提示:您可以使用minifier_callback替换您的资源中的URL为框架控制的地址。

$env->addExtension(
	new Assarte_TwigAssets_Extension_Assets(array(
		...,
		'minifing'			=> true,
		'minifier_callback'	=> function($content, $type) {
			$content = preg_replace_callback(
				'#/\*\s+@url\s+([^\*]+)\s+\*/#i', function($matches) use ($app) {
					return my_frameworks_url_generator($matches[1], true);
				}, $content
			);
		}
	))
);

上面的代码可以替换一个CSS规则,如下所示:

#myCoolDiv {
	background: url(/* @url /my/magical/background.jpg */);
}

...变为...

#myCoolDiv {
	background: url(/index.php?trickey_image_watermarker=/my/magical/background.jpg);
}

这非常简单。无论如何,您应该轻松获取这些库。