データコンテナ配列にカスタムフィールドを追加する方法
ここでは、メンバーテーブルに顧客番号を追加することにします。Contaoのテーブルにカスタムフィールドを追加するには、1つ以上のファイルの変更が必要となります。このため、カスタムモジュールをsystem/modules ディレクトリに作成することを推奨します。モジュールはアルファベット順に読み込まれることを忘れないでください。このためnews拡張の設定を上書きしたい場合は、機能拡張をcustomという名前にしてはなりません。
データベースの拡張 ¶
データベースの構成は、様々なContaoのモジュールのconfig/database.sqlファイルに保管されています。SQLファイルはデータベースに送ることはありませんが、Contaoの仕様と実際のデータベースのテーブルの間の比較を解釈するために使用します。したがって、他のモジュールで定義されているフィールドをdatabase.sqlファイルで変更できます。新しいフィールドを作成するために以下のコードを追加します:
CREATE TABLE `tl_member`(
`customer_number` varchar(8) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Contaoのインストールツールを使用して、データベースのテーブルを更新します。
DCAの拡張 ¶
作成するモジュールのフォルダーにdca/tl_member.phpを作って、新しいフィールドのメタデータを追加してContaoに処理方法を知らせます。
// パレットを変更
$GLOBALS['TL_DCA']['tl_member']['palettes']['default'] = str_replace
(
'company',
'customer_number,company',
$GLOBALS['TL_DCA']['tl_member']['palettes']['default']
);
// フィールドのメタデータを追加
$GLOBALS['TL_DCA']['tl_member']['fields']['customer_number'] = array
(
'label' => &$GLOBALS['TL_LANG']['tl_member']['customer_number'],
'exclude' => true,
'inputType' => 'text',
'eval' => array('mandatory'=>true, 'rgxp'=>'digit', 'maxlength'=>8)
);
上記のコードが理解できない場合、データコンテナ配列の章を読むとよいでしょう。
翻訳の追加 ¶
作成するモジュールのフォルダーにlanguages/en/tl_member.phpファイルを作って、新しいフィールドの英語のラベルを追加します:
$GLOBALS['TL_LANG']['tl_member']['customer_number'] = array
(
'Customer number',
'Please enter the 8-digit customer number.'
);
これで、メンバーモジュールに8桁の数字の顧客番号を入力できるようになります。フィールドが空だったり、数字以外の文字を含んでいると、Contaoは値を保存しないで代わりにエラーメッセージを表示します。
コメントの追加
zagによるコメント | 2010年6月20日
DCAを拡張しているコードには、<?php と ?> の部分の追加が必要です。PHPな人々には自明かもしれませんが、何が欠けているか解決するまでしばらくかかりました。
<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
// パレットを修正
$GLOBALS['TL_DCA']['tl_member']['palettes']['default'] = str_replace
(
'company',
'customer_number,company',
$GLOBALS['TL_DCA']['tl_member']['palettes']['default']
);
// フィールドのメタデータを追加
$GLOBALS['TL_DCA']['tl_member']['fields']['customer_number'] = array
(
'label' => &$GLOBALS['TL_LANG']['tl_member']['customer_number'],
'exclude' => true,
'inputType' => 'text',
'eval' => array('mandatory'=>true, 'rgxp'=>'digit', 'maxlength'=>8)
);
?>
Custom Theses Writingによるコメント | 2010年5月4日
多くの機関は、そのオンライン情報へのアクセスを制限しています。この情報を利用可能にすることで誰にでも役に立ちます。