這裏有一個方法可以手動控制你的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