【コラム】

FileMaker×PHPで作る、簡単・便利なWebアプリ

79 Hello, FMCakeMix! チュートリアル(4)

 

79/116

FMCakeMixのUser Guide.pdfを参考に、CakePHP x FileMakerでWebアプリの作成方法を紹介する。紹介するのは、CakePHPのPaginationという機能を使った一覧画面だ。1回目はファイルのデプロイ、データベースの準備、データベース接続設定、モデルの定義を。2回目はコントローラ・ビューの作成と実際に動作させてみるまで、3回目はコントローラでセットアップするPaginationの使い方を紹介した。今回はビューで使えるPaginationの機能について紹介する。

Hello, FMCakeMix! チュートリアル / Paginationとは

Paginationは一覧画面などでページャ機能を簡単に提供するためのヘルパー。一覧画面を実装する場合、ソートやページ前後の遷移など、考慮しなければならない点がおおくある。CakePHPにはPaginationとよばれるヘルパーが用意されており、デベロッパは簡単なセットアップをおこなうだけで簡単に一覧画面を実装できるようになる。

Paginationを使うための準備作業はおもに次のとおり。

  • コントローラのセットアップ
  • ビューにおけるページ付け

前回はコントローラのセットアップまでを紹介した。今回はビューにおけるページ付け - ビューで使えるPaginationの機能について紹介しよう。

ビューにおけるページ付け

PaginatorHelperの機能は次のとおり(一部を抜粋)。

  • options: PaginatorHelperが作成するリンクや表示方法をカスタマイズする
  • counter: 現在ページ, 最大ページ数, レコード総数, 対象レコード数, レコードの何件目から何件目といった情報を表示する。表示のフォーマットはカスタマイズ可能
  • first: 最初のページへのリンクを作成する
  • prev: 前のページへのリンクを作成する。FX.phpの$ReturnedData['linkPrevious']に近い
  • numbers: ページ番号を作成する
  • next: 次のページへのリンクを作成する。FX.phpの$ReturnedData['linkNext']に近い
  • last: 最後のページへのリンクを作成する
  • sort: ソートをおこなうためのリンクを作成する

option

optionではPaginatorHelperが作成するリンクや表示方法をカスタマイズする。

  • format: counterが出力するフォーマットをカスタマイズする。特定の定数は対応する値に置換される(別表を参照)
  • separator: ページ区切りのセパレータをカスタマイズする。デフォルトは " of "
  • url: PaginatorHelperが作成するリンクをカスタマイズする
constants 置換後の値
%page% 現在のページ
%pages% 最大ページ数
%count% レコード総数
%current% 対象レコード数
%start% 表示開始レコード数
%end% 表示終了レコード数

counter

counterではページの結果セット中、現在表示しているページ数やレコード総数といった情報を表示する。表示のフォーマットはoptionでカスタマイズする。

counter使用例

<p>
<?php
echo $paginator->counter();
?>
</p>

<p>
<?php
echo $paginator->counter
(
    array
    (   
        'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true) 
    )   
);
?>
</p>

<p>
<?php
echo $paginator->counter
(
    array
    (   
        'format' => __('%page% / %pages% ページ, %count% 件中, %start% - %end% 件目を表示', true) 
    )   
);
?>
</p>

counterのformatは先述のoptionのほか、counter内で直接指定も可能。次のように表示される。

counterのフォーマットカスタマイズ例

first, prev, next, last

それぞれ最初のページ, 前のページ, 次のページ, 最後のページへのリンクを作成する。firstとlastには$title, $options、prevとnextにはこれに加えて$disabledTitle, $disabledOptionsと4つのパラメータが指定でき、リンクが有効/無効の場合の表示形式をカスタマイズできる。

first, prev, next, last使用例

<p>
<?php
echo $paginator->first();
echo $paginator->prev();
echo $paginator->next();
echo $paginator->last();
?>
</p>

<p>
<?php
echo $paginator->first('最初のページ', null);
echo $paginator->prev('前のページ', null, '前のページ', array('tag'=>'span'));
echo $paginator->next('次のページ', null, '次のページ', array('tag'=>'span'));
echo $paginator->last('最後のページ', null);
?>
</p>

prev, nextの第3/4引数は、ページが存在しないときに表示する文字列とオプション。次のように表示される。

first, prev, next, lastのカスタマイズ例

numbers

numbersでは複数ページにまたがる場合の、ページ番号を作成する。セパレータや一度に表示するページ番号の数、ラップするタグなどはオプションでカスタマイズ可能。

numbers使用例

<p>
<?php
echo $paginator->numbers();
?>
</p>

このサンプルでは次のように表示される。

numbersの使用例

ページが移動すると動的に開始・終了ページも変わる

sort

sortではソート用リンクを作成する。表示例については「Hello, FMCakeMix! チュートリアル(2)」を参照されたい。

Hello, FMCakeMix! チュートリアル(2)」のビュー記述例をベースに、これらのメソッドを使用して一覧画面を再実装する。

ビュー記述例

<p style="text-align: center">
<?php
    echo $paginator->counter
    (
        array
        (
            'format' => __('%page% / %pages% ページ,  <span class="foundCount">%count%</span>件中、%start% - %end% 件目を表示', true)
        )
    );
    echo '<br>';
    echo $paginator->prev('<< '.__('前のページ', true), array(), null, array('class'=>'disabled', 'tag' => 'span'));
    echo ' | ' . $paginator->numbers() . ' | ';
    echo $paginator->next(__('次のページ', true).' >>', array(), null, array('tag' => 'span', 'class' => 'disabled'));
?>
</p>

<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>

<p style="text-align: center">
<?php
    echo $paginator->prev('<< '.__('前のページ', true), array(), null, array('class'=>'disabled', 'tag' => 'span'));
    echo ' | ' . $paginator->numbers() . ' | ';
    echo $paginator->next(__('次のページ', true).' >>', array(), null, array('tag' => 'span', 'class' => 'disabled'));
    echo '<br>';
    echo $paginator->counter
    (
        array
        (
            'format' => __('%page% / %pages% ページ,  <span class="foundCount">%count%</span>件中、%start% - %end% 件目を表示', true)
        )
    );
?>
</p>

counter, prev, numbers, nextを使用してナビゲーションを追加した。これをWebブラウザで表示する。

PaginatorHelperの機能を使用し、ナビゲーションを上下に配置した

ページ送り処理の実装はなかなか手間がかかるが、Paginatorを使いこなせば効率よく実装ができるようになる。マニュアルを熟読して、しっかり使いこなせるようになっておこう。

79/116

インデックス

連載目次
第116回 最新の情報を追い続ける
第115回 簡易エラーロギングで、トラブルシューティングをより素早く(2)
第114回 簡易エラーロギングで、トラブルシューティングをより素早く(1)
第113回 表示方法「表形式」の落とし穴
第112回 FileMaker Webアプリで見落としやすいセキュリティのポイント
第111回 外部データソースに注意! Web公開が遅くなったときのチェック
第110回 FX_Fuzzy_Debuggerで補足できるエラー
第109回 FileMakerデバッグの際に有用なツールを自作する
第108回 繰り返しフィールドを扱うときの注意点
第107回 FX.phpのデバッグメッセージをコンソールに表示する
第106回 FileMaker Serverの「使用状況」とは
第105回 Web経由でのCSVエクスポート
第104回 Web公開でのグラフ表示にチャレンジ
第103回 データベースデザインレポートを活用したWeb帳票(4)
第102回 データベースデザインレポートを活用したWeb帳票(3)
第101回 データベースデザインレポートを活用したWeb帳票(2)
第100回 データベースデザインレポートを活用したWeb帳票(1)
第99回 SetLogicalOR()と空白・改行文字の取扱いについて
第98回 FMCakeMixでスクリプトを二重起動させない方法
第97回 コマンドラインを活用したメンテナンス方法(3)
第96回 コマンドラインを活用したメンテナンス方法(2)
第95回 コマンドラインを活用したメンテナンス方法
第94回 FMFind()とFMView()の処理の違いとは
第93回 オブジェクトフィールドからファイル参照への移行法
第92回 FX.phpで複合検索をおこなうには(3)
第91回 FX.phpで複合検索をおこなうには(2)
第90回 FX.phpで複合検索をおこなうには(1)
第89回 Hello, FMCakeMix! チュートリアル(14)
第88回 Hello, FMCakeMix! チュートリアル(13)
第87回 Hello, FMCakeMix! チュートリアル(12)
第86回 Hello, FMCakeMix! チュートリアル(11)
第85回 Hello, FMCakeMix! チュートリアル(10)
第84回 Hello, FMCakeMix! チュートリアル(9)
第83回 Hello, FMCakeMix! チュートリアル(8)
第82回 Hello, FMCakeMix! チュートリアル(7)
第81回 Hello, FMCakeMix! チュートリアル(6)
第80回 Hello, FMCakeMix! チュートリアル(5)
第79回 Hello, FMCakeMix! チュートリアル(4)
第78回 Hello, FMCakeMix! チュートリアル(3)
第77回 Hello, FMCakeMix! チュートリアル(2)
第76回 Hello, FMCakeMix! チュートリアル(1)
第75回 最新FMCakeMixの動向を追う(3)
第74回 最新FMCakeMixの動向を追う(2)
第73回 最新FMCakeMixの動向を追う
第72回 FileMaker Webアプリを支えるライブラリ集
第71回 メンテ必須事項! 長期運用でのポイント(4)
第70回 メンテ必須事項! 長期運用でのポイント(3)
第69回 メンテ必須事項! 長期運用でのポイント(2)
第68回 メンテ必須事項! 長期運用でのポイント(1)
第67回 FileMaker Server 10→11での変更点
第66回 FX.php/APIの違い - スクリプトの実行
第65回 FX.php/APIの違い - レコード削除
第64回 FX.php/APIの違い - レコード編集(2)
第63回 FX.php/APIの違い - レコード編集(1)
第62回 FX.php/APIの違い - レコード検索(7)
第61回 FX.php/APIの違い - レコード検索(6)
第60回 FX.php/APIの違い - レコード検索(5)
第59回 FX.php/APIの違い - レコード検索(4)
第58回 FX.php/APIの違い - レコード検索(3)
第57回 FX.php/APIの違い - レコード検索(2)
第56回 FX.php/APIの違い - レコード検索(1)
第55回 FX.php/APIの違い - レコード登録(2)
第54回 FX.php/APIの違い - レコード登録(1)
第53回 番外編: CakePHPでFileMakerを使う方法
第52回 レコードの取扱いに特化したクラス"FileMaker_Record" (3)
第51回 レコードの取扱いに特化したクラス"FileMaker_Record" (2)
第50回 レコードの取扱いに特化したクラス"FileMaker_Record" (1)
第49回 結果セットの取扱いに特化したクラス、FileMaker_ResultSet(2)
第48回 結果セットの取扱いに特化したクラス、FileMaker_ResultSet(1)
第47回 ポータル情報の取得に特化したクラス、FileMaker_Field
第46回 フィールド情報の取得に特化したクラス、FileMaker_Field(4)
第45回 フィールド情報の取得に特化したクラス、FileMaker_Field(3)
第44回 フィールド情報の取得に特化したクラス、FileMaker_Field(2)
第43回 フィールド情報の取得に特化したクラス、FileMaker_Field(1)
第42回 レイアウト情報取得に特化したFileMaker_Layout(3)
第41回 レイアウト情報取得に特化したFileMaker_Layout(2)
第40回 レイアウト情報取得に特化したFileMaker_Layout(1)
第39回 API for PHPの中枢、FileMakerクラス(3)
第38回 API for PHPの中枢、FileMakerクラス(2)
第37回 API for PHPの中枢、FileMakerクラス(1)
第36回 API for PHPでのオブジェクトフィールド取り扱い
第35回 API for PHPでのレコード複製・削除方法、関連メソッド紹介
第34回 API for PHPでのレコード編集方法、関連メソッド紹介(2)
第33回 API for PHPでのレコード編集方法、関連メソッド紹介(1)
第32回 API for PHPでのレコード検索、関連メソッド紹介(2)
第31回 API for PHPでのレコード検索、関連メソッド紹介(1)
第30回 API for PHPを使うなら覚えておきたいvalidateの使い方
第29回 API for PHPでのレコード登録方法、関連するメソッドの紹介(2)
第28回 API for PHPでのレコード登録方法、関連するメソッドの紹介(1)
第27回 API for PHPでのDB接続手順、レコード表示まで(2)
第26回 API for PHPでのDB接続手順、レコード表示まで(1)
第25回 2大ライブラリのもうひとつ、API for PHPを試す
第24回 スピードアップのための徹底チューニング(6) 総集編
第23回 スピードアップのための徹底チューニング(6) スクリプトを活用せよ
第22回 スピードアップのための徹底チューニング(5) 続・集計には中間テーブル
第21回 スピードアップのための徹底チューニング(4) 集計には中間テーブル
第20回 スピードアップのための徹底チューニング(3) 集計フィールドは置かない
第19回 スピードアップのための徹底チューニング(2) 検索実装の御法度
第18回 スピードアップのために徹底チューニング(1) フィールドの配置法
第17回 見落としがちな「アカウントとアクセス権」の管理術
第16回 「CSVからデータをインポートしたい」には要注意!(2) - 実装編
第15回 「CSVからデータをインポートしたい」には要注意!(1) - まずは解説から
第14回 エラーコード早見表 & お手軽デバッグ「Fuzzy_Debugger」
第13回 値一覧でユーザビリティアップ! JavaSciptを活用せよ
第12回 オブジェクトフィールドから脱却! よりよいパフォーマンスを出す実装とは
第11回 オブジェクトフィールドは鬼門?! Webから取り扱うときの注意点
第10回 PHPデプロイ/FMサーバ管理者必見、カスタマイズすべき設定
第9回 PHPのインストール~FileMakerデプロイ
第8回 FileMaker Webアプリのインストール
第7回 FileMakerといえば帳票! さくっとデザインしてWebからPDFダウンロード
第6回 FileMakerならではのメリットを出すには - スクリプトを活用せよ
第5回 基礎編はこれで終わり! - 詳細/変更/削除処理
第4回 いよいよUIの実装へ! 最初は登録/一覧画面
第3回 FileMakerのCRUDはこれで完璧! - FMEdit()~FMDelete()まで
第2回 レコードの登録 - 各種関数・メソッドの紹介
第1回 まずは2大ライブラリを比較

もっと見る



転職ノウハウ

あなたが本領発揮できる仕事を診断
あなたの仕事適性診断

シゴト性格・弱点が20の質問でサクッと分かる!

「仕事辞めたい……」その理由は?
「仕事辞めたい……」その理由は?

71%の人が仕事を辞めたいと思った経験あり。その理由と対処法は?

3年後の年収どうなる? 年収予報
3年後の年収どうなる? 年収予報

今の年収は適正? 3年後は? あなたの年収をデータに基づき予報します。

激務な職場を辞めたいが、美女が邪魔して辞められない
激務な職場を辞めたいが、美女が邪魔して辞められない

美人上司と可愛い過ぎる後輩に挟まれるエンジニアの悩み

人気記事

一覧

イチオシ記事

新着記事

若槻千夏、先輩タレントに意地悪された過去暴露「今でも活躍している方」
[09:19 9/26] エンタメ
ソニーの新たな旗艦拠点 - 銀座ショールーム&ストアのオープニング舞台裏
[09:05 9/26] スマホとデジタル家電
SNS使いが上手い!要注目の食品・飲料系Webキャンペーン事例5選【2016年9月】
[09:01 9/26] 企業IT
【連載特別企画】ゼロから始める多要素認証 第1回 現在、認証基盤に何が求められているのか? YubiKeyが切り拓く近未来の認証環境
[09:00 9/26] 企業IT
【特別企画】著名な車メーカーのブランドをも傾ける!? スマートカーのハッキング対策の勘所とは - ペンタセキュリティ
[08:30 9/26] 企業IT

求人情報