質問 > 管理機能 > 売上集計の円グラフが表示されない場合がある |
管理機能
スレッド表示 | 古いものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
Rights |
投稿日時: 2020/5/18 17:46
対応状況: 解決済
|
一人前 登録日: 2019/3/12 居住地: 投稿: 99 |
Re: 売上集計の円グラフが表示されない場合がある その後、変数や配列の中身を追いかけてみましたところ解決いたしました。
下記テンプレートファイルに追加したパラメータの指定がされていなかった事が原因でした。 そのため、時分の値チェックでデータがないため、現在日付の時分がセットされ、本来の意図した結果がグラフ処理にわたっていませんでした。 /data/Smarty/templates/admin/total/index.php <!--{* グラフ表示 *}--> <!--{if $install_GD}--> <div id="graph-image"> <!--{* <img src="<!--{$tpl_image}-->?<!--{$cashtime}-->" alt="グラフ"> *}--> <img src="?draw_image=true&type=<!--{$smarty.post.type|h}-->&mode=search&search_form=<!--{$smarty.post.search_form|h}-->&page=<!--{$smarty.post.page|h}-->&search_startyear_m=<!--{$smarty.post.search_startyear_m|h}-->&search_startmonth_m=<!--{$smarty.post.search_startmonth_m|h}-->&search_startyear=<!--{$smarty.post.search_startyear|h}-->&search_startmonth=<!--{$smarty.post.search_startmonth|h}-->&search_startday=<!--{$smarty.post.search_startday|h}-->&search_starthour=<!--{$smarty.post.search_starthour|h}-->&search_startmin=<!--{$smarty.post.search_startmin|h}-->&search_endyear=<!--{$smarty.post.search_endyear|h}-->&search_endmonth=<!--{$smarty.post.search_endmonth|h}-->&search_endday=<!--{$smarty.post.search_endday|h}-->&search_endhour=<!--{$smarty.post.search_endhour|h}-->&search_endmin=<!--{$smarty.post.search_endmin|h}-->&<!--{$smarty.const.TRANSACTION_ID_NAME}-->=<!--{$transactionid}-->" alt="グラフ" /> </div> <!--{/if}--> <!--{* グラフ表示 *}--> ありがとうございました。 |
468 |
投稿日時: 2020/5/15 22:43
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 売上集計の円グラフが表示されない場合がある 関数の呼び出しの前後で変数の何か変わるような事があるのか、
私も経験した事がないので、何とも言えませんが サーバのエラーログにphpエラーが記録されていませんか? グラフが表示される場所に「グラフ」とテキストが表示されるのは 画像データの生成に失敗しているのだと思うのですが…
|
Rights |
投稿日時: 2020/5/15 20:10
対応状況: −−−
|
一人前 登録日: 2019/3/12 居住地: 投稿: 99 |
Re: 売上集計の円グラフが表示されない場合がある その後の状況です。
今回手を加えたファイルは、 /data/class/pages/admin/total/LC_Page_Admin_Total.php /data/Smarty/templates/admin/total/index.tpl LC_Page_Admin_Total.php については、投稿した箇所以外にも変更を加えた部分があり、順を追ってみましたが、 lfGetWhereMember の前後でそれぞれ、$sdate と $edateの値を再指定してみると、前後で挙動が変わりました。 /** 商品別集計 **/ public function lfGetOrderProducts($type, $sdate, $edate) { $objQuery = SC_Query_Ex::getSingletonInstance(); /* ▼lfGetWhereMember 前に再度日付を指定するとグラフが表示▼ */ $sdate = '2019/1/7 0:0:0'; $sdate = '2019/1/7 11:59:59'; /* ▲lfGetWhereMember 前に再度日付を指定するとグラフが表示▲ */ list($where, $arrWhereVal) = $this->lfGetWhereMember('create_date', $sdate, $edate, $type); /* ▼lfGetWhereMember 後に再度日付を指定するとグラフが表示されない▼ */ $sdate = '2019/1/7 0:0:0'; $sdate = '2019/1/7 11:59:59'; /* ▲lfGetWhereMember 後に再度日付を指定するとグラフが表示されない▲ */ $where .= ' AND dtb_order.del_flg = 0 AND dtb_order.status <> ?'; $arrWhereVal[] = ORDER_CANCEL; $col = <<< __EOS__ product_id, product_code, product_name, SUM(quantity) AS products_count, COUNT(dtb_order_detail.order_id) AS order_count, price, (price * SUM(quantity)) AS total __EOS__; $from = 'dtb_order_detail JOIN dtb_order ON dtb_order_detail.order_id = dtb_order.order_id'; // FIXME グループを副問い合わせにして無駄な処理を減らす $objQuery->setGroupBy('product_id, product_name, product_code, price'); $objQuery->setOrder('total DESC'); $arrTotalResults = $objQuery->select($col, $from, $where, $arrWhereVal); $tpl_image = $this->lfGetGraphPie($arrTotalResults, 'product_name', 'products_' . $type, '(売上比率)', $sdate, $edate); return array($arrTotalResults, $tpl_image); } lfGetWhereMember で取得日付指定のWhere句生成部分を変更しています。 /** * @param string $col_date */ public function lfGetWhereMember($col_date, $sdate, $edate, $type, $col_member = 'customer_id') { $where = ''; // 取得日付の指定 if ($sdate != '') { if ($where != '') { $where.= ' AND '; } // 2020-05-14 Add Start //$sdate = date('Y/m/d H:i:s', strtotime($sdate)); // 2020-05-14 Add End $where.= " $col_date >= '". $sdate ."'"; } if ($edate != '') { if ($where != '') { $where.= ' AND '; } // 2020-05-14 Edit Start //$edate = date('Y/m/d H:i:s', strtotime($edate)); //$where.= " $col_date <= '" . $edate ."'"; $edate = date('Y/m/d', strtotime('1 day', strtotime($edate))); $where.= " $col_date < date('" . $edate ."')"; // 2020-05-14 Edit End } // 会員、非会員の判定 switch ($type) { // 全体 case 'all': break; case 'member': if ($where != '') { $where.= ' AND '; } $where.= " $col_member <> 0"; break; case 'nonmember': if ($where != '') { $where.= ' AND '; } $where.= " $col_member = 0"; break; default: break; } return array($where, array()); } 渡した値($sdate, $edate)と、再指定した値($sdate, $edate)を比較しても同じ内容でした。 |
Rights |
投稿日時: 2020/5/15 13:35
対応状況: −−−
|
一人前 登録日: 2019/3/12 居住地: 投稿: 99 |
Re: 売上集計の円グラフが表示されない場合がある ご返信ありがとうございます。
改修前では、一覧で出力される結果に沿ったグラフ表示がされていました。 前回の投稿では記載しておりませんでしたが、2019年1月7日11時と16時に受注が正しく抽出されるかテストした際、 [検索条件] 受注日に、2019/1/7 11:00 ~ 2019/1/7 16:30と指定 [結果] グラフ → グラフ表示箇所に「グラフ」のテキスト表示でグラフが表示されず 検索結果 → 2件の受注の対象商品を表示 となります。 グラフ生成の際に渡すデータは、改修前後に差異はなく、日付部分もグラフ出力の際には、タイトル文字列として渡しているのみで処理自体に影響はないと認識しているのですが、現時点で現象の再現条件がはっきりつかめていません。 |
468 |
投稿日時: 2020/5/15 12:54
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 売上集計の円グラフが表示されない場合がある 投稿いただいたソースを私の環境に張り付けて(分秒のところだけ画面から受け取らずハードコーディングしましたが)
動作を確認してみましたが、特に問題無く、グラフ自体は表示されました。 投稿された現象から ・2019年1月7日11時と16時に受注あり の2件がグラフで表示できないように見受けられますが 改修前の状況では、上記注文はグラフに出力されていましたでしょうか?
|
Rights |
投稿日時: 2020/5/14 21:56
対応状況: 解決済
|
一人前 登録日: 2019/3/12 居住地: 投稿: 99 |
売上集計の円グラフが表示されない場合がある [EC-CUBE]2.13.5
売上集計の期間別集計で時分まで指定するようにカスタマイズしましたが、商品別集計の円グラフが表示されません。 集計結果の一覧は、検索条件の通り表示されます。 円グラフ出力に渡すデータ配列は、カスタマイズ前と後で比較してみましたが、同じデータを渡しています。 lfSetStartEndDateの開始日($sdate)と最終日($edate)の部分に、時分秒を加えるとグラフが出力されない場合があります。 例)2019年1月7日11時と16時に受注あり 2020年3月10日10時に受注あり ①2019/1/7 11:00~2019/1/7 12:00の条件指定 2019/1/7 11時の受注商品が一覧に表示、グラフは、「グラフ」のテキスト表示でグラフ表示されず ②2019/1/7 11:00~2020/3/10 11:00の条件指定 3件の受注商品が一覧に表示、グラフは、2020年3月の受注商品のみグラフに表示され、2019年受注商品はグラフに反映されず ※グラフに渡すデータと凡例の配列はカスタマイズ前と同じ内容を渡しています。 /* フォームで入力された日付を適切な形にする */ /** * @param SC_FormParam_Ex $objFormParam */ public function lfSetStartEndDate(&$objFormParam) { $arrRet = $objFormParam->getHashArray(); // 月度集計 if ($arrRet['search_form'] == 1) { list($sdate, $edate) = SC_Utils_Ex::sfTermMonth($arrRet['search_startyear_m'], $arrRet['search_startmonth_m'], CLOSE_DAY); // 期間集計 } elseif ($arrRet['search_form'] == 2) { /* 2020-05-14 Edit Start */ /*$sdate = SC_Utils_Ex::sfGetTimestampistime($arrRet['search_startyear'], $arrRet['search_startmonth'], $arrRet['search_startday'], $arrRet['search_starthour'], $arrRet['search_startmin']); $edate = SC_Utils_Ex::sfGetTimestampistime($arrRet['search_endyear'], $arrRet['search_endmonth'], $arrRet['search_endday'], $arrRet['search_endhour'], $arrRet['search_endmin'], true);*/ $sdate = $arrRet['search_startyear'] . '/' . $arrRet['search_startmonth'] . '/' . $arrRet['search_startday'] . ' ' . $arrRet['search_starthour'] . ':' . $arrRet['search_startmin'] . ':0'/* 2020-05-14 Add End*/; $edate = $arrRet['search_endyear'] . '/' . $arrRet['search_endmonth'] . '/' . $arrRet['search_endday'] . ' ' . $arrRet['search_endhour'] . ':' . $arrRet['search_endmin'] . ':59'/* 2020-05-14 Add End*/; //$sdate = $arrRet['search_startyear'] . '/' . $arrRet['search_startmonth'] . '/' . $arrRet['search_startday']; //$edate = $arrRet['search_endyear'] . '/' . $arrRet['search_endmonth'] . '/' . $arrRet['search_endday']; /* 2020-05-14 Edit End */ } return array($sdate, $edate); } // 円グラフの作成 /** * @param string $keyname * @param string $type */ public function lfGetGraphPie($arrResults, $keyname, $type, $title = '', $sdate = '', $edate = '') { $ret_path = ''; // 結果が0行以上ある場合のみグラフを生成する。 if (count($arrResults) > 0 && $this->install_GD) { // グラフの生成 $arrList = SC_Utils_Ex::sfArrKeyValue($arrResults, $keyname, 'total', GRAPH_PIE_MAX, GRAPH_LABEL_MAX); // 一時ファイル名の取得 $pngname = $this->lfGetGraphPng($type); $path = GRAPH_REALDIR . $pngname; $objGraphPie = new SC_Graph_Pie(); // データをセットする $objGraphPie->setData($arrList); // 凡例をセットする $objGraphPie->setLegend(array_keys($arrList)); // メインタイトル作成 // 2020-05-14 Edit Start $sy = date('Y', strtotime($sdate)); $sm = date('m', strtotime($sdate)); $sd = date('d', strtotime($sdate)); $st = date('H:i:s', strtotime($sdate)); $ey = date('Y', strtotime($edate)); $em = date('m', strtotime($edate)); $ed = date('d', strtotime($edate)); $et = date('H:i:s', strtotime($edate)); $start_date = $sy . '年' . $sm . '月' . $sd . '日 ' . $st; $end_date = $ey . '年' . $em . '月' . $ed . '日 ' . $et; /*list($sy, $sm, $sd) = preg_split('|[/ ]|', $sdate); list($ey, $em, $ed) = preg_split('|[/ ]|', $edate); $start_date = $sy . '年' . $sm . '月' . $sd . '日'; $end_date = $ey . '年' . $em . '月' . $ed . '日';*/ // 2020-05-14 Edit End $objGraphPie->drawTitle('集計期間:' . $start_date . ' - ' . $end_date); // 円グラフ描画 $objGraphPie->drawGraph(); // グラフの出力 if (DRAW_IMAGE) { $objGraphPie->outputGraph(); SC_Response_Ex::actionExit(); } // ファイルパスを返す $ret_path = GRAPH_URLPATH . $pngname; } return $ret_path; } |
スレッド表示 | 古いものから | 前のトピック | 次のトピック | トップ |