質問 > 管理機能 > 出力可能項目一覧の追加 |
管理機能
スレッド表示 | 古いものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
u-zi |
投稿日時: 2007/7/29 10:23
対応状況: −−−
|
半人前 登録日: 2007/6/16 居住地: 投稿: 12 |
できました!>Re: 出力可能項目一覧の追加 >ゲスト様
大変お世話になります。おかげさまで、出力(と一覧表示)することができました! これで、やっと前に進むことができます!本当に助かりました。 図々しいお願いにも関わらず、ご丁寧にご教授くださいまして本当にありがとうございましたm(_ _)m 取り急ぎ、お礼を申し上げますm(_ _)m |
ゲスト |
投稿日時: 2007/7/29 3:08
対応状況: −−−
|
Re: 出力可能項目一覧の追加 PostgreSQLの場合、insert文を1行に書く必要があります。
(確か、行末に、まだ終わりじゃない事を示すマークを書けば複数行書けた 気がしますが、今手元にPostgreSQLの資料が無いのでわかりません) ですので、 insert into dtb_csv (csv_id, col, disp_name, rank, status, create_date, update_date) values (5, 'create_date', '受注日', 1, 1, Now(), Now()) ; insert into dtb_csv (csv_id, col, disp_name, rank, status, create_date, update_date) values (5, 'product_name', '商品名', 2, 1, Now(), Now()) ; insert into dtb_csv (csv_id, col, disp_name, rank, status, create_date, update_date) values (5, 'order_job', '職業', 3, 1, Now(), Now()) ; insert into dtb_csv (csv_id, col, disp_name, rank, status, create_date, update_date) values (5, '(quantity*price)', '小計', 4, 1, Now(), Now()); こういう形で全件を1件ずつinsertし、且つ1行で終わる形にすれば エラーは出なくなります。 (表示上折り返して見えますが、1insertにつき1行です) |
|
u-zi |
投稿日時: 2007/7/29 2:45
対応状況: −−−
|
半人前 登録日: 2007/6/16 居住地: 投稿: 12 |
Re: 出力可能項目一覧の追加 >ゲスト様
ご丁寧にご返信、ありがとうございますm(_ _)m 最初にお知らせするのを忘れてしまっていたのですが(申し訳ありません:汗)、データベースはローカル(WindowsXP)本番サーバ(CentOS4)ともPostgreSQL8.0ですので、pgAdmin IIIにて、「EC-CUBEのデータベースを選択」→メニュー鉛筆(?)アイコン「任意のSQLクエリーを実行」をクリック→教えていただいた下記insert文、 insert into dtb_csv (csv_id, col, disp_name, rank, status, create_date, update_date) values (5, 'create_date', '受注日', 1, 1, Now(), Now()), (5, 'product_name', '商品名', 2, 1, Now(), Now()), (5, 'order_job', '職業', 3, 1, Now(), Now()), (5, '(quantity*price)', '小計', 4, 1, Now(), Now()); を入れて「クエリーを実行」してみたところ、以下のエラーが出てしまいました。 ERROR: syntax error at or near "," at character 139 コピペでしたので、ひょっとして文字コードか何かな?と思いまして、手入力したり、漢字の箇所をエスケープしてみたり、色々と試してみたのですが、「受注日\」と後ろをエスケープするか「受注日」を英数字にするか、もしくはNow('))と括弧の中に'を入れると、 ERROR: syntax error at or near "product_name" at character 148(番号は変わります) と、先に進みますがエラーが出るのは変わらず・・・。 念のため、psqlでも試してみたところ、 ERROR: invalid byte sequence for encoding "EUC_JP": 0x8ef3 というエラーが出まして、どうも文字コード関係で叱られているようです・・・。 それで、Googleで「0x8ef3」を検索してみたところ、「受」という文字のことみたいなのですが、「受」をエスケープしただけでは駄目でして、この後、以下のような状態まで insert into dtb_csv (csv_id, col, disp_name, rank, status, create_date, update_date) values (5,'create_date','受注日\',1,1,Now(),Now()), (5, \'product_name\', \'商品名\', 2, 1, Now(), Now()), (5, \'order_job\', \'職業\', 3, 1, Now(), Now()), (5, \'(quantity*price)', '小計', 4, 1, Now(), Now()); '(quantity*price)'の前まで、試しにエスケープをし続けてみたところ、 ERROR: invalid input syntax for integer: "小計" と、今までと異なるエラーが出てしまいました。 こんなエスケープの仕方をしていればエラーが出て当然だとは思うのですが(汗)PostgreSQLの場合は、文法(?)がMySQLとは異なったものになるということなのでしょうか・・・? 本当に何度もお手間を取らせてしまって恐縮なのですが、ご助言いただけますと助かります。 本当に、申し訳ありません・・・・(汗) 何卒、よろしくお願いいたしますm(_ _)m |
ゲスト |
投稿日時: 2007/7/28 20:20
対応状況: −−−
|
Re: 出力可能項目一覧の追加 上記SQL文ですが、受注詳細管理を別で作ったのであれば
csv_id=5にはdtb_orderの項目がありませんので、実際には insert into dtb_csv (csv_id, col, disp_name, rank, status, create_date, update_date) values (5, 'create_date', '受注日', 1, 1, Now(), Now()), (5, 'product_name', '商品名', 2, 1, Now(), Now()), (5, 'order_job', '職業', 3, 1, Now(), Now()), (5, '(quantity*price)', '小計', 4, 1, Now(), Now()); としなければならないでしょう。 |
|
ゲスト |
投稿日時: 2007/7/28 19:56
対応状況: −−−
|
Re: 出力可能項目一覧の追加 insert into dtb_csv (csv_id, col, disp_name, rank, status, create_date, update_date) values
(3, 'product_name', '商品名', 54, 1, Now(), Now()), (3, '(quantity*price)', '小計', 55, 1, Now(), Now()); はphpソースに書くのではなく、データベースに対して直接発行しなければならない SQL文となります。 phpMyAdminを使っている場合は、EC-CUBEで使用しているデータベースを選択後SQLメニューで、 データベース データベース名 にSQL 照会を実行する: の欄に上記insert文を入れて実行という形になります。 |
|
u-zi |
投稿日時: 2007/7/28 14:04
対応状況: −−−
|
半人前 登録日: 2007/6/16 居住地: 投稿: 12 |
Re: 出力可能項目一覧の追加 >ゲスト様
ご丁寧に、ご返信いただきましてありがとうございます。 ご教授いただいた内容を元に、当方なりに試行錯誤しておりますが、やり方が間違っているようでして商品名他を追加しての出力ができずにおります。 とりあえず、以下の2パターンでやってみました。 1.html/admin/order/index.phpを修正変更の場合 2.html/admin/order/index_detail.phpを新規作成の場合 変更・追加箇所は後述のようにしてみました。とりあえずエラーは出ていないようですが、 insert into dtb_csv (csv_id, col, disp_name, rank, status, create_date, update_date) values (3, 'product_name', '商品名', 54, 1, Now(), Now()), (3, '(quantity*price)', '小計', 55, 1, Now(), Now()); という箇所の記述の仕方が良くわからず、見よう見まねですが(汗) 1.の結果としましては、出力項目は変わらずのまま 2.の結果としましては、CSV出力をクリックすると、検索前の画面に戻ってしまい何も出力されない もし、よろしければ、間違っている箇所をご指摘いただけますと助かります。 何卒よろしくお願いいたしますm(_ _)m ///////////////////////////////////////////////////////////////////////////////////// html/admin/order/index.php 109行付近 case 'search_order_id1': //$where .= " AND order_id >= ?"; //変更前 $where .= " AND dtb_order.order_id >= ?"; //変更後 $arrval[] = $val; break; case 'search_order_id2': //$where .= " AND order_id <= ?"; //変更前 $where .= " AND dtb_order.order_id <= ?"; //変更後 $arrval[] = $val; break; 221行付近 $where .= " AND dtb_order.order_id = dtb_order_detail.order_id"; //追加 $sql.= "insert into dtb_csv (csv_id, col, disp_name, rank, status, create_date, update_date) values"; //追加 $sql.= "(3, 'product_name', '商品名', 54, 1, Now(), Now()),"; //追加 $sql.= "(3, '(quantity*price)', '小計', 55, 1, Now(), Now());"; //追加 $data = lfGetCSV("dtb_order,dtb_order_detail", $where, $option, $arrval, $arrCsvOutputCols); //変更後 //$data = lfGetCSV("dtb_order", $where, $option, $arrval, $arrCsvOutputCols);//変更前 // 以下新規ページ(index_detail.php)作成の場合 ///////////////////////////////////////////////////////////////////////////////////// html/admin/order/index_detail.php ※html/admin/order/index.phpをコピー 12行 $this->tpl_mainpage = 'order/index_detail.tpl'; 109行付近 case 'search_order_id1': //$where .= " AND order_id >= ?"; //変更前 $where .= " AND dtb_order.order_id >= ?"; //変更後 $arrval[] = $val; break; case 'search_order_id2': //$where .= " AND order_id <= ?"; //変更前 $where .= " AND dtb_order.order_id <= ?"; //変更後 $arrval[] = $val; break; 213行 // CSV出力タイトル行の作成 //$arrCsvOutput = sfSwapArray(sfgetCsvOutput(3, " WHERE csv_id = 3 AND status = 1")); $arrCsvOutput = sfSwapArray(sfgetCsvOutput(3, " WHERE csv_id = 5 AND status = 1"));//2007.07.28変更 221行付近 $where .= " AND dtb_order.order_id = dtb_order_detail.order_id"; //追加 $sql.= "insert into dtb_csv (csv_id, col, disp_name, rank, status, create_date, update_date) values"; //追加 $sql.= "(3, 'product_name', '商品名', 54, 1, Now(), Now()),"; //追加 $sql.= "(3, '(quantity*price)', '小計', 55, 1, Now(), Now());"; //追加 $data = lfGetCSV("dtb_order,dtb_order_detail", $where, $option, $arrval, $arrCsvOutputCols); //変更後 //$data = lfGetCSV("dtb_order", $where, $option, $arrval, $arrCsvOutputCols);//変更前 ///////////////////////////////////////////////////////////////////////////////////// data/include/csv_output.inc 8行目変更 $arrSubnavi = array( 1 => 'product', 2 => 'customer', 3 => 'order', 4 => 'campaign', 5 => 'order_detail' //追加 ); $arrSubnaviName = array( 1 => '商品管理', 2 => '店舗管理', 3 => '受注管理', 4 => 'キャンペーン', 5 => '受注詳細管理' //追加 ); ///////////////////////////////////////////////////////////////////////////////////// data/Smarty/template/admin/order/subnavi.tpl 13行追加 <tr><td class=<!--{if $tpl_subno != 'order_detail'}-->"navi"<!--{else}-->"navi-on"<!--{/if}-->><a href="./index.php" onMouseOver="naviStyleChange('order_detail', '#a5a5a5')" <!--{if $tpl_subno != 'order_detail'}-->onMouseOut="naviStyleChange('order_detail', '#636469')"<!--{/if}--> id="order_detail"><img src="<!--{$smarty.const.URL_DIR}-->img/contents/icon.jpg" width="15" height="9" alt="" border="0"><span class="navi_text">売上詳細管理</span></a></td></tr> <tr><td><img src="<!--{$smarty.const.URL_DIR}-->img/contents/navi_line.gif" width="140" height="2" alt=""></td></tr> ///////////////////////////////////////////////////////////////////////////////////// html/admin/order/data/Smarty/template/admin/order/index_detail.php 214行 $arrCsvOutput = sfSwapArray(sfgetCsvOutput(3, " WHERE csv_id = 3 AND status = 1")); //変更前 ↓ ↓ ↓ ↓ $arrCsvOutput = sfSwapArray(sfgetCsvOutput(5, " WHERE csv_id = 5 AND status = 1")); //変更後 ///////////////////////////////////////////////////////////////////////////////////// data/Smarty/template/admin/order/index_detail.tpl 239行 <a href="../contents/csv.php?tpl_subno_csv=order"> //変更前 ↓ ↓ ↓ ↓ <a href="../contents/csv.php?tpl_subno_csv=order_detail"> //変更後 |
ゲスト |
投稿日時: 2007/7/28 3:46
対応状況: −−−
|
Re: 出力可能項目一覧の追加 すみません、追記です。
index_detail.phpを作ったら、対応するテンプレートも作った方が良いでしょう。 実際にはindex.tplのままで使っても >> CSV出力項目設定 のリンクで受注管理画面のCSV出力設定になるだけなのですが、不便かもしれないので。 違いは上記だけなので、テンプレートの <a href="../contents/csv.php?tpl_subno_csv=order"> となっている箇所の、orderの部分を適宜新しくarrSubnaviに追加した 文字列を書けばOKとなります。 |
|
ゲスト |
投稿日時: 2007/7/28 3:41
対応状況: −−−
|
Re: 出力可能項目一覧の追加 実際に仕事として受けた場合にどうかと考えた場合、
受注管理に追加機能として付け加えるのではなく、別の管理画面を 作ってそこで実装した方が良さそうだという事に気付きましたので 少し書いてみます。 dtb_csvのcsv_idは現在4まで割り振られており、このIDはSQL文では 直書きで書かれていますが実際にはdata/include/csv_output.incの arrSubnavi及びarrSubnaviNameの添え字となります。従ってcsv_idを増やす場合には data/include/csv_output.incの配列についても増やす必要があります。 実際にはこの配列を使って、更にdata/Smarty/template/admin/contents/subnavi.tplについても 編集しなければなりません。 この2つのファイルを編集すればCSV出力項目設定の欄に新しいcsv_idに従った出力項目設定を 追加する事が出来ます。 上記2ファイルを編集したら、次に data/Smarty/template/admin/order/subnavi.tplについて 編集し、受注管理の2行をコピーして受注詳細管理のナビを作ります。 ここで、phpファイルをindex_detail.phpとでもしておきます。 後はhtml/admin/order/index.phpをコピーしてindex_detail.phpを 作り、私が上で書いているような変更を加えます。(この時 $arrCsvOutput = sfSwapArray(sfgetCsvOutput(3, " WHERE csv_id = 3 AND status = 1")); の行は $arrCsvOutput = sfSwapArray(sfgetCsvOutput(5, " WHERE csv_id = 5 AND status = 1")); と変更しなければなりません。5は追加したcsv_idの番号とします) これにより、受注管理画面では従来通りの受注機能、受注詳細管理画面では dtb_order_detailを絡めた管理機能が追加される事になります。 作業が多い為、実際にEC-CUBEをネットショップとして使用する場合の作業となりますが 一応書かせて頂きました。 |
|
ゲスト |
投稿日時: 2007/7/28 2:45
対応状況: −−−
|
Re: 出力可能項目一覧の追加 引用:
高度な設定での追記では日付での絞込みを行う際にはSQL文を一々作らなければならないのは 仰るとおりですので、受注管理画面でのCSV出力機能で出力する事を 考えると、上記の内問題になるのは商品名、小計のみとなります。 (受注日と職業についてはCSV出力設定で、デフォルトでは出力される設定になっています) html/admin/order/index.phpを以前私が書いた通り、dtb_order_detailを 絡める形に変更していた場合、 insert into dtb_csv (csv_id, col, disp_name, rank, status, create_date, update_date) values (3, 'product_name', '商品名', 54, 1, Now(), Now()), (3, '(quantity*price)', '小計', 55, 1, Now(), Now()); というSQL文を実行する事でCSV出力に商品名と小計を追加する事が出来ます。 但しこの際、CSV出力される項目の中で受注IDがありますが、これを 出力しない設定にするか、或いはdtb_csvのcsv_id=3の1番目、colが order_idとなっているレコードについてorder_idではなくdtb_order.order_idと しなければエラーとなって白画面になりますので注意してください。 上記の4つの項目以外は要らないという事であれば、後はCSV出力設定画面で 要らない項目を削ってやれば良いでしょう。 また、こういった変更をする以外の場合では以前私が書いた、index.phpで dtb_orderとdtb_order_detailを絡める設定には寧ろしてはいけません。 何故ならdtb_orderだけであればレコードはorder_id1つにつき1件となるのですが dtb_order_detailと絡める事によってorder_idが同じ行が複数出てきます。 これはdtb_order_detailのorder_idがユニークではなく、1回の注文時に 複数種類の商品を注文した場合にはorder_idが同じ別のレコードが 生成される為です。 left joinでorder_idをユニークに保つ手法もあるかもしれませんが、 その場合はdtb_order_detailの全レコードが出力されるとは限らなくなる為 結果的にdtb_order_detailを絡める意味が無くなってしまいます。 しかし実際にはorder_id1件につき1レコードという形態が受注管理としては 都合の良い場面が多いと思われますので、dtb_order_detailを絡めるのは 特殊な場合という結論となります。 |
|
u-zi |
投稿日時: 2007/7/28 0:25
対応状況: −−−
|
半人前 登録日: 2007/6/16 居住地: 投稿: 12 |
Re: 出力可能項目一覧の追加 メンバー登録しておりましたので、ログインいたしました。
>ゲスト様 夜分にご返信いただきまして、ありがとうございます。 それで運用の仕方なのですが、かなり変わった使い方になりますが、通販と店売りがあり、EC-CUBEを通常のオンラインショップ・ツールとしては使用せず(独自運営のWeb通販は、現在ありません)、商品管理、売り上げ管理としてのみ利用したいと考えております。そのため顧客管理はありません。 売り上げは全て当方でショップページの方から(管理画面から売り上げられたらいいのですが)購入する形で売り上げます。 今回どのようにしたいかと申しますと、商品は常に一点で、受注日毎に ・受注日 ・商品名 ・職業(実際は別の項目名にしてます) ・小計(商品の販売価格) この4項目をCSV出力もしくは、検索結果で表示し、受注に関しての「日計表」のデータとして利用できればと考えております。 7月3日の受注データを得たいとして、「コンテンツ管理」→「CSV出力項目設定」→「高度な設定」で、見よう見まねでやってみたのですが、 * FROM dtb_order , dtb_order_detail WHERE dtb_order.order_id = dtb_order_detail.order_id AND create_date >= '2007/7/3' AND create_date < '2007/7/4'; というSQL文で登録しCSV出力した結果の中で、上記4項目以外のものは不必要な為、受注管理の方で出力出来ないものかと悩んでおります。 何ぶん、SQL文理解しておりませんので・・・。 CSV出力に関して、自力での解決が難しいこともあり、「日計表」という体裁にすることを考えると、受注管理の検索結果に表示したものをCSSの@media printでなんとかする方が簡単な気がしてきましたので、今は、こちらの方法をやってみようと、商品管理の検索関係のPHPから見よう見まねで色々挑戦しておりますが、こちらもてんで駄目な状態です・・。 なんとも、はっきりしなくて申し訳ありません。 図々しくて恐縮ですが、何かお知恵をお借り出来れば助かりますm(_ _)m |
(1) 2 » |
スレッド表示 | 古いものから | 前のトピック | 次のトピック | トップ |