はじめに
FileMaker API for PHPを利用してPHPベースのカスタムWeb公開を進めていくのに際し、慣れない人にとっては、やはりPHPのコーディングが大変だと感じます。
PEARなどのライブラリやフレームワークを使うほどでもないけど、もうちょっとコーディングを楽にできないかということで、自作のカスタム関数を作り、よく使う機能を関数として利用できるようにしましょう。
具体的には、日付データの登録処理や書式変換、登録や編集に際してのフォームデータの流し込みなど、頻繁に利用するものだけど、いちいちコーディングすると面倒なものを関数にして簡単に利用できるようにします。
カスタム関数について
ここで紹介するカスタム関数は、いわゆるPHPでつくるユーザー定義関数です。ひとかたまりの処理をまとめたもので、データを受け取り、決められた処理を行い、結果を返します。汎用性の高い処理を関数化することで、再利用して同じような処理を行うときの手間を省くことができます。
日付データの処理
日付(時刻)データの表示
まずは日付データの処理からいきましょう。フィールドデータを画面上に表示するという最もよく使うものです。FileMakerから日付フィールドのデータをgetField
メソッドで表示すると、デフォルトでは書式が「mm/dd/yyyy」となっています。これを「yyyy/mm/dd」や「mm/dd」にしたい場合などがあると思います。
これをPHP側で記述すると、PHPのDate
関数とAPIのgetFieldAsTimeStamp
関数を利用して、
<?php echo date('Y/m/d' , $record->getFieldAsTimeStamp('Date')); ?>
という形になります。FileMakerから日付のデータをgetFieldAsTimeStamp
関数を使ってタイムスタンプ形式で取得し、date
関数で書式を整形しています。
各画面で日付フィールドが登場するたびに毎回これを書くのも面倒ですし、もっとシンプルに記述できるようにしたいです。さらにこの場合、日付のデータが空欄だとエラーになってしまうので、日付の値が空欄の場合には空欄を返すような処理にします。
関数名はPHPの命名規則に準ずるなら(注1)、好きにつけて大丈夫です。ここでは「viewDate」という名前にします。
//日付データ表示用の書式変換の関数。引数に、リクエストデータと書式を渡す。 function viewDate($data , $format='Y/m/d'){ if(strlen($data)){ echo date($format,$data); } }
関数viewDate
は、引数として日付フィールドの値と表示する書式を渡すようにしています。二番目の引数は、何も渡さない場合「yyyy/mm/dd」という形式になるように初期値をセットしておきます。
<?php viewDate($record->getFieldAsTimeStamp('Date'));?> //出力結果)2008/4/2 <?php viewDate($record->getFieldAsTimeStamp('Date') , 'm/d');?> //出力結果)4/2
関数viewDate
を呼び出すときは、getField
メソッドで取得したフィールドの値を渡します。書式を指定したい場合は、コンマ区切りで書式をセットします(ここで指定する書式のフォーマットは、PHPのdate
関数で利用するものと同じにする)。フィールドの値が空欄の場合は、空欄になります。
また、この関数は時刻フィールドの表示にも利用できます。
<?php viewDate($record->getFieldAsTimeStamp('Time'),'H:i');?> //出力結果)10:30
PHPのdate
関数を意識せずに使いやすくする関数と言うところです。
日付データの登録(編集)
FileMakerのカスタムWebでは、日付フィールドに登録するデータは「mm/dd/yyyy」という形式で送信しなければエラーとなってしまいます。日本では多くの場合、書式は「yyyy/mm/dd」で運用されていることが多いので、ユーザーがこの書式で登録したまま送信してしまうとFileMakerで処理できません。ユーザーからの入力データをFileMakerに送信する前に、書式を「mm/dd/yyyy」に変換する必要があります。
この処理を簡単にするにはPHPのstrtotime
関数を利用します。英文形式の日付・時刻式をUNIXタイムスタンプ形式に変換してくれる関数です。「yyyy/mm/dd」「mm/dd」「mm/dd/yyyy」など、よく利用される形式の日付書式のデータであれば、うまくタイムスタンプ形式に変換してくれます。この関数を使って、Webフォームからの日付データを「mm/dd/yyyy」に変換するためのカスタム関数は次のようになります。
//日付データの送信用に書式をmm/dd/yyyyに変換する関数。 //引数はリクエストデータ。 function setDate($data){ if(strlen($data)){ return date( 'm/d/Y' , strtotime($data)); } }
$record->setField('Date',setDate($_POST['Date']));
簡単です。
数字データの処理
数字データの表示に際しては、桁区切りや小数点以下を制限して表示することが多いです。number_format
関数を利用することが一般的ですが、これも関数化して簡略化し、呼び出せるようにしておくといいです。
//数字書式変換用の関数。引数にリクエストデータと桁数。 function necho($data,$dec=0){ if(is_numeric($data)){ echo number_format($data,$dec); } }
<?php necho($record->getField('Price'));?> //出力結果 4,200
工夫次第で接頭辞をつけたり、値がマイナスの場合の書式を変更したりもできますね。