eccube2.3.3について質問です。トップページに現在の売上金額や販売件数などを自動表示させたいのですが、方法を教えてください。

回答の条件
  • URL必須
  • 1人3回まで
  • 13歳以上
  • 登録:2010/07/18 15:03:41
  • 終了:2010/07/22 09:16:17

ベストアンサー

id:rouge_2008 No.1

rouge_2008回答回数594ベストアンサー獲得回数3512010/07/19 17:57:28

ポイント60pt

次のページを参考にしてブロックを追加します。

http://wiki.ec-orange2.jp/index.php?%E3%82%AB%E3%82%B9%E3%82%BF%...


1.PHPファイルの準備

・「frontparts/bloc/viewsales.php」を追加

<?php
 
require_once(CLASS_EX_PATH . "page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Viewsales_Ex.php");
 
$objPage = new LC_Page_FrontParts_BLoc_Viewsales_Ex();
register_shutdown_function(array($objPage, "destroy"));
$objPage->init();
$objPage->process();

?>

・「data/class_extends/page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Viewsales_Ex.php」を追加

<?php

// {{{ requires
require_once(CLASS_PATH . "pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Viewsales.php");

class LC_Page_FrontParts_Bloc_Viewsales_Ex extends LC_Page_FrontParts_Bloc_Viewsales {

    // }}}
    // {{{ functions

    /**
     * Page を初期化する.
     *
     * @return void
     */
    function init() {
        parent::init();
    }

    /**
     * Page のプロセス.
     *
     * @return void
     */
    function process() {
        parent::process();
    }

    /**
     * デストラクタ.
     *
     * @return void
     */
    function destroy() {
        parent::destroy();
    }
}
?>

・「data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Viewsales.php」を追加

<?php

// {{{ requires
require_once(CLASS_PATH . "pages/frontparts/bloc/LC_Page_FrontParts_Bloc.php");

class LC_Page_FrontParts_Bloc_Viewsales extends LC_Page_FrontParts_Bloc {

    // }}}
    // {{{ functions

    /**
     * Page を初期化する.
     *
     * @return void
     */
    function init() {
        parent::init();
        $bloc_file = 'viewsales.tpl';
        $this->setTplMainpage($bloc_file);
    }

    /**
     * Page のプロセス.
     *
     * @return void
     */
    function process() {
        $objSubView = new SC_SiteView();
        //$objDb = new SC_Helper_DB_Ex();

        $this->totalSales = $this->IfGetTotalSales();

        $objSubView->assignobj($this);
        $objSubView->display($this->tpl_mainpage);
    }

    /**
     * モバイルページを初期化する.
     *
     * @return void
     */
    function mobileInit() {
        $this->tpl_mainpage = MOBILE_TEMPLATE_DIR . "frontparts/"
            . BLOC_DIR . 'viewsales.tpl';
    }

    /**
     * Page のプロセス(モバイル).
     *
     * @return void
     */
    function mobileProcess() {
        $this->process();
    }

    /**
     * デストラクタ.
     *
     * @return void
     */
    function destroy() {
        parent::destroy();
    }

    // 売上件数と金額を取得
    function IfGetTotalSales(){
        $conn = new SC_DBconn();
        $sql = " SELECT COUNT(*) AS count, SUM(subtotal) AS subtotal, SUM(total) AS total FROM dtb_order WHERE status = 5";
        $total_sales = $conn->getAll($sql);
        return $total_sales;
    }
}
?>

※上記は受注管理でのステータスが「発送済み」になっている物だけを集計しています。

キャンセルだけを除いて集計したい場合は、「$sql = " SELECT COUNT(*) AS count, SUM(subtotal) AS subtotal, SUM(total) AS total FROM dtb_order WHERE status <> 3";」のように変更してください。


2.ブロックファイルの準備

・デザイン管理画面から「viewsales.tpl」を追加

手順は次のページを参考にします。

http://wiki.ec-orange2.jp/index.php?%E3%82%AB%E3%82%B9%E3%82%BF%...

<!-- 売上げ表示 -->
<!--{if $totalSales[0].count}-->
<div id="infosales">
    本日までに<!--{$totalSales[0].count}-->件(<!--{$totalSales[0].subtotal}-->円)売れています!
</div>
<!--{/if}-->

※デザイン管理画面から登録するとファイルが「user_data/packages/default/bloc」に作成されます。


3.ロジックとテンプレートのひも付け

phpMyAdmin等でデータベースに接続して、「dtb_bloc」テーブルを表示します。

先ほど追加した「tpl_path」が「bloc/viewsales.tpl」になっているレコードを編集します。

「php_path」に「frontparts/bloc/viewsales.php」を追加して保存してください。

ここまで終了すると、トップページに売上げ件数と金額が表示されます。


※テンプレートファイル名「viewsales.tpl」、PHPファイル名「viewsales.php」、クラス名およびファイル名等は任意です。(変更する場合は、ファイルの記述も忘れずに変更してください。)

id:kaji0245

詳細に説明いただきありがとうございます。

早速、作成してみます<(_ _)>

2010/07/19 21:38:50
  • id:rouge_2008
    いくつか確認させてください。

    1.トップページのどのブロックに表示させたいのですか?
    2.何らかのカスタマイズを行っていますか?
    (※カスタマイズしているとすれば、どの程度カスタマイズしていますか?)
    3.売上金額に送料も含めるのでしょうか?
    4.販売件数は注文回数で大丈夫ですか?
  • id:kaji0245
    >1.トップページのどのブロックに表示させたいのですか?
    右ブロックもしくは左ブロックで考えてます

    >2.何らかのカスタマイズを行っていますか?
    >(※カスタマイズしているとすれば、どの程度カスタマイズしていますか?)
    カスタマイズしてません、デフォルトです。

    >3.売上金額に送料も含めるのでしょうか?
    いや、できれば送料はいれたくないです。

    >4.販売件数は注文回数で大丈夫ですか?
    はい、注文回数で大丈夫です。
  • id:kaji0245
    手順どおりにやったつもりですが、トップページに反映されませんでした(^_^;)
  • id:rouge_2008
    最後のデータベースでのデータ変更まで、手順の通り完了しているのに表示されないのでしょうか?

    「デザイン管理」→「レイアウト設定」でブロックを追加した後、追加したブロックの配置を決めてありますか?
    http://wiki.ec-orange2.jp/index.php?%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%EF%BC%9A%E5%88%9D%E6%AD%A9%2F%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E8%BF%BD%E5%8A%A0#nb6a7092
    ※右側の「未使用ブロック」の一覧から、追加したブロックをドラッグ&ドロップして左側の「レイアウト編集」の任意の位置に移動し、「保存」ボタンをクリックします。

    「レイアウト編集」の任意の位置に、追加したブロックが表示されているか、管理画面にログインして確認してみてください。
  • id:kaji0245
    最後のデータベースでのデータ変更まで、手順の通り完了しているのに表示されません(^_^;)
    ちなみに[デザイン管理]→[ブロック編集]でのプレビューも表示されません。
    phpmyadminにて以下のように設定しました。
    データベース: eccube_db
    テーブル : dtb_bloc
    bloc_id : 10
    php_path : frontparts/bloc/viewsales.php
    にて設定いたしました。
  • id:rouge_2008
    ブラウザでソースを表示して、コメント「<!-- 売上げ表示 -->」が記述されているか確認してみてください。

    さらに、「デザイン管理」→「ブロック編集」で、追加したブロックを次のように編集して確認してみてください。
    (取得した結果が空の場合は件数や金額を表示しないようにしているので、条件に影響されない「テスト表示」を追加しています。)

    <!-- 売上げ表示 -->
    テスト表示
    <!--{if $totalSales[0].count}-->
    <div id="infosales">
    本日までで<!--{$totalSales[0].count}-->件(<!--{$totalSales[0].subtotal}-->円)売れています!
    </div>
    <!--{/if}-->


    それから、結果取得のSQLはどちらを使用したでしょうか?

    ・発送済みだけを集計
    SELECT COUNT(*) AS count, SUM(subtotal) AS subtotal, SUM(total) AS total FROM dtb_order WHERE status = 5

    ・キャンセルを除外して集計
    SELECT COUNT(*) AS count, SUM(subtotal) AS subtotal, SUM(total) AS total FROM dtb_order WHERE status <> 3

    データベースに接続してSQLを実行した場合、結果はどのように表示されますか?
    ※コマンドラインでもphpMyAdminからでも、どちらか使い易い方で確認してみてください。
  • id:kaji0245
    >ブラウザでソースを表示して、コメント「<!-- 売上げ表示 -->」が記述されているか確認してみてください。
    記述されてました
    >さらに、「デザイン管理」→「ブロック編集」で、追加したブロックを次のように編集して確認してみてください。
    「テスト表示」のみ表示されました
    >それから、結果取得のSQLはどちらを使用したでしょうか?
    ・発送済みだけを集計
    SELECT COUNT(*) AS count, SUM(subtotal) AS subtotal, SUM(total) AS total FROM dtb_order WHERE status = 5
    にしました。
  • id:rouge_2008
    追加したブロックは反映されているようですね。
    発送済みの注文の件数が取得できていないようですが、コマンドラインまたはphpMyAdminでSQLを実行した場合は取得されますか?
    ※データベース「eccube_db」を選択後に実行してみてください。
  • id:rouge_2008
    どうだったでしょう?(^^;
    管理画面にログインして、「受注管理」→「ステータス管理」で、「発送済み」に該当するデータが表示されるかどうかも確認してみてください。
    ※ステータスの変更は管理画面から手動で行います。
  • id:kaji0245
    >「受注管理」→「ステータス管理」で、「発送済み」
    ここでした!
    発送済みに変更したら反映されました。
    ありがとうございました<(_ _)>

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません