前提:
EC-CUBEver | PHP | MySQL |
---|---|---|
2.12.6 | 5.3.3 | 5.1.73 |
・各商品には規格の一つとして「延長保証」が含まれています。
・各商品の[商品詳細画面]については、規格として延長保証に関する情報を表示することができている状態です。(画像を参照)
編集した内容に関しては以下となります。
(編集もしくは追加した行は★マーク部となります)
/path/to/data/class/pages/products/LC_Page_Products_Detail.php
class LC_Page_Products_Detail extends LC_Page_Ex {
function action(){
...中略...
// 追加項目(商品規格情報の取得)
$this->arrProductsClassList = $this->lfGetProductsClass($product_id); ★
...中略...
}
}
/path/to/data/Smarty/templates/default/products/detail.tpl
<div id="undercolumn">
<form name="form1" id="form1" method="post" action="?">
<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" />
<div id="detailarea" class="clearfix">
<div id="detailphotobloc">
...中略...
<!--{if $tpl_classcat_find1}-->
<div class="classlist">
<!--▼規格1-->
<h2>延長保証</h2>
<!--{foreach from=$arrProductsClassList item="kikaku1" key="key"}--> ★
<label/><input type="radio" name="classcategory_id1" value="<!--{$kikaku1.classcategory_id1}-->" /><!--{$kikaku1.classcategory_name1}--></label> ★
<!--{$kikaku1.price02|number_format}-->円 ★
<!--{/foreach}--> ★
<!--▲規格1-->
...中略...
</div>
</div>
</form>
</div>
課題:
上記のようなラジオボタンと「商品規格」の情報を [商品一覧画面] でも表示させたいのですが、
上の二つのファイルに倣って編集したのですが、ラジオボタンが表示されません。
/path/to/data/class/pages/products/LC_Page_Products_List.php
内には、...Detail.php と同様に lfGetProductsClass() は定義してあるのですが、
以下のようなエラーがEC-CUBEエラーログ上に出力されます。
Fatal error(E_ERROR): Call to undefined method SC_Product_Ex::lfGetProductsClass() on [/var/www/html/data/class/pages/products/LC_Page_Products_List.php(273)] from ::1
customer_id = 1
原因及び解決策をご教示いただける方、お願いします!!
見よう見まねで編集していたため、処理の流れなども含めて教えていただけると幸いです。
追記
SC_Product_Exではなく、
・LC_Page_Products_Detail.php
・LC_Page_Products_List.php
に lfGetProductsClass() を追記しておりました。
_Detail.php の場合は以上は無かったのですが、同じコードを _List.php 内に記載したらエラーとなってしまった状態です。
また、lfGetProductsClass() を SC_Product_Ex に記載し直し、以下のように
list.tpl 内に @var_dump を設置しましたが、結果は下の画像の通りです。
<!--{if $tpl_classcat_find1[$id]}-->
$tpl_classcat_find1[$id]=<!--{$tpl_classcat_find1[$id]|@var_dump}-->
<div class="classlist">
<dl class="size01 clearfix">
<!--▼規格1-->
<h2>延長保証</h2>
$arrProductsClassList=<!--{$arrProductsClassList|@var_dump}-->
<!--{foreach from=$arrProductsClassList item="kikaku1" key="key"}-->
<label/><input type="radio" name="classcategory_id1" value="<!--{$kikaku1.classcategory_id1}-->" /><!--{$kikaku1.classcategory_name1}--></label>
<!--{$kikaku1.price02|number_format}-->円
<!--{/foreach}-->
<!--▲規格1-->
</dl>
<!--{if $tpl_classcat_find2[$id]}-->
<dl class="size02 clearfix">
<!--▼規格2-->
<dt><!--{$tpl_class_name2[$id]|h}-->:</dt>
<dd>
<select name="classcategory_id2" style="<!--{$arrErr.classcategory_id2|sfGetErrorColor}-->">
</select>
<!--{if $arrErr.classcategory_id2 != ""}-->
<p class="attention">※ <!--{$tpl_class_name2[$id]}-->を入力して下さい。</p>
<!--{/if}-->
</dd>
<!--▲規格2-->
</dl>
<!--{/if}-->
</div>
<!--{/if}-->
現在のSC_Product_Ex.phpの中身は下記の通りです。
require_once CLASS_REALDIR . 'SC_Product.php';
class SC_Product_Ex extends SC_Product {
/* 商品規格情報の取得 */
function lfGetProductsClass($product_id) {
$objProduct = new SC_Product_Ex();
return $objProduct->getProductsClassFullByProductId($product_id);
}
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
まだ回答がついていません
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 89.99%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正の依頼
m.ts10806
2018/05/08 12:28
$tpl_classcat_find1はきちんとtrueになって$arrProductsClassListには想定した値が入ってきているのでしょうか。
m.ts10806
2018/05/08 12:29 編集
SC_Product_ExクラスにlfGetProductsClass()が定義されているということですよね?ファイルの中に単なるfunctionとして定義されているだけでは意味がありません。定義されている部分の提示は可能ですか?
asahina1979
2018/05/08 12:45
LC_Page_Products_Detail のメソッドだね(Exは個人変更用のクラス:基本入れ物のみ)
asahina1979
2018/05/08 12:47
中身はこいつか・・ SC_Product::getProductsClassFullByProductId