webapper / twigassets
TwigAssets - Twig模板引擎的即时资产管理器
This package is not auto-updated.
Last update: 2024-09-14 15:06:09 UTC
README
实现Twig的即时资产管理器
这是轻量级框架Prometheus的一部分:[Prometheus](http://webapper.vallalatiszolgaltatasok.hu/#!/prometheus)(仅提供匈牙利语,抱歉)
TwigAssets由Assarte D'Raven提供,并许可在Creative Commons Attribution 4.0 International License下。
如何帮助我
请随意使用我的扩展,希望您可能会喜欢它,并有助于提高您的效率。好吧,如果您认为我的帮助对您的工作有所帮助,您应该通过PayPal向我捐赠一些积分。
...或者给我发一些正面的反馈到我的电子邮件地址(您可以在我的个人资料中看到它)。
无论如何,感谢您!
工作原理
您应该将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); }
这非常简单。无论如何,您应该轻松获取这些库。