http://docs.ckan.org/en/2.9/theming/webassets.html
CSS 檔等靜態檔案有兩種方式加入:簡單的 extra_public_paths 作法或是 Webassets。但 JavaScript module 就只能透過 Webassets。
Webasset 的好處是在 production 版中會自動最小化檔案、快取並打包/bundling,以減少下載時間,載入指定相依檔⋯⋯。
CKAN 只有 *.js、*.css 會以 Webasset 資源處理,其它的靜態檔(圖檔、PDF)要透過 extra_public_paths 方式處理。
建立: ckanext-example_theme
延續 CKAN Theming Tutorial 1(v2.9): 靜態檔案(圖片與CSS) 往下做。
建立 assets 目錄
把 example_theme.css 改放到 assets 目錄下:
ckanext/
example_theme/
public/
promoted-image.jpg
assets/
example_theme.css
另外再加一個 webassets.yml ,內容如下:
example_theme:output: example_theme/example_theme.csscontents:- example_theme.css
修改 plugin.py
編輯 ckanext-example_theme/ckanext/example_theme/plugin.py ,在 update_config() 中呼叫 add_resource() 向 CKAN 註冊 assets 目錄,如下:
- toolkit.add_resource 的兩個參數:
- assets: webassets 所在目錄(相對於plugin.py的路徑)
- example_theme: 在 CKAN template 中存取此 assets 目錄的名稱
在 templates 中使用 {% asset %}
編輯 ckanext-example_theme/ckanext/example_theme/templates/base.html,在其中以 Jinja2 的{% asset %} 取代<link> 匯入檔案,如下:
所有 template 都可用 {% asset %},Webassets 會加入需要的 <style> 、 <script> 來 include CSS 及JavaScript檔案,但最好把他們集中在 Jinja2 的 styles、scripts block.
Assets 不會在 {% asset %} 出現那行被 include。
用一個設定檔設定 Webassets 如何處理每個 asset 檔(是否打包/bundle,include的順序,include 檔要放在網頁的最前面還是最後面,檔案間的相依性...),參考:Assets。
安裝
- 進入Python Virtual Environment:
. /usr/lib/ckan/default/bin/activate - 切換目錄:
cd /usr/lib/ckan/default/src/ckanext-example_theme - 安裝 Plugin:
python setup.py develop - 重啟 CKAN 服務:
(production版) sudo supervisorctl restart ckan-uwsgi:*
(develop版) ckan -c /etc/ckan/default/ckan.ini run
測試
檢視 http://[CKAN Website IP] 的網頁原始碼,在HTML的 <head>...</head> 可發現:
<link href="/webassets/webassets-external/2dce0ddda2882168f0c12c639a912e24_example_theme.css" rel="stylesheet"/>
沒有留言:
張貼留言