シリーズSugarCRM 4.5のカスタマイズのまとめについて、今SugarBeanを継承しないモジュールを作って、メイン画面の表示の仕方は説明したので、左側のメニュー画面に行こうとしています。
で、その前に、言語ファイルといわれる、日本語と英語の切り替えのためのファイルがあるので、それと、$mod_stringsについて説明します。
■各国語切り替え
SugarCRMにおいては、各国語を切り替えるのに、言語ファイルを切り替えることによって行います。
表示部分のことばを、その言語ファイルにいれて、保持しています。
この言語ファイルには2種類あります。
1つは、モジュールごとに用意されている言語ファイル
もう1つは、モジュール共通の言語ファイルです。
■モジュールごとの言語ファイル
モジュールごとに表示内容について各国語で記述した言語ファイルは、
Sugarのホーム/modules/モジュール名/language
の下にあります。
日本語は、ja.lang.php
英語は、en_us.lang.php
です(この2つは空で作ってあります)
内容はどちらも、
$mod_strings = array (
'LBL_MODULE_NAME' => '取引先' ,
'LBL_MODULE_TITLE' => '取引先: ホーム' ,
:
'LBL_MISC' => 'その他' );
(実際には>は半角)
のように、$mod_stringsを配列で宣言し、そこで、
項目名=>表示内容
で宣言していきます。表示の項目名はたいていLBL_ではじめ、大文字です。
各モジュール内のPHPファイルでは、$mod_strings['LBL_MODULE_NAME']のような形で利用します。
こうすると、プログラマー側は、今どの言語化を意識しないでプログラムできます。
なお、この$mod_stringsは、モジュールが切り替わるたびに、内容が変わるわけです。
■モジュール共通の言語ファイル
さてここで、どのモジュールにおいても、モジュールの上にあるタブは同じです。
このような、モジュール間共通の変数は、$app_list_stringsにはいっていて、
$app_list_strings['moduleList'][モジュール名]に、表示モジュール名が入っています。
そして、これを設定するのに、
Sugarのホーム/custom/include/langage
の下につくりました。
日本語は、ja.lang.php
英語は、en_us.lang.php
です(この2つは空で作ってあります)。
そこに
$app_list_strings['moduleList']['Tests']='test';
のように書きました。
ただし、インストーラーからインストールする場合は、ここ以外のところに書き出され、読み込まれます(その場合でも、各国語用にファイルは分かれる)。
■日本語ファイルにおける注意
言語ファイルにおける日本語や、ほかに日本語を含むファイルにおいて、文字コードはUTF-8で保存してください。そして”BOM無し”にしてください。
メモ帳でUTF-8にして保存すると(メモ帳では見えませんが)BOMがつきます。そうすると、エラーになります。なので、BOMをはずす必要があります。文字コード変換ツール「KanjiTranslator 1.5」等を使うと出来ます。
■メニューの追加
ということで、具体的にメニューを追加します。
(1)言語ファイルの作成
Sugarのホーム/modules/Tests/language
(つまり、Testsモジュールのlanguageフォルダ)の下の、ja.lang.phpを以下のように
<?php if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point'); $mod_strings = array ( 'LBL_GOHOME' => 'ごーほーむ', ); ?> |
(上記<>は、本当は半角)
en_us.lang.phpを以下のように
<?php if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point'); $mod_strings = array ( 'LBL_GOHOME' => 'Go Home', ); ?> |
(上記<>は、本当は半角)
作成します。
このとき、<?の前、?>の後に不要なスペースなど、入れないでください。
エラーになります(当然、上記に書いたBOMも、とります)。
(2)メニューファイルの作成
Sugarのホーム/modules/Tests (つまり、Testモジュールのフォルダ)に
Menu.phpというファイルを作成し、
<?php if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point'); global $mod_strings, $app_strings; $module_menu[]=Array("index.php?module=Home&action=index", $mod_strings['LBL_GOHOME'],"minus"); ?> |
(上記<>は、本当は半角)
のように記述します。
これで、Testタブをクリックするとメニューが出てきます。
■Menu.phpファイル
つまり、Menu.phpファイルで、 $module_menu[]に配列を追加していくことで、メニューが追加されます。
$module_menu[]=Array("行き先URL", 表示内容,アイコンの画像);
の順に指定します。
アイコンの画像は、
Sugarのホーム/themes/現在使用中のテーマ/imagesの下にあります。
アイコンの画像.gifファイルがメニューのアイコン(文字の前についている)に表示されます。
なお、今回は、やっていませんが、既存の他のモジュールのMenu.phpではACLController::checkAccessを行って、起動可能なときだけ、表示していると思います。