SugarCRM - カスタムなJavaScriptをアップグレードセーフに読み込む

#javascript, #php, #sugarcrm

SugarCRMネタ。
共通で使用するJavaScriptをアップグレードセーフに読み込む方法。

カスタムで共通なJavaScriptを読み込むために、今まではSugarViewに書いたり、
layout_utilに書いたり、苦肉のカスタマイズを施していたがこの方法でついに決着!

JavaScriptのグルーピング機構を使う

SugarはJavaScriptのリペアによってinclude/javascript/の下に生成されたJavaScriptをグルーピングして、まとめたJavaScriptをcacheに生成している。

jssource/JSGroupings.phpに設定が書かれている。
で、このファイルの最後にExtensionを読む設定が!!

カスタムグルーピング設定を記述

設定は以下のファイルに書く。ファイル名はなんでも良い。

1
custom/Extension/application/Ext/JSGroupings/custom_jsgroupings.php

$js_groupingsに追加する形で定義すればよい。
ただ、グルーピングの定義の仕方に癖があるので注意。こう書かないと正しくマージされない。

1
2
3
4
5
6
7
<?php
$js_groupings[] = $sugar_grp1 = array_merge($sugar_grp1, array(
'path to js1' => 'include/javascript/sugar_grp1.js',
'path to js2' => 'include/javascript/sugar_grp1.js',
'path to js3' => 'include/javascript/sugar_grp1.js',
));

include/javascript/sugar_grp1.jsと書くことで、sugar_grp1.jsにマージされるようになる。

最近、自分はRailsのようにassetsディレクトリにJavaScript、CSSを置くことが多い。マージ先はsugar_grp1.jsを指定しておけばロードの手間も省けるし一石二鳥。

おわりに

多分これがアップグレードセーフでやる最適解だと思われる。
同じ手法でCSSもロードできるのでstyle.cssに書くのが忍びないスタイルはこれで読み込みましょう。