バージョン選択

フォーラム

メニュー

オンライン状況

42 人のユーザが現在オンラインです。 (31 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 41
tattsu もっと...

サイト内検索

質問 > フロント機能 > 【再度】メーカー検索結果へ別のページからリンクさせたい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
fukap
投稿日時: 2012/12/12 8:56
対応状況: −−−
仙人
登録日: 2009/7/7
居住地: 滋賀県
投稿: 907
Re: 【再度】メーカー検索結果へ別のページからリンクさせたい
引用:
「関連商品のカテゴリID番号」を取りたいのですが、
この部分が悪いようで、行き詰まりました。

関連商品情報は、data/class/pages/products/LC_Page_Products_Detail.php の
lfPreGetRecommendProducts というメソッドや、さらに遡ると
data/class/SC_Product.php の getListByProductIds や lists あたりで取得しているようです。

配列の中身を見る限りでは、category_id は含まれていないようなので、
関連商品情報を取得するロジックを修正する必要がありますね。

関連商品の product_id から category_id を取得して、$arrRecommend に格納すればよいのですが、
商品カテゴリ情報は、dtb_product_categories に入っているので、
product_id をキーにして、その商品が属する category_id を取得する処理が必要です。
tamahime
投稿日時: 2012/12/13 0:28
対応状況: −−−
常連
登録日: 2012/10/15
居住地:
投稿: 44
Re: 【再度】メーカー検索結果へ別のページからリンクさせたい
fukap様!

詳しく調べていただいたようで、
ほんとうにありがとうございます!!!

朝拝読し、道筋が見えた!と感激したのですが、
ほぼ1日かけた今、まだ途方に暮れた状態です。。。

いただいたご意見を参考にしながら
関係しそうな箇所を必死で解読しました。
おっしゃっていただいた意味は、
たぶん・・・、理解できたと思います。

LC_Page_Products_Detail.phpの、

$arrRecommendData = $objQuery->select('recommend_product_id, comment', 'dtb_recommend_products as t1 left join dtb_products as t2 on t1.recommend_product_id = t2.product_id', 't1.product_id = ? and t2.del_flg = 0 and t2.status = 1', array($product_id));

こんな感じでtb_product_categoriesとdtb_recommend_productsをつないでデータ持ってこれないかとか、

SC_Product.phpのlistsにcategory_idを加えようとしてみたり、

いろいろ試してみましたが、ダメです。


藁をもつかむ気持ちで再度ご質問させていただきます。
的外れでしたらご失笑ください。

//関連商品情報表示
$this->arrRecommend = $this->lfPreGetRecommendProducts($product_id);
の下に、
$this->arrRecommend = $this->IfPreProductsGetCategoryId($product_id);

みたいなのを並べて、

/* 登録済み関連商品の読み込み */
function lfPreGetRecommendProducts($product_id) {
に似た、

/* カテゴリIDの読み込み */
function IfPreProductsGetCategoryId($product_id) {
...
}

というのを書き加える、
などというやり方というのは間違っていますでしょうか?

重ね重ね恐縮ですが、もう少し、
ご示唆いただけるとありがたいです。
fukap
投稿日時: 2012/12/13 8:48
対応状況: −−−
仙人
登録日: 2009/7/7
居住地: 滋賀県
投稿: 907
Re: 【再度】メーカー検索結果へ別のページからリンクさせたい
引用:
//関連商品情報表示
$this->arrRecommend = $this->lfPreGetRecommendProducts($product_id);
の下に、
$this->arrRecommend = $this->IfPreProductsGetCategoryId($product_id);

みたいなのを並べて、

/* 登録済み関連商品の読み込み */
function lfPreGetRecommendProducts($product_id) {
に似た、

/* カテゴリIDの読み込み */
function IfPreProductsGetCategoryId($product_id) {
...
}

というのを書き加える、
などというやり方というのは間違っていますでしょうか?

それも1つの方法だと思いますが、IfPreProductsGetCategoryId のメソッドで何をやるかが問題ですね。
ただこの記述だと、IfPreProductsGetCategoryId の返り値で、$this->arrRecommend が
上書きされると思いますので、その点は注意が必要だと思います。

いずれにせよ 関連商品の product_id をキーにして、dtb_product_categories から category_id を取ってくる処理が必要ですね。
tamahime
投稿日時: 2012/12/13 8:59
対応状況: −−−
常連
登録日: 2012/10/15
居住地:
投稿: 44
Re: 【再度】メーカー検索結果へ別のページからリンクさせたい
おはようございます。
ほんとうに心より感謝です!

>この記述だと、IfPreProductsGetCategoryId の返り値で、$this->arrRecommend が
上書きされる

なるほど、そうなんですね。。。もう1日、考えて見ます。

すみません、もう1点、

>関連商品の product_id をキーにして、dtb_product_categories から category_id を取ってくる処理が必要ですね。

その処理のために、以下を試そうとしたのですが・・・、
このやり方自体は合っていそうでしょうか?
間違っていそうでしょうか?

引用:

$arrRecommendData = $objQuery->select('recommend_product_id, category_id', 'dtb_product_categories as t1 left join dtb_recommend_products as t2 on t1.product_id = t2.recommend_product_id', 't1.product_id = ? and t2.states = 0 and t2.creater_id = 2(この部分の中身がまだ意味よく分かっていませんので勉強します・・・)', array($product_id));


親切に甘え続けて恐縮ですが、
コメントいただければ幸いです。
fukap
投稿日時: 2012/12/13 9:43
対応状況: −−−
仙人
登録日: 2009/7/7
居住地: 滋賀県
投稿: 907
Re: 【再度】メーカー検索結果へ別のページからリンクさせたい
登録済み関連商品の読み込みを行っている lfPreGetRecommendProducts メソッド内の、
$arrRecommendData を取得しているコードを、以下のように書き換えてみたがどうか、というご質問でしょうか。

引用:
$arrRecommendData = $objQuery->select('recommend_product_id, category_id', 'dtb_product_categories as t1 left join dtb_recommend_products as t2 on t1.product_id = t2.recommend_product_id', 't1.product_id = ? and t2.states = 0 and t2.creater_id = 2(この部分の中身がまだ意味よく分かっていませんので勉強します・・・)', array($product_id));


であれば、方向性としては良さそうに思います。
ただ、以下の点が気になります。

・states じゃなくて status ではないのか。
・creater_id じゃなくて creator_id ではないのか。
・t2.creator_id は条件句には不要ではないのか。
・dtb_recommend_products に dtb_product_categories を LEFT JOIN した方がいいような。
・複数カテゴリの時どうするか。
tamahime
投稿日時: 2012/12/19 22:44
対応状況: −−−
常連
登録日: 2012/10/15
居住地:
投稿: 44
Re: 【再度】メーカー検索結果へ別のページからリンクさせたい
fukap様

お返事が遅くなり申し訳ありません。

ご親切にもブログでcategory_id取得の方法、複数カテゴリの場合の表示の
アイデアをご紹介いただき、本当に心から感謝しております。

http://ec-cube.nakweb.com/blog/1869.html

ご紹介いただきました修正点を入れてみましたところ、
確かにfukap様のブログにある通りの表示になりました!

まずは、「商品詳細ページの中で関連商品のカテゴリID番号を取りたい」
と申しておりました件、まだまだ一人では思いつきもできない方法を
教えていただき、とても勉強になりましたm(__)m


これを元に、もう1点、自分のサイトに合わせた修正をしたいと
現在さらに試行錯誤しております。例えばですが、

  カテゴリ:
  食品(100)>お菓子(99)>アイス(92)
  雑貨(80)>おなべ(76)
  用途から選ぶ(10)>組み合わせ材料を選ぶ(5)

  ※()内はdtb_categoryのrankです

当サイトではいちばん下に表示されるカテゴリが上記のようなものになっており、
この最後の「組み合わせ材料を選ぶ」一か所のみ表示してリンクさせるようにしたいのです。

カテゴリを作成するときに、このリンクさせたいカテゴリのrankが、
いちばん小さい1〜10までとなるようにしています。
(多くなっても1〜xxまでと一番下に固まるようにしています)


失敗?
fukap様のカテゴリ表示をそのままに、その下に以下のような記述を入れれば、
希望の検索結果ページに飛びました。ただ、「カテゴリ表示」自体は不要なのです。。。
引用:

<a href="<!--{$smarty.const.ROOT_URLPATH}-->products/list.php?mode=search&category_id=<!--{$i2.category_id|u}-->&maker_id=<!--{$arrProduct.maker_id|h}-->"><img src="...jpg" alt="組み合わせ材料を探す" (一部省略)... /></a>

失敗?
文法的にはおかしいのかなと思いつつ、foreachでループを1回だけ回す、みたいな処理を
見よう見まねでやってみたりもしたのですが、うまくいきませんでした。

失敗?
fukapさんのforeach文を外して自分でarrRecommendCatを使ってなんとかしようともしましたが、
今度はrankの数字が一番小さいcategory_idを使う、という条件を付けることができませんでした。。。


重ね重ねのご質問で本当に恐縮ですが、何かヒントをいただけませんでしょうか。
もう少しだけ、お付き合いいただけたら幸いです。
どうぞよろしくお願い申し上げます。
fukap
投稿日時: 2012/12/20 8:43
対応状況: −−−
仙人
登録日: 2009/7/7
居住地: 滋賀県
投稿: 907
Re: 【再度】メーカー検索結果へ別のページからリンクさせたい
引用:
  カテゴリ:
  食品(100)>お菓子(99)>アイス(92)
  雑貨(80)>おなべ(76)
  用途から選ぶ(10)>組み合わせ材料を選ぶ(5)

上記のような関連カテゴリの場合に、「アイス」「おなべ」「組み合わせ材料を選ぶ」など、ツリーの一番下層だけにリンクを張りたいということでしょうか。
それとも、「組み合わせ材料を選ぶ」一箇所のみ表示してリンクを張りたいということでしょうか。
文面を見るかぎり後者のように読めますが、複数カテゴリの場合には上記で言う「アイス」「おなべ」は無視してしまってよいということでしょうか。

いずれにせよ、PHP側でもSmartyテンプレート側でも、どちらでもできそうな気がします。
tamahime
投稿日時: 2012/12/20 8:51
対応状況: −−−
常連
登録日: 2012/10/15
居住地:
投稿: 44
Re: 【再度】メーカー検索結果へ別のページからリンクさせたい
おはようございます。お返事ありがとうございます!

後者を希望しております。

>「組み合わせ材料を選ぶ」一箇所のみ表示してリンクを張りたい

実際には、このカテゴリIDと、メーカーIDを指定して、別途リンク用のボタンを作り、
検索結果を表示するようにしようと思っております。

(関連商品の代表が1個表示され、「これと似た商品をさがす」といったボタンになるかと考えています。
アイス関連でスプーンの画像と商品名が表示され、「これと似た商品をさがす」を押すと同メーカーのアイス用食器一覧が表示されるような・・・)

取り急ぎお返事だけですみません。どうぞよろしくお願いいたします。
fukap
投稿日時: 2012/12/20 13:15
対応状況: −−−
仙人
登録日: 2009/7/7
居住地: 滋賀県
投稿: 907
Re: 【再度】メーカー検索結果へ別のページからリンクさせたい
Smartyテンプレートでやるなら、
<!--{if $smarty.foreach.xxx.last}-->
<!--{/if}-->

とかでできそうな気がします。
tamahime
投稿日時: 2012/12/21 0:40
対応状況: −−−
常連
登録日: 2012/10/15
居住地:
投稿: 44
Re: 【再度】メーカー検索結果へ別のページからリンクさせたい
fukap様!できました!


いまカテゴリIDを再度整理中なので完全ではありませんが、
たぶんこれでできたと思います。

私の場合、表示したいカテゴリがランクの数字1〜10の部分に固まっていましたので、

<!--{if $i2.rank <= 10}-->
<!--{/if}-->

これを入れましたら、

<!--{$i2.category_id|u}-->

この部分に必要なカテゴリIDが入ってきました!
実際に私がdetail.tplに付け加えたコードは以下のようなものになりました。

引用:

<!--{foreach from=$arrRecommendCat[$arrItem.product_id] name=rc key=k item=i}-->
<!--{foreach from=$i name=rc2 key=k2 item=i2}-->
<!--{if $i2.rank < 10}-->
<a href="<!--{$smarty.const.ROOT_URLPATH}-->products/list.php?mode=search&category_id=<!--{$i2.category_id|u}-->&maker_id=<!--{$arrProduct.maker_id|h}-->"><img src="...jpg" alt="組み合わせ材料を探す" (一部省略)... /></a>
<!--{/if}-->
<!--{/foreach}-->
<!--{/foreach}-->

これが正しいロジックなのかどうかよく分かりませんが、とにかく希望通り表示されています。

ずいぶん長いこと試行錯誤してやっとたどり着きました。
fukapさんのヒントがなかったら、一人では絶対絶対無理なことでした。
この度はほんとうにありがとうございました。とてもよい勉強をさせていただきました。
またご縁がありましたら、どうぞよろしくお願いいたします。
« 1 (2)
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,284名です
総投稿数は109,688件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.