【コラム】
FMCakeMixのUser Guide.pdfを参考に、CakePHP x FileMakerでWebアプリの作成方法を紹介する。紹介するのは、CakePHPのPaginationという機能を使った一覧画面だ。前回はファイルのデプロイ、データベースの準備、データベース接続設定、モデルの定義までを紹介した。今回はコントローラ・ビューの作成と実際に動作させてみるまでを紹介する。
User Guide.pdf P.5~6 - Controller Examplesより。一覧画面表示用のコントローラを作成する。画面表示にあたりレコードを取得する方法は2種類。
今回はPaginationを使って簡単に一覧画面を作成する。P.4最下部の「paginate」サンプルコードを参考にコントローラを作成。
Paginateの使い方は次のとおり。
これらはとくに指定しなくても動作する。いったんまず何もオプションを指定しない状態でコントローラを作成した。
コントローラ記述例
<?php
class BooksController extends AppController
{
function index()
{
$this->layout = false;
$this->Book->recursive = 0;
$this->set('books', $this->paginate());
}
}
?>
User Guide.pdf P.8~9 - View Examplesより。さきほど作成したコントローラに対応するビューを作成する。User Guide.pdfにはautomagic fieldsとpaginateと2種類のサンプルコードが記載されている。今回参考にするのはP.6後半部のpaginateの方。FX.phpやFileMaker API for PHPで一覧画面を実装したときと同様、foreachで1レコード1レコードを表示していく。
ビュー記述例
<table cellpadding="0" cellspacing="0">
<tr>
<th>
Title
</th>
<th>
Author
</th>
<th>
Pages
</th>
</tr>
<?php
$i = 0;
foreach ($books as $book)
{
?>
<tr>
<td>
<?php echo $book['Book']['title']; ?>
</td>
<td>
<?php echo $book['Book']['author']; ?>
</td>
<td>
<?php echo $book['Book']['number_of_pages']; ?>
</td>
</tr>
<?php
}
?>
</table>
これでモデル・コントローラ・ビューの作成がひととおり完了した。Webブラウザで(CakePHPルートディレクトリ)/books/indexにアクセスしてみよう。
一覧画面が実際に動作するまでを確認できた。ここまではもっともシンプルな構成の例。続けてPaginationを利用した簡易検索と、ソートの実装例を紹介しよう。
コントローラ記述例
<?php
class BooksController extends AppController
{
function index()
{
$this->layout = false;
$this->Book->recursive = 0;
$conditions = array
(
'title' => 'PHP',
);
$this->set('books', $this->paginate($conditions));
}
}
?>
コントローラ側でPagiationを呼び出す際に$conditions配列で検索条件を指定。このサンプルの場合、検索条件「titleに"PHP"をふくむ」にマッチしたレコードが表示されるようになる。
ビュー記述例
<table cellpadding="0" cellspacing="0">
<tr>
<th>
<?php echo $paginator->sort('Title' , 'title');?>
</th>
<th>
<?php echo $paginator->sort('Author', 'author');?>
</th>
<th>
<?php echo $paginator->sort('Pages', 'number_of_pages');?>
</th>
</tr>
<?php
$i = 0;
foreach ($books as $book)
{
?>
<tr>
<td>
<?php echo $book['Book']['title']; ?>
</td>
<td>
<?php echo $book['Book']['author']; ?>
</td>
<td>
<?php echo $book['Book']['number_of_pages']; ?>
</td>
</tr>
<?php
}
?>
</table>
テーブルのヘッダにそれぞれ$paginator->sort()を使ってソート用のリンクを配置している。sort()にはオプションが用意されており、FileMakerフィールド名と表示したいラベル名を別に持たせたり、特定のclassを持たせるといったことが可能だ。
コントローラ・ビュー修正後、Webブラウザで確認する。
ここで気をつけてほしいのは2点。
1のソートの問題については「番外編: CakePHPでFileMakerを使う方法」の最後を参考にして修正すればOKだ。2の検索条件に記号が使えないのは、dbo_fmcakemix.php側で「すべての検索条件でopが使われるように」コーディングされているため。そのため、$conditionsに「>100」や「<100」と指定してもうまく動作しない。これを防ぎたい場合は$conditions側で、FX.phpのAddDBParam()第3引数に指定してやるように、演算子に対応する文字列を別に指定する必要がある。
コントローラ修正後
<?php
class BooksController extends AppController
{
function index()
{
$this->layout = false;
$this->Book->recursive = 0;
$conditions = array
(
'number_of_pages' => '5',
'number_of_pages.op' => 'gte'
);
$this->set('books', $this->paginate($conditions));
}
}
?>
number_of_pagesに5を、number_of_pages.opにgteを指定している。この2つで「number_of_pagesが5以上」という意味になる。実際にWebブラウザで動作を確認する。
|
|
コントローラの$conditionsを変更し、「number_of_pagesが5以上」の検索条件に。'number_of_pages' => '>=5'としただけではうまく動作しない |
'number_of_pages' => '5'および'number_of_pages.op' => 'gte'としてやることで、うまく機能する |
opに使用できる引数をおさらいしておこう。
| キーワード | 動作 | FileMaker Proの演算子 |
|---|---|---|
| eq | 単語全体が一致 (または空白に一致) / デフォルトで使用される | =値 |
| cn | 単語を含む | 値* |
| bw | 前方一致 | 値* |
| ew | 後方一致 | 値 |
| gt | 大きい | >値 |
| gte | 大きいか等しい | >=値 |
| lt | 小さい | <値 |
| lte | 小さいか等しい | <=値 |
| neq | 単語を含まない | 除外,値 |
次回はPagination(PaginatorHelper Class)をもう少し掘り下げ、検索機能や画面遷移について取りあげる。
| FileMaker ProのiPhone/iPadアプリ「FileMaker Go」登場 [2010/7/21] |
| ファイルメーカー、「FileMaker カンファレンス 2010」を10月に開催 [2010/7/2] |
| ファイルメーカー、FileMakerセミナーイベントを6月に5都市で開催 [2010/4/20] |
| 「FileMaker Pro 11」発表 - グラフ作成機能やクィック検索を搭載 [2010/3/10] |
| ビールの"のど越し"感にはホップの香りが重要 - サッポロビールが発見 [09:00 5/18] |
| Linux Mint 15登場迫る [08:00 5/18] |
| 米Google、量子コンピュータ施設を開設 - 機械学習の研究に活用 [05:50 5/18] |
| 産総研など、夏季と冬季で太陽光を自動調節する省エネ調光シートを開発 [19:37 5/17] |
| 4連続の大規模な太陽フレア発生 [19:08 5/17] |
|
夏帆、ナース役でホラーに初挑戦! 「私自身、実は怖いのが苦手で」 [17:30 5/19] エンタメ |
|
[Berryz工房]11月に初の日本武道館単独公演 ももち「大成功させたい!」 [17:24 5/19] ホビー |
|
【レポート】Yahoo! JAPANの不正アクセス - 自分のIDが流出していないか調べておこう [17:18 5/19] パソコン |
|
[AKB48・川栄李奈]“バカセンター”はすり替わった愛犬に気づくのか 「アカン警察」で [17:00 5/19] エンタメ |
|
【連載】鉄道、昭和の旅 第5回 車掌車にいつか乗ってみたかった [17:00 5/19] 旅行 |