【カラーミーショップ】グループのリストを指定して表示する

お役に立ったらポチッとお願いします

数年前に実装されたグループ機能は複数のカテゴリに登録できるのでとても便利。それまでは各商品ごとに1カテゴリしか登録できなかったので、実装のお知らせがきたときには歓喜したものでした。ただ人間は欲が出るもので、ああしたいこうしたいはつきないんですよねー。

ということでやってみました。

スポンサーリンク

グループの範囲を指定して表示したい

理想はこんな感じです。

  • 見出し1(親グループ)
    • 子グループ1
    • 子グループ2
    • 子グループ3
  • 見出し2(親グループ)
    • 子グループ4
    • 子グループ5
    • 子グループ6

カラーミー提供の独自タグだとどうなっているかというと、

で呼び出すので、素直に書くとズラーっと表示されるだけ。
さらに本当は見出しを親グループにして子グループをリスト表示したかったんだけど、どうも親グループのリストしか取得できないらしいということで「親グループのリストを範囲を指定して呼び出したい」ということになりました。

  • 見出し1
    • グループ1
    • グループ2
    • グループ3
  • 見出し2
    • グループ4
    • グループ5
    • グループ6

見出しは手書きにして、その中身を呼び出すイメージです。

検索→コピペ→検証

さて…目的は決まったものの、phpもsmartyもまったくわからないのでどうしていいのやらかいもく見当がつきません。とりあえず「カラーミー グループ 指定して表示」などで検索してみますが…なかなかヒットせず。そもそも「こういうふうに表示したい(けど出来なかった)」というブログすらヒットしない。

もしかして誰もこんなこと考えないの?無理な話なの?と諦めかけたとき、ようやくヒントになりそうな記事を発見しました。

okomeTAN | [カラーミーショップ]小グループの一覧をぶった切って表示する

これだ!やりたいこともまったく一緒だ!そうと分かればさっそく検証。

まず、記事中の{section name=group01 start=2 loop=3}を素直に書いてみます。

【予想】グループの3番目から3個切り出して表示
【結果】

メンズ。(真顔感)

メンズ。(真顔感)

??????????
メンズ。wwwww なにこれwwwwww
いや笑ってる場合じゃありません。ちなみにメンズはグループリストの10番目。しかもひとつしか表示されてない…。

予想はハズレ。さっき書いた記事を冷静に読み返してみます。

loopの値は注意が必要で、
0から数えていくつ目まで出すかという数なので
startが2の時にloopが3だったら1個しか項目が出ない。

ん?start=2 loop=3って3番目から3回ループするってことじゃないの????

というわけでさっきの記事中に載っていたリンクを見てみます。

Smarty、繰り返し処理の書き方(1):section|マコトのおもちゃ箱 ~ぼへぼへ自営業者の技術メモ~

後半の検証記事がなんとなくそれっぽい…かも?

こういうときは頭で理解しようとするより実際にコードを書いてみたほうがピンとくることが多いので、サンプルコードを書いてみる。(記事中のコードをコピペ)

結果は記事中のものと同じ。

ふむ(…しばし考えてみる…)なるほど分からん!どういうこっちゃ。
とりあえずstart=0 loop=10にしてみる。

【予想】これなら一番最初から10個目まで出るかな…
【結果】…おおお!?変わった!?

メンズメンズメンズメンズ…

メンズメンズメンズメンズ…

いやちょっと待ってなんでそんなにメンズ推しなのよ…!ただメンズの数が10個なので、loop=10は効いてる…のか…?

さらに数字を変えて実験。start=10 loop=15…こんどはメンズが5個並びました。んんんんんん?やっぱりなんか変。そこでハタと気づくのです。

<{$group[num].name}>
おまえかーーーーーーーー!!!!!

そもそもこれはカラーミーで提供されている<{section name=num loop=$group}>に対する「グループ名を表示せよ」のコードじゃないか!しかもsectionの名前をとりあえずgroup1にしたのにどこにも指定してなかったよ!

というわけで<{$group[num].name}>を<{$group[group01].name}>に変えてみました。

【結果】

やった!

やった!

メンズ地獄から抜けられた!ようやく落ち着いてstartとloopについて考えることができます。

わからないなりに考えてみる

<{$group[group01].name}>に変えて、start=10,loop=15にしたところ、グループリストの10番目から5個表示されました。最初の予想だとloopで指定した数だけ表示されるはずだったんだけど、この5個ってどこからきたんだろう…?そしてまたここで気づきました。

あくまで繰り返すのは「loop」で指定した配列の中なのですね。

こ れ だ !
loopというのは「loopで指定した数だけ繰り返す」じゃなくて「範囲を指定する」だったのか!とんだ勘違いだった!

つまり、リストがいくつあったとしても「start=▲で何番目から表示するかを指定→loop=★でグループの何番目までを表示するか指定→結果:▲番目から★個目を表示」ということになるのかー!

するとさっきの

start=2,loop=3で1個だけ表示される

というのが納得なわけです。(loopで範囲を0~3に指定、startで3番目から表示という指示になる)
yeeeeeeeeeees!理解!この瞬間が楽しいのだよふはははは!

そして実装にチャレンジ

よしよし、これをいくつかかけば理想通りの表示ができるわね…とほくそ笑みながらコードを書いてみます。

【結果】

グループリスト表示実験4

まだ整理していないからグループの並びはめちゃくちゃですが、とりあえずこれで最初の目的が達成できました!ひゃっほう!

まとめ

グダグダ長くなってしまったので、ポイントと思われる箇所をさっくりまとめ。

name:適当な名前をつける
start:どこから表示したいか(0から始まるので注意)
loop:グループ全体に対してどこまでかを指定

各グループのURL。[]の中にsection nameで決めた名前を入れます。

各グループ名。同じく[]の中はsection nameで決めたものを。

ここまで理解して初めて、やっとカラーミーのテンプレートで使われている<{section name=num loop=$group}>の意味がうっすらわかったような気がします。

それにしても基礎がないからここまで理解するのに何日かかったことか…。やっぱりカラーミーを使いこなすにはsmartyを理解しなければ、ということはわかるんだけど、わたしの頭では確実に無理なのでこれからもその場しのぎ&付け焼き刃でいこうと思います。

スポンサーリンク

お役に立ったらポチッとお願いします

おおつかをフォローしてみる

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です