CakePHP

CakePHPで楽天APIを叩いてみる(3)コントローラー編

2019/03/04

ではCakePHPで楽天APIの3回目、コントローラー編です。
コントローラーでモデル及びコンポーネントを呼び出し、結果を取得するという流れです。
ページ送りに関する設定も行います。


ではコントローラー内容です。

app/controllers/products_controller.php

では、解説。
3、4行目で、前回設置作成した、Pagerライブラリとインクルードパスを呼び出します。

21行目から、productlist アクションを作っていきます。
23?31行目で、モデルに設定したソート順を取得します。
34行目のAppModelに設定している内容は以下となりますが、もちろんこの内容は、productモデルに書いても問題ありません。

36?155行で、GETで取得する各オプションのサニタイズと置き換えを行います。
前回書いたURLのサンプルを見れば分かりますが、/keyword:きーわーど/sort:1/ のようなURLとするので、
基本的に $this->passedArgs で取得したものに対して行えば問題無いと思います。
デフォルトの表示件数である SEARCH_RESULT_LIST_LIMIT には、app.php にて「9」件と設定しています。

160?181行目で、取得したオプション(条件)を配列にまとめます。
ソート順指定が2(itemPrice)の場合は、「+itemPrice」とするために、「+」を追加します。

186行目で、オプションを引数にコンポーネント化済APIを作動させます。
返り値の $item_ret を extract で分解し、必要な変数/配列をビューにセット。

202行目からはページ送り用の設定です。
ページ番号をクリックした際に送られるURLのpathパラメータを設定。
パラメータには genre_id、keyword、sort、get_list_limitを指定します。
218行目からは、取得するアイテム数がやたらとある場合に備えて、最大ページ数を100ページとする処理を行います。

230行目から、PEAR Pager用設定を行います。
以下の様な内容です。
totalItems:対象となるアイテム数(itemDataが未指定の場合に使用)
perPage:1ページごとに表示されるアイテム数
urlVar:ページ番号を示すためのクエリ変数名(デフォルトは「pageID」)
path:ページへの絶対パス(ページ名は除く)
append:TRUEならpageIDはクエリ文字列としてURLに追加。FALSEならfileNameに従ってURLに埋め込まれる(デフォルトは「TRUE」)
fileName:ページ名。appendがTRUEなら"%d"
currentPage:初期ページ番号
mode:動作モードを指定。ジャンプ型(Jumping)又はスライド型(Sliding)
delta:現在のページの前後に表示するページ番号の数
separator:ページ番号を分けるための区切り文字。カンマやハイフンの他にタグも可能
spacesBeforeSeparator:区切り文字の前のスペース数
spacesAfterSeparator:区切り文字の後のスペース数
prevImg:前のページのリンクである「<<」の代替文字。タグも可能
nextImg:のページのリンクである「&lgt;>」の代替文字。タグも可能
curPageLinkClassName:現在のページのリンクのスタイルのためのCSSクラス

248行目でインスタンス化、249行目の getLinksメソッドで「連想配列として戻る/次/最初/最後のリンクとページリンク」を取得し、ビューにセットします。

255行目以降は、HTMLタイトルの設定処理です。SEOに考慮して作成しましたが、成果の方は疑わしいので、無視していただいて構いません。

駆け足でしたが、コントローラーは以上です。
ページ送り処理にちょっと頭を捻りましたが、その他は目新しい処理もなく、CakePHPerでしたら一目瞭然だと思います。

[tgAmazonItemLookup asin="4798033146" related="1"]

-CakePHP
-, ,