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

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

ただいまの
回答率

90.48%

  • PHP

    20878questions

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

  • JavaScript

    17040questions

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

  • EC-CUBE

    289questions

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

  • Smarty

    176questions

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

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

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 273

atuYamaY

score 121

前提:

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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • mts10806

    2018/05/08 12:28

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

    キャンセル

  • mts10806

    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

    キャンセル

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

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

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20878questions

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

  • JavaScript

    17040questions

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

  • EC-CUBE

    289questions

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

  • Smarty

    176questions

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