Phalcon资源文件管理(Assets Management)
资源文件管理(Assets Management)¶
Phalcon\Assets是一个让开发人员管理静态资源的组件,如管理css,javascript等。
Phalcon\Assets\Manager 存在于DI容器中,所以我们能够在服务容器存在的
不论什么地方使用它来加入/管理资源。
加入资源(Adding Resources)¶
Assets支持两个内置的资源管理器:css和javascripts.我们能够依据须要创建其他的资源。资源管理器内部保存了两类资源集合一为 javascript还有一为css.
我们能够很easy的向这两个集合里加入资源。例如以下:
<?php class IndexController extends Phalcon\Mvc\Controller
{
public function index()
{ //加入本地css资源
$this->assets
->addCss('css/style.css')
->addCss('css/index.css'); //加入本地js资源
$this->assets
->addJs('js/jquery.js')
->addJs('js/bootstrap.min.js'); }
}
然后我们能够在视图中输出资源:
<html>
<head>
<title>Some amazing website</title>
<?php $this->assets->outputCss() ?>
</head>
<body> <!-- ... --> <?php $this->assets->outputJs() ? >
</body>
<html>
Volt语法:
<html>
<head>
<title>Some amazing website</title>
{{ assets.outputCss() }}
</head>
<body> <!-- ... --> {{ assets.outputJs() }}
</body>
<html>
本地与远程资源(Local/Remote resources)¶
本地资源是同一应用中的资源,这些资源存在于应用的根文件夹中。 Phalcon\Mvc\Url 用来生成
本地的url. 远程资源即是一种存在于CDN或其他远程server上的资源。比方经常使用的jquery, bootstrap等资源。
<?php public function indexAction()
{ //加入远程及本地资源
$this->assets
->addCss('//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css', true )
->addCss('css/style.css', false );
}
集合(Collections)¶
集合即是把一同类的资源放在一些。资源管理器隐含的创建了两个集合:css和js. 当然我们能够创建其他的集合以归类其他的资源。 这样我们能够非常easy的 在视图里显示:
<? php //html头部的js资源
$this->assets
->collection('header')
->addJs('js/jquery.js')
->addJs('js/bootstrap.min.js'); //html尾部的js资源
$this->assets
->collection('footer')
->addJs('js/jquery.js')
->addJs('js/bootstrap.min.js');
然后在视图中例如以下使用:
<html>
<head>
<title>Some amazing website</title>
<? php $this->assets->outputJs('header') ? >
</head>
<body> <!-- ... --> <?php $this->assets->outputJs('footer') ?>
</body>
<html>
Volt语法:
<html>
<head>
<title>Some amazing website</title>
{{ assets.outputCss('header') }}
</head>
<body> <!-- ... --> {{ assets.outputJs('footer') }}
</body>
<html>
前缀(Prefixes)¶
集合能够加入前缀,这能够实现很easy的更换server:
<?
php
$scripts = $this->assets->collection('footer');
if ($config->environment == 'development') {
$scripts->setPrefix('/');
} else {
$scripts->setPrefix('http:://cdn.example.com/');
}
$scripts->addJs('js/jquery.js')
->addJs('js/bootstrap.min.js');
我们也能够使用链式语法,例如以下:
<? php $scripts = $assets
->collection('header')
->setPrefix('http://cdn.example.com/')
->setLocal(false)
->addJs('js/jquery.js')
->addJs('js/bootstrap.min.js');
压缩与过滤(Minification/Filtering)¶
Phalcon\Assets提供了内置的js及css压缩工具。
开发人员能够设定资源管理器以确定对哪些资源进行压缩啊些资源不进行压缩。
除了上面这些之外 我们还能够使用Douglas Crockford书写的Jsmin压缩工具,及Ryan Day提供的CSSMin来对js及css文件进行压缩. 以下的样例中展示了怎样使用集合对资源文件进行压缩:
<?php
$manager
//这些javascript资源位于html文件的底部
->collection('jsFooter')
//终于输出名
->setTargetPath('final.js')
//使用此uri显示资源
->setTargetUri('production/final.js')
//加入远程资源但不压缩
->addJs('code.jquery.com/jquery-1.10.0.min.js', true, false)
//这些资源必需要压缩
->addJs('common-functions.js')
->addJs('page-functions.js')
//把这些资源放入一个文件内
->join(true)
//使用内置的JsMin过滤器
->addFilter(new Phalcon\Assets\Filters\Jsmin())
//使用自己定义过滤器
->addFilter(new MyApp\Assets\Filters\LicenseStamper());
開始部分我们通过资源管理器取得了一个命名的集合,集合中能够包括javascript或css资源但不能同一时候包括两个。一些资源可能位于远程的server上 这上结资源我们能够通过http取得。为了提高性能建议把远程的资源取到本地来。以降低载入远程资源的开销。
<?php //这些Javscript文件放在页面的底端
$js = $manager->collection('jsFooter');
如上面,addJs方法用来加入资源到集合中,第二个參数指示了资源是否为外部的,第三个參数指示是否须要压缩资源:
<?php //加入远程资源但不压缩
$js->addJs('code.jquery.com/jquery-1.10.0.min.js', true, false); // These are local resources that must be filtered
//加入本地资源并压缩
$js->addJs('common-functions.js');
$js->addJs('page-functions.js');
过滤器被注冊到集合内。我们能够注冊我个过滤器,资源内容被过滤的顺序和过滤器注冊的顺序是一样的。
<?php //使用内置的Jsmin过滤器
$js->addFilter(new Phalcon\Assets\Filters\Jsmin()); //使用自己定义的过滤器
$js->addFilter(new MyApp\Assets\Filters\LicenseStamper());
注意:无论是内置的还是自己定义的过滤器对集合来说他们都是透明的。最后一步用来确定全部写到同一个文件里还是分开保存。
假设要让集合中全部的文件合成 一个文件仅仅须要使用join函数:
<?php //全并文件
$js->join(true); //设置终于输出文件
$js->setTargetPath('public/production/final.js'); //使用此uri引用js
$js->setTargetUri('production/final.js');
假设资源写入同一文件,则我们须要定义使用哪一个文件来保存要写入的资源数据。及使用一个ur来展示资源。这两个设置能够使用setTargetPath() 和setTargetUri()两个函数来配置。
内置过滤器(Built-In Filters)¶
Phalcon内置了两个过滤器以分别实现对js及css的压缩,因为二者是使用c实现的故极大的降低了性能上的开销:
| 过滤器 | 说明 |
|---|---|
| Phalcon\Assets\Filters\Jsmin | 压缩Javascript文件即去除掉javascript解释器/编译器忽略的一些字符 |
| Phalcon\Assets\Filters\Cssmin | 压缩css文件即去除掉浏览器在渲染css时不须要的一些字符 |
自己定义过滤器(Custom Filters)¶
除了使用Phalcon内置的过滤器外,开发人员还能够创建自己的过滤器。
这样我们就能够使用YUI_,
Sass, Closure,等。
<?php use Phalcon\Assets\FilterInterface; /**
* 使用YUI过滤css内容
* @param string $contents
* @return string
*/
class CssYUICompressor implements FilterInterface
{ protected $_options; /**
* CssYUICompressor 构造函数
*
* @param array $options
*/
public function __construct($options)
{
$this->_options = $options;
} /**
* 运行过滤
* @param string $contents
* @return string
*/
public function filter($contents)
{ //保存字符吕内容到暂时文件里
file_put_contents('temp/my-temp-1.css', $contents); system(
$this->_options['java-bin'] .
' -jar ' .
$this->_options['yui'] .
' --type css '.
'temp/my-temp-file-1.css ' .
$this->_options['extra-options'] .
' -o temp/my-temp-file-2.css'
); //返回文件内容
return file_get_contents("temp/my-temp-file-2.css");
}
}
使用方法:
<?php //取css集合
$css = $this->assets->get('head'); //加入/启用YUI压缩器
$css->addFilter(new CssYUICompressor(array(
'java-bin' => '/usr/local/bin/java',
'yui' => '/some/path/yuicompressor-x.y.z.jar',
'extra-options' => '--charset utf8'
)));
自己定义输出(Custom Output)¶
OutputJs及outputCss方法能够根据不同的资源类来创建须要的html代码。
我们能够重写这种方法或是手动的输出这些资源方法例如以下:
<?php
foreach ($this->assets->collection('js') as $resource) {
echo \Phalcon\Tag::javascriptInclude($resource->getPath());
}
Phalcon资源文件管理(Assets Management)的更多相关文章
- C#资源文件管理
1.右键项目点属性; 2.点资源项,添加资源下拉框的添加现在文件,如下图: 3.直接上代码获取并复制到指定文件夹下: private void button1_Click(object sender, ...
- 资源文件assets和 res下面raw文件的使用不同点
在建立项目中一般会默认建立assets文件,当然我们还可以在res文件下面建立raw文件夹,这里面都可以存放一些图片,音频或者文本信息,可以供我们在程序当中进行使用,不过他们两个也有不同点: asse ...
- iOS7——图像资源Images Assets
iOS7初体验(3)——图像资源Images Assets 分类: iOS开发2013-06-18 16:02 17583人阅读 评论(2) 收藏 举报 ios7Images xcassets图像资源 ...
- 图像资源Images Assets
图像资源Images Assets 开始之前,首先回顾一下iOS7初体验(1)——第一个应用程序HelloWorld中的一张图,如下所示: 本文便分享一下Images.xcassets的体验~_~ 1 ...
- JDK 之资源文件管理
JDK 之资源文件管理 JDK 规范目录(https://www.cnblogs.com/binarylei/p/10200503.html) 一.文件资源 user.home 用户目录,如 Linu ...
- android资源目录---assets与res/raw区别
android资源目录---assets与res/raw的不同 Android 2011-05-24 14:40:21 阅读20 评论0 字号:大中小 订阅 assets:用于存放需要打包到应用程 ...
- phalcon: 资源文件管 理 引入css,js
<?php class IndexController extends Phalcon\Mvc\Controller { public function index() { //添加本地css资 ...
- 【转】android资源目录---assets与res/raw区别
blog.csdn.net/hshm20517/article/details/6461890 assets:用于存放需要打包到应用程序的静态文件,以便部署到设备中.与res/raw不同点在于,ASS ...
- vue2.0 资源文件assets和static的区别
资源文件处理 在我们的项目结构里,有两个资源文件的路径,分别是:src/assets 和 static/.那这两个到底有什么区别呢? Webpacked 资源 为了回答这个问题,我们首先需要理解web ...
随机推荐
- Jquery获对HTML控件的控制
Jquery获对HTML控件的控制 1.获取控件的值 1.1.radio 1.1.1 获取一组radio被选中项的值 var item = $('input[name=items][checked] ...
- 【JQuery】eval()出现missing after property id 错误。
是因为数据没有转换成json格式输出就直接eval了. 正确步骤:后台: JsonBinder.buildNormalBinder().toJson(list); 前台: eval('(${posit ...
- oracle中if/else
oracle中if/else功能的实现的3种写法 1.标准sql规范 一.单个IF 1. if a=... then ......... end if; 2. if a=... then .... ...
- C++逗号运算符与逗号表达式
C++将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句.循环语句等)中.这是C++语言灵活性的一种表现. 请注意,用cout语句输出一个 ...
- android通过服务实现消息推送
这里运用到的andorid知识模块主要有Notification和Service,和一个android-async-http-master开源框架 android项目中,有时会有这样一种需求:客户每隔 ...
- 10-IOSCore - 应用间通信、本地通知
一.应用间通信 URL 调用系统服务: tel:11111 sms:xxx@163.com http:// URL深入 类型://主机:端口/地址?参数 label框等于文字大小快捷键:command ...
- C++静态库中使用_declspec(dllexport) 不能导出函数的问题
在某项目中,有一些静态库,这些静态库中有类型命名的函数GET_XXX.在一次项目结构调整的时候,我想将调用这静态库的代码编译成DLL,并且将这些Get函数导出,我就直接就这些函数前面添加了_decls ...
- ie6背景透明的设置方法 ie6背景颜色透明和png图像透明解决方法
IE6浏览器,让我们又爱又恨.爱它的是,可以让我们写的代码的时候,可以更标准,恨的是,它有太多无厘头的IE6常见bug(详情点击),让我们焦头烂额.现在现在用百度浏览器调查,国内占有率不到6%了,但是 ...
- C++ strcpy strcpy_s strncpy strlcpy
strncpy的用法:它与strcpy的不同之处就在于复制n个字符,而不是把所有字符拷贝(包括结尾'\0'). 函数原型:char * strncpy(char *dst,const char * s ...
- c++,为什么要引入虚拟继承
虚拟基类是为解决多重继承而出现的. 以下面的一个例子为例: #include <iostream.h> #include <memory.h> class CA { i ...