Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

カスタム関数を作って効率的よくPHPと連携しよう

FileMaker API for PHPの利用 2:カスタム関数で効率的なPHPベースのカスタムWeb

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/06/20 16:30

PHPベースのカスタムWeb公開を実装する際、PEARなどのライブラリやフレームワークを使うほどでもないけど、もうちょっと楽にコーディングをしたいことがあると思います。今回は、日付データの登録処理や書式変換、登録や編集に際してのフォームデータの流し込みなど、頻繁に利用するものを関数にして簡単に利用できるようにします。

目次

はじめに

 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」という名前にします。

関数1:「viewDate」
//日付データ表示用の書式変換の関数。引数に、リクエストデータと書式を渡す。
function viewDate($data , $format='Y/m/d'){
    if(strlen($data)){
        echo date($format,$data);
    }
}

 関数viewDateは、引数として日付フィールドの値と表示する書式を渡すようにしています。二番目の引数は、何も渡さない場合「yyyy/mm/dd」という形式になるように初期値をセットしておきます。

用例)日付フィールドの値が「4/12/2008」の場合
<?php viewDate($record->getFieldAsTimeStamp('Date'));?>
//出力結果)2008/4/2

<?php viewDate($record->getFieldAsTimeStamp('Date') , 'm/d');?>
//出力結果)4/2

 関数viewDateを呼び出すときは、getFieldメソッドで取得したフィールドの値を渡します。書式を指定したい場合は、コンマ区切りで書式をセットします(ここで指定する書式のフォーマットは、PHPのdate関数で利用するものと同じにする)。フィールドの値が空欄の場合は、空欄になります。

 また、この関数は時刻フィールドの表示にも利用できます。

例)時刻フィールドの値が「10:30:21」の場合
<?php viewDate($record->getFieldAsTimeStamp('Time'),'H:i');?>
//出力結果)10:30

 PHPのdate関数を意識せずに使いやすくする関数と言うところです。

注1
 関数名として有効な形式は、まず文字かアンダースコアで始まり、その後に任意の数の文字・ 数字・あるいはアンダースコアが続くものです。
日付データの登録(編集)

 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」に変換するためのカスタム関数は次のようになります。

関数2:「setDate」
//日付データの送信用に書式をmm/dd/yyyyに変換する関数。
//引数はリクエストデータ。
function setDate($data){
    if(strlen($data)){
        return date( 'm/d/Y' , strtotime($data));
    }
}
用例
$record->setField('Date',setDate($_POST['Date']));

 簡単です。

数字データの処理

 数字データの表示に際しては、桁区切りや小数点以下を制限して表示することが多いです。number_format関数を利用することが一般的ですが、これも関数化して簡略化し、呼び出せるようにしておくといいです。

関数3:「necho」
//数字書式変換用の関数。引数にリクエストデータと桁数。
function necho($data,$dec=0){
    if(is_numeric($data)){
        echo number_format($data,$dec);
    }
}
用例:数字フィールド「Price」の値が4200の場合
<?php necho($record->getField('Price'));?>
//出力結果 4,200

 工夫次第で接頭辞をつけたり、値がマイナスの場合の書式を変更したりもできますね。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 堀 直樹(ホリ ナオキ)

    大学卒業後入社の企業にて、趣味のFileMaker使いからなりゆきで社内のシステム担当となり社内システムの開発に孤軍奮闘する。その後ソフトハウスに転職してFileMakerによるシステム開発に従事し、現在は株式会社キクミミにて数々の企業のシステムを開発する。PHPによるカスタムWebでのシステム構築...

バックナンバー

連載:FileMaker API for PHPの利用
All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5