課題3(アルゴリズム:選択課題)
課題の3つ目は選択課題です。 現在課題で作成しているECサイトについてどんな商品を取り扱うECサイトにするかを設定し、その商品に適した機能を3種類のうちから一つ選び実装しましょう
課題1 商品の並び替え機能(難易度:中)
要件
- 商品一覧画面の右上に「並べ替え」のプルダウンメニューを作成する。
- プルダウンの項目は「新着順」、「価格の安い順」、「価格の高い順」とする
- プルダウンのデフォルトは「新着順」とする
- プルダウンで並び替え順を選択し、「並べ替え」ボタンをクリックすると並び替えが行われる
- 「新着順」は商品の登録日が新しい順とする
ヒント
- ORDER BY の使い方がポイントです。
- プルダウンの隣にsubmitボタンを用意するのが最も簡単な方法です。
- プルダウン変更時に自動的にsubmitされるようにするためにはjavascriptでイベントリスナーを活用する必要があります。(タグ内の属性値にjsを埋め込むのは避け、jsファイル側でイベントリスナーの設定を行いましょう。)
- 検索条件の変更にはgetを利用しましょう。表示内容の変更や指定を行うためのリクエストを送るときにはget、情報の登録や変更を行う際にはpostなどを用います。
3-2 ページネーション(難易度:高)
要件
- 商品8件ごとにページネーションを行う
- 「xx件中 xx - xx件目の商品」と商品の総件数と現在表示を出力する
- ページ番号のリンクを作成し、クリックするとそのページに遷移する
- 現在アクセスしているページのページ番号のリンクは色を変える
ヒント
- SQLのLIMIT句 を利用して8件ずつ商品を取得します。検索で詳しい使い方を調べてみましょう。例えば 「LIMIT 16, 8」ならば、「17件目から8件取得」することになります。
- 総ページ数は COUNT(*) を利用して全ての商品数を求めれば 「総ページ数 = 全ての商品数 / 1ページあたりの商品数」で求めることができます。ただし、端数の処理に気をつけましょう。
- 現在のページ数は get を利用して指定することができます。例えば、 top.php?page=3 というurlへのリンクを用意すれば、$_GET['page'] からページ数を取得できます。
- 現在のページ数をもとにLIMIT句を組み立てることで、ページ数に応じた商品を表示させることができます。例えば2ページ目では「LIMIT 8, 8」, 3ページ目では「LIMIT 16, 8」になるように工夫してみましょう。
- 商品取得関数のオプション引数(デフォルト値の設定された引数)としてLIMIT句の設定値を渡すことができると非常に便利です。挑戦してみましょう。
- リンクの表示は総ページ数と現在のページ数が分かれば繰り返しと条件分岐の組み合わせで簡単に実装できます。
- 余裕があれば「前へ」「次へ」のリンクも追加してみましょう。
3-3 ランキング機能(難易度:低)
要件
- 商品一覧ページ下部に「人気ランキング」を表示する
- 「人気ランキング」には、購入数の多い順に1位から3位の商品を表示させる
ヒント
- SUMを利用して商品ごとの全てのユーザーの購入数を求めることができます。
- ORDER BY 句でユーザーの購入数を基準に並べ替えることができます。
- LIMIT 句を利用して利用して上位x件のデータを取得できます。