4

カスタム配列のビューでページ付けしたい。私のコントローラーとビューコードを以下に示します。

コントローラーコード:

public function admin_detail(){
        $totalByDate = $this->Pbscodemetric->find('all',array('fields'=>array('created')));
        $createdDate = Set::extract('/Pbscodemetric/created', $totalByDate);
        $uniqueCreatedDate = array_unique($createdDate);
        $finalArray = array();
        foreach($uniqueCreatedDate as $created){
            $downloadsArr = $this->Pbscodemetric->find('all',array('fields'=>array('downloads_iphone','downloads_ipad','downloads_android'),'conditions'=>array('created'=>$created)));
            $download_iphone = array_sum(Set::extract('/Pbscodemetric/downloads_iphone',$downloadsArr));
            $download_ipad = array_sum(Set::extract('/Pbscodemetric/downloads_ipad',$downloadsArr));
            $downloads_android = array_sum(Set::extract('/Pbscodemetric/downloads_android',$downloadsArr));
            $finalArray[$created] = array(
                'downloads_iphone' => $download_iphone,
                'downloads_ipad' => $download_ipad,
                'downloads_android' => $downloads_android
            );
        }
        $this->set('finalArray',$finalArray);
    }

コードを表示:

<div class="pbscodemetrics index">
    <h2><?php echo __('Pbscodemetrics List Detail'); ?></h2>
    <table cellpadding="0" cellspacing="0">
        <tr>
            <th>Date</th>
            <th>iPhone</th>
            <th>iPad</th>
            <th>Android</th>    
        </tr>
        <?php 
        foreach($finalArray as $key => $final){?>
            <tr> 
                <td><?php echo $key;?></td>
                <td><?php echo $final['downloads_iphone'];?></td>
                <td><?php echo $final['downloads_ipad'];?></td>
                <td><?php echo $final['downloads_android'];?></td>
            </tr>
            <?php }?>
    </table>
</div>
<div class="actions">
    <?php echo $this->element('nav');?>
</div>

次に、ページネーションを設定します。私は、CakePHP のデフォルトのページネーションでモデル名が必要であることを知っています。しかし、上記のコードでそれを行うにはどうすればよいですか?

誰でも私を助けてくれませんか..

4

1 に答える 1

2

カスタム ページネーションを実装できます。クックブックのカスタム クエリ ページネーションを参照してください。ただし、そこで行っていることは、グループ化と SQL 関数を使用して実行できるように見えます。そうすればSUM、組み込みのページネーションを簡単に使用できます。例:

$alias = $this->Pbscodemetric->alias;

$this->Pbscodemetric->virtualFields = array
(
    'downloads_iphone_sum' => sprintf('SUM(`%s.downloads_iphone`)', $alias),
    'downloads_ipad_sum' => sprintf('SUM(`%s.downloads_ipad`)', $alias),
    'downloads_android_sum' => sprintf('SUM(`%s.downloads_android`)', $alias)
);

$this->paginate = array
(
    'fields' => array
    (
        'downloads_iphone_sum',
        'downloads_ipad_sum',
        'downloads_android_sum',
        'created'
    ),
    'group' => 'created',
    'order' => array
    (
        'created' => 'desc'
    ),
    'limit' => 10
);

$data = $this->paginate($alias);

これにより、列ごとにグループ化された合計、および列を含む Paginator ヘルパーと互換性のある結果が得られます。デフォルトの CakePHP スタイルで結果を取得するために、仮想フィールドを使用します。つまり、次のようにアクセスできます。downloads_iphonedownloads_ipaddownloads_androidcreated

    <?php foreach($results as $result): ?>
        <tr> 
            <td><?php echo $result['Pbscodemetric']['created'];?></td>
            <td><?php echo $result['Pbscodemetric']['downloads_iphone_sum'];?></td>
            <td><?php echo $result['Pbscodemetric']['downloads_ipad_sum'];?></td>
            <td><?php echo $result['Pbscodemetric']['downloads_android_sum'];?></td>
        </tr>
    <?php endforeach; ?>
于 2012-11-05T19:33:44.293 に答える