CakePHPでランキング機能の作り方 - PHPプロ!Q&A掲示板

4928

  • 0P

CakePHPでランキング機能の作り方

質問日時 / 2018年2月26日 02:29    回答数 / 0件

Questioner:  masa2058  このエントリーをはてなブックマークに追加 

キーワード / CakePHP3.5    ランキング   

現在、CakePHP3.5でオリジナルアプリを制作しているのですが、ランキング機能の実装方法が
わかりません。
ユーザーがコメントした合計順位で
食べ物ランキングの1~5位まで表示させたいのですがどのようにやればよいでしょうか?
コメント投稿ページにはレート入力フィールド追加してあります。
開発環境はcloud9です。

  1. ranking.index
  2.  
  3. <h1>北関東グルメ</h1>
  4. <hr>
  5. <ul class="side-nav">
  6.         <!--home画面-->
  7.         <?= $this->Form->create($foods['url' => ['action' => 'add']]);?>
  8.     <fieldset>
  9.         <?= $this->Form->input('find')?>
  10.         <?= $this->Form->button('Submit') ?>
  11.         <?= $this->Form->end() ?>
  12.     </fieldset>
  13.     <div>
  14.         <li class="heading"><?= $this->Html->link(__('ホーム')['controller'=>'Ranking''action'=>'index']) ?></li>
  15.         <li class="heading"><?= $this->Html->link(__('北関東グルメとは')['controller' => 'information''action' =>'index']) ?></li>
  16.         <li class="heading"><?= $this->Html->link(__('グルメ一覧')['controller' => 'Foods''action' => 'index'])?></li>
  17.         <li class="heading"><?= $this->Html->link(__('観光スポット一覧')['controller' => 'Spots''action' => 'index']) ?></li>
  18.         </div>
  19.     </ul>
  20.     
  21.     <h1>県別ランキング</h1>
  22.     <hr>
  23.     <!--ranking画面-->
  24.    <?php foreach ($foods as $food)?>
  25.         <tr>
  26.             <h1><td><?= h($food['prefecture']) ?></td></h1>
  27.           <h3><td><?= h($food['name']) ?></td></h3>
  28.             <tr>
  29.             <?=($this->Html->image($food->imgURL,
  30.             array('width'=>'500','height'=>'266'['alt' => '北関東'])));?>
  31.             <td><?= h($food['title']) ?></td>
  32.             <td><?=h($food['price'])?></td>
  33.         </tr>
  34.    <?php endforeach?>

  1. rankingcontroller.php
  2.  
  3.     <?php
  4. namespace App\Controller;
  5.  
  6. use App\Controller\AppController;
  7. use Cake\ORM\TableRegistry;
  8. use Cake\Datasource\ConnectionManager;
  9.  
  10.  
  11. class RankingController extends AppController
  12. {  
  13.    
  14.    
  15.     public function initialize()
  16.     { 
  17.       $this->FoodTableRegistry::get('foods');
  18.     }
  19.     
  20.    public function index()
  21.    {
  22.        //件数み取得
  23.        $foods=$this->Food->find()->limit(20)->all();
  24.        $this->log($foods,"debug");
  25.        $this->set(compact('foods',$foods));
  26.     }
  27.    
  28. }

  1. comment.index
  2. <?php
  3. /**
  4.  * @var \App\View\AppView $this
  5.  * @var \App\Model\Entity\Comment[]|\Cake\Collection\CollectionInterface $comments
  6.  */
  7. ?>
  8. <nav class="large-3 medium-4 columns" id="actions-sidebar">
  9.     <ul class="side-nav">
  10.         <li class="heading"><?= __('Actions') ?></li>
  11.         <li><?= $this->Html->link(__('New Comment')['action' => 'add']) ?></li>
  12.         <li><?= $this->Html->link(__('List Foods')['controller' => 'Foods''action' => 'index']) ?></li>
  13.         <li><?= $this->Html->link(__('New Food')['controller' => 'Foods''action' => 'add']) ?></li>
  14.     </ul>
  15. </nav>
  16. <div class="comments index large-9 medium-8 columns content">
  17.     <h3><?= __('Comments') ?></h3>
  18.     <table cellpadding="0" cellspacing="0">
  19.         <thead>
  20.             <tr>
  21.                 <th scope="col"><?= $this->Paginator->sort('id') ?></th>
  22.                 <th scope="col"><?= $this->Paginator->sort('food_id') ?></th>
  23.                 <th scope="col"><?= $this->Paginator->sort('commenter') ?></th>
  24.                 <th scope="col"><?= $this->Paginator->sort('title') ?></th>
  25.                 <th scope="col"><?= $this->Paginator->sort('score') ?></th>
  26.                 <th scope="col"><?= $this->Paginator->sort('created') ?></th>
  27.                 <th scope="col"><?= $this->Paginator->sort('modified') ?></th>
  28.                 <th scope="col" class="actions"><?= __('Actions') ?></th>
  29.             </tr>
  30.         </thead>
  31.         <tbody>
  32.             <?php foreach ($comments as $comment)?>
  33.             <tr>
  34.                 <td><?= $this->Number->format($comment->id) ?></td>
  35.                 <td><?= $comment->has('food') ? $this->Html->link($comment->food->name['controller' => 'Foods''action' => 'view'$comment->food->id]) : '' ?></td>
  36.                 <td><?= h($comment->commenter) ?></td>
  37.                 <td><?= h($comment->title) ?></td>
  38.                 <td><?= $this->Number->format($comment->score) ?></td>
  39.                 <td><?= h($comment->created) ?></td>
  40.                 <td><?= h($comment->modified) ?></td>
  41.                 <td class="actions">
  42.                     <?= $this->Html->link(__('View')['action' => 'view'$comment->id]) ?>
  43.                     <?= $this->Html->link(__('Edit')['action' => 'edit'$comment->id]) ?>
  44.                     <?= $this->Form->postLink(__('Delete')['action' => 'delete'$comment->id]['confirm' => __('Are you sure you want to delete # {0}?'$comment->id)]) ?>
  45.                 </td>
  46.             </tr>
  47.             <?php endforeach?>
  48.         </tbody>
  49.     </table>
  50.     <div class="paginator">
  51.         <ul class="pagination">
  52.             <?= $this->Paginator->first('<< ' . __('first')) ?>
  53.             <?= $this->Paginator->prev('' . __('previous')) ?>
  54.             <?= $this->Paginator->numbers() ?>
  55.             <?= $this->Paginator->next(__('next') . ' >') ?>
  56.             <?= $this->Paginator->last(__('last') . ' >>') ?>
  57.         </ul>
  58.         <p><?= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?></p>
  59.     </div>
  60. </div>

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



この質問にはまだ意見が寄せられていません。

<<質問一覧へ



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)