这里有一个方法可以手动控制你的JS和CSS文件资源的顺序。
首先,在控制器添加CSS和JS路径时,使用自动尔康\资产\收集容器来存储您的ad-hoc资产:
$this->assets->addJs('js/bootstrap-multiselect.js');
$this->assets->addCss('css/bootstrap-multiselect.css');
在您的自定义BaseController从所有的控制器扩展,添加一个afterExecuteRoute()公共方法:
一旦我们确信当前的路线执行完毕,我们可以从尔康\资产自动js和css藏品拉特设资产\经理,将它们附加到我们的常见组合列表中牛逼的文件,为了和去重它们,然后把它们放到新的自定义类别:
// get list of js files added to the standard js collection
$append_js = array();
forEach($this->assets->getJs() as $js){
$append_js[] = $js->getPath();
}
// declare paths to common js assets
$js_assets = array(
'js/jquery-2.1.1.min.js',
'js/jquery-ui.min.js',
'js/bootstrap.min.js',
);
// merge common paths with ad-hoc paths
$js_assets = array_merge($js_assets, $append_js);
$js_assets = array_unique($js_assets); // dedup
// add js assets to a new collection
$js_collection = $this->assets->collection('header_js');
forEach($js_assets as $js_path){
$js_collection->addJs($js_path);
}
重建CSS资产注入一个新的集合的工作方式相同:
// get list of css files added to the standard css collection
$append_css = array();
forEach($this->assets->getCss() as $css){
$append_css[] = $css->getPath();
}
// declare paths to common css assets
$css_assets = array(
'css/jquery-ui.min.css',
'css/jquery-ui.theme.min.css',
'css/jquery-ui.structure.min.css',
'css/bootstrap.min.css',
'css/bootstrap-theme.min.css',
'css/main.css',
);
// merge common paths with ad-hoc paths
$css_assets = array_merge($css_assets, $append_css);
$css_assets = array_unique($css_assets); // dedup
// add css assets to a new collection
$css_collection = $this->assets->collection('header_css');
forEach($css_assets as $css_path){
$css_collection->addCss($css_path);
}
最后,当你输出你的js和css资产在您的模板,输出新的自定义集合,而不是默认集合了尔康\资产\ Manager会自动创建:
{{ getDoctype() }}
<html>
<head>
{{ tag.getTitle() }}
{{ assets.outputCss('header_css') }}
{{ assets.outputJs('header_js') }}
</head>
你好尼可拉斯,对不起,这么长时间来回应,我一直在玩弄项目。不幸的是,我在调用这个类时遇到了问题。我应该将它添加到DI吗?目前我只是像上面这样调用它,而我的错误是:PHP致命错误:找不到'MyApp \ Tag'类。我明显地将“MyApp”替换为我的应用程序的名称,但我想不出我做了什么错? – Tim
@Tim您需要注册“MyApp”命名空间以便找到它。你可以将它命名为任何你喜欢的东西。如果将它添加到DI容器中,您只需要:'$ obj = \ Phalcon \ DI :: getDefault() - > get('mytag')'。如果时间不是问题,那么你可能要等到12月初,0.7出局。该功能包含在该版本中。 –
嗨尼古拉斯,我发现了问题,我没有在自动加载器中注册名称空间。奇妙的是,这个功能将很快建成!快速的问题来帮助我学习。在上面这个类中,我遇到了另一个致命错误,“在对象上下文中不使用$ this时”:foreach($ this - > _ css as $ css => $ active)。我不明白这里发生了什么?我真的很感谢你的见解。 Ack! – Tim