質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

EC-CUBE

EC-CUBEは、主に日本国内で開発されているECコンテンツ管理システムです。ロックオン社のECKitを元にしてオープンソース化され、商品管理・受注管理・顧客管理・売上集計などECに特化した様々な機能を備えています。

Q&A

0回答

723閲覧

EC-CUBE2 の商品一覧画面での規格情報の表示

zvub1123

総合スコア230

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

EC-CUBE

EC-CUBEは、主に日本国内で開発されているECコンテンツ管理システムです。ロックオン社のECKitを元にしてオープンソース化され、商品管理・受注管理・顧客管理・売上集計などECに特化した様々な機能を備えています。

0グッド

1クリップ

投稿2018/05/08 02:51

編集2022/01/12 10:55

前提:

EC-CUBEverPHPMySQL
2.12.65.3.35.1.73

・各商品には規格の一つとして「延長保証」が含まれています。
・各商品の[商品詳細画面]については、規格として延長保証に関する情報を表示することができている状態です。(画像を参照)

①商品詳細画面
商品詳細画面

編集した内容に関しては以下となります。
(編集もしくは追加した行は★マーク部となります)

/path/to/data/class/pages/products/LC_Page_Products_Detail.php

php

1class LC_Page_Products_Detail extends LC_Page_Ex { 2 function action(){ 3 ...中略... 4 // 追加項目(商品規格情報の取得) 5 $this->arrProductsClassList = $this->lfGetProductsClass($product_id);     ★ 6 ...中略... 7 } 8}

/path/to/data/Smarty/templates/default/products/detail.tpl

smarty

1<div id="undercolumn"> 2 <form name="form1" id="form1" method="post" action="?"> 3 <input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" /> 4 <div id="detailarea" class="clearfix"> 5 <div id="detailphotobloc"> 6 ...中略... 7 <!--{if $tpl_classcat_find1}--> 8 <div class="classlist"> 9 <!--▼規格1--> 10 <h2>延長保証</h2> 11 <!--{foreach from=$arrProductsClassList item="kikaku1" key="key"}-->    ★ 12 <label/><input type="radio" name="classcategory_id1" value="<!--{$kikaku1.classcategory_id1}-->" /><!--{$kikaku1.classcategory_name1}--></label>     ★ 13 <!--{$kikaku1.price02|number_format}-->円    ★ 14 <!--{/foreach}-->    ★ 15 <!--▲規格1--> 16 ...中略... 17 </div> 18 </div> 19 </form> 20</div> 21

課題:

上記のようなラジオボタンと「商品規格」の情報を [商品一覧画面] でも表示させたいのですが、
上の二つのファイルに倣って編集したのですが、ラジオボタンが表示されません。

/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 を設置しましたが、結果は下の画像の通りです。

smarty

1<!--{if $tpl_classcat_find1[$id]}--> 2 $tpl_classcat_find1[$id]=<!--{$tpl_classcat_find1[$id]|@var_dump}--> 3 <div class="classlist"> 4 <dl class="size01 clearfix"> 5 <!--▼規格1--> 6 <h2>延長保証</h2> 7 $arrProductsClassList=<!--{$arrProductsClassList|@var_dump}--> 8 <!--{foreach from=$arrProductsClassList item="kikaku1" key="key"}--> 9 <label/><input type="radio" name="classcategory_id1" value="<!--{$kikaku1.classcategory_id1}-->" /><!--{$kikaku1.classcategory_name1}--></label> 10 <!--{$kikaku1.price02|number_format}-->11 <!--{/foreach}--> 12 <!--▲規格1--> 13 </dl> 14 <!--{if $tpl_classcat_find2[$id]}--> 15 <dl class="size02 clearfix"> 16 <!--▼規格2--> 17 <dt><!--{$tpl_class_name2[$id]|h}--></dt> 18 <dd> 19 <select name="classcategory_id2" style="<!--{$arrErr.classcategory_id2|sfGetErrorColor}-->"> 20 </select> 21 <!--{if $arrErr.classcategory_id2 != ""}--> 22 <p class="attention"><!--{$tpl_class_name2[$id]}-->を入力して下さい。</p> 23 <!--{/if}--> 24 </dd> 25 <!--▲規格2--> 26 </dl> 27 <!--{/if}--> 28 </div> 29 <!--{/if}-->

現在のSC_Product_Ex.phpの中身は下記の通りです。

php

1require_once CLASS_REALDIR . 'SC_Product.php'; 2 3class SC_Product_Ex extends SC_Product { 4 5 /* 商品規格情報の取得 */ 6 function lfGetProductsClass($product_id) { 7 $objProduct = new SC_Product_Ex(); 8 return $objProduct->getProductsClassFullByProductId($product_id); 9 } 10 11} 12

結果:
結果


気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/05/08 03:28

$tpl_classcat_find1はきちんとtrueになって$arrProductsClassListには想定した値が入ってきているのでしょうか。
m.ts10806

2018/05/08 03:30 編集

SC_Product_ExクラスにlfGetProductsClass()が定義されているということですよね?ファイルの中に単なるfunctionとして定義されているだけでは意味がありません。定義されている部分の提示は可能ですか?
退会済みユーザー

退会済みユーザー

2018/05/08 03:45

LC_Page_Products_Detail のメソッドだね(Exは個人変更用のクラス:基本入れ物のみ)
退会済みユーザー

退会済みユーザー

2018/05/08 03:47

中身はこいつか・・ SC_Product::getProductsClassFullByProductId
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問