CakePHPクッキング

無限スクロールをさせる

開発環境:CakePHP2.5.1

TwitterやFacebookのタイムラインを見ていて、ページの下にいくと次から次に過去の記事が表示されていきます。
Googleなどの検索結果のような津城のページ送りとは違う、あのような自動のページ送りの実装方法を紹介します。

インフィニティスクロールを使う

今回はWordpressのプラグインにも使われるインフィニティスクロールを使います。
まず最初はGithub上に公開されているソースをダウンロードします。
https://github.com/paulirish/infinite-scroll

ファイルを設置

ダウンロードしたファイルを解凍して、中にある jquery.infinitescroll.min.js を webroot/js/ 配下に、ajax-loader.gif を /webroot/img/ 配下に設置します。

コントローラーでページネーション

まずはコントローラー側で通常のページネーションの仕組みを作ります。

<?php
public function scroll() {
    $this->Paginator->settings = $this->paginate;
    $samples = $this->Paginator->paginate('Sample');
    $this->set(compact('samples'));
}

無限スクロールのJS

続いて、無限スクロールの動きをさせるJSを別ファイルで用意しておきます。
webroot/js/scroll.js というファイル名で下記の内容を書きます。

$(function() {
    $("#contents").infinitescroll({
        navSelector : '.navigation',
        nextSelector : '.navigation a',
        itemSelector : '.content',
        loading : {
            finishedMsg : '以上です',
            img : '/img/ajax-loader.gif'
        }
    });
});

無限スクロールのビュー

最後にビューを設定します。

<?php echo $this->Html->script('jquery.infinitescroll.min', array('inline' => false)); ?>
<?php echo $this->Html->script('scroll', array('inline' => false)); ?>
<div id="contents">
    <?php foreach($samples as $value): ?>
    <div class="content">
        <?php echo $value['Sample']['name']; ?>
    </div>
    <?php endforeach; ?>

    <div class="navigation">
        <?php echo $this->Paginator->next('次のページ'); ?>
    </div>
</div>

これで、ページをスクロールしていくと、次から次にデータを読み込んでくれます。

WordPressとCakePHPの共存

サイトを作るのに便利なWordPress。プラグインも数多く用意されて

サイトマップの作成方法

Googleのウェブマスターツールに渡すためのサイトマップの作成方法で

INSERTしたIDを取得する

データを保存した後にINSERTされたデータのIDを使って何かの処理を

ファイルの存在確認やフォルダー内のファイル一覧取得

特定のファイルの存在を確認したい場合や特定のフォルダー内にあるファイル

リンクの最後に常にスラッシュをつける方法

URLの最後に常にスラッシュをつけるかつけないかを統一する方法は、UR

countやsumを使う時のフィールド名を指定する

CakePHPでcountやsumなどを使う場合、ちょっとした工夫が必

Formの便利な使い方

問い合わせフォームや会員機能など、WEBサイトを作る際に必ず必要になる

ヘルパーをオーバーライドする

CakePHPで便利な機能が詰まったヘルパーですが、時々もう少しこうだ

特定の時だけSQLの条件を追加するならSet::mergeを使う

SQLの条件を追加したい時に使うのがarray_mergeなどですが、

ページネーションではDISTINCTではなく、GROUP BYを使う

重複したデータを省く時に使うDISTINCTですが、ページ送りで使う時

Model内で別のModelを呼び出す

モデル内で別のモデルを使いたいケースがあった場合、次のようにすることで

CakePHPでGoogleAnalyticsAPIを使う

CakePHPでGoogleAnalyticsを使う方法について見てい

独自のfindを定義するfindMethods

findをより便利に、よりスッキリ書くのに、findMethodsを使

TCPDFを使ってCakePHPでPDFを作成

CakePHPでPDFを作成するには幾つかの方法がありますが、今回はT

JavaScriptをコードの最下部に配置

SEOの観点からJavaScriptのコードは一番下に記述したいところ

無限スクロールをさせる

TwitterやFacebookのタイムラインを見ていて、ページの下に

PHPExcelの導入

ExcelにDBのデータを表示して一覧を作ったり、請求書などのフォーマ

Warning: SplFileInfo::openFile〜の警告が表示されたら

ShellとWEBの両方で同一のModelを呼び出す時に「Warnin

連結されていないデータを抽出

通常、テーブルを連結してデータを取得するには、アソシエーションを利用し

データを取得する

データを取得したい時に少し変わった条件で取得したい場合があります。

PAGE TOP ↑