バージョン選択

フォーラム

メニュー

オンライン状況

81 人のユーザが現在オンラインです。 (71 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 81
もっと...

サイト内検索

質問 > 管理機能 > 商品登録制限(最大商品点数制御)について

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
zaq
投稿日時: 2012/12/27 11:03
対応状況: −−−
新米
登録日: 2011/6/20
居住地:
投稿: 6
商品登録制限(最大商品点数制御)について
商品登録時に"全商品点数(非公開含む)"と"パラメータ設定に設けた最大商品数(PRODUCT_MAX)"を比較し設定値を超える場合エラーを表示したいと考えております。

素人考えですが、最大カテゴリ登録数を参考にしたらできそうな気がするんです。

現時点で、パラメータ設定に最大商品点数を持たせるところまでは完了しております。

全商品点数を出す変数はここを参考にさせていただきました
引用:
$objQuery = new SC_Query();
$table = 'dtb_products';
$where = 'del_flg = 0 AND status = 1';
$count = $objQuery->count($table, $where);

そしてLC_Page_Admin_Products_Category.phpの310行目くらいからの
引用:
$where = 'del_flg = 0';
$count = $objQuery->count('dtb_category', $where);
if ($count >= CATEGORY_MAX) {
$arrErr['category_name'] = '※ カテゴリの登録最大数を超えました。<br/>';
return $arrErr;
}

これらを組み合わせてLC_Page_Admin_Products_Product.phpの158行目くらいの
引用:
// エラーチェック
$this->arrErr = $this->lfCheckError_Edit($objFormParam, $objUpFile, $objDownFile, $arrForm);

の次の行に
引用:
$objQuery = new SC_Query();
$table = 'dtb_products';
$where = 'del_flg = 0';
$count = $objQuery->count($table, $where);
if ($count >= PRODUCT_MAX) {
$arrErr = '※ 商品の登録最大数を超えました。これ以上商品を登録できません。<br/>';
return $arrErr;
}


とやってみたのですが全く上手くいきません。
ご教授いただければ幸いです。

------------------------------------------------------------------------------------------
[EC-CUBE] 2.12.2
[レンタルサーバ] VPS
[OS] Linux
[PHP] 5.1.6
[データベース] PostgreSQL 8.1.11
[WEBサーバ] Apache
------------------------------------------------------------------------------------------
homan
投稿日時: 2012/12/27 11:31
対応状況: −−−
仙人
登録日: 2007/7/2
居住地: 宮崎県宮崎市
投稿: 633
Re: 商品登録制限(最大商品点数制御)について
(1)まず$this->arrErrが本来エラー内容が格納されているとおもいますが、追記のエラー内容は$arrErrに入っています。

(2)returnも、なぜそこで行っているのかちょっとよくわからないのですが、
今回のエラー処理を書きたい場合は
function lfCheckError_Edit(450〜460行目付近)の方に書くべきかと思います。

(3)$objQuery = new SC_Query();という記述ですが
EC-CUBE2.12.2では以下のリファクタリングガイドラインが
適応されています。
http://svn.ec-cube.net/open_trac/wiki/EC-CUBE%E6%A8%99%E6%BA%96%E8%A6%8F%E7%B4%84/%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%AC%E3%82%A4%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3

上記URLの「action関数」の項にあるとおり、action関数にはSQLを実行する処理を記述してはならないです。

上記URLの「データベースアクセス」の項で、
「 SC_Query::getSingletonInstance() を使用してインスタンスを取得すること」とあるので、
それに従うべきかと思います。
<?php
/**
 * NG PHP4 環境では, 新たなインスタンスが生成されてしまう
 */ 
$objQuery = new SC_Query();

/**
 * OK シングルトンが保証され, トランザクションの扱いが容易になる
 */
$objQuery = SC_Query::getSingletonInstance();


上記3点を解決してまとめられれば、少し前進しそうな気がします!




-------
※内容が難しいとお思いになられると思いますが、
 意地悪でもなんでもなく、今後のことを考えて「敢えて」ですのでご理解下さい。
 
 EC-CUBEの根幹や仕組みを理解しない状態で解決させる方法は
 いくらでもあると思いますが、
 それがもとになって想定していない誰も解決できないエラーが
 出ないとも限りませんし、一番怖いのはEC-CUBEのベースでは
 きちんと脆弱性対策がなされているのに
 独自の記述により穴ができて脆弱性になってしまったりすることです。

 コーディング規約などはご理解されたうえでカスタマイズされることをおすすめします


----------------
このコミュニティでの投稿はボランティアの範囲に留めさせていただいています。個別の相談やカスタマイズは有償にて承っておりますのでご相談下さい。

[url=http://www.eccube-school.jp/]EC-CUBE

zaq
投稿日時: 2013/1/8 11:05
対応状況: −−−
新米
登録日: 2011/6/20
居住地:
投稿: 6
Re: 商品登録制限(最大商品点数制御)について
ご連絡が遅くなってしまい申し訳ございません。
ご丁寧なご教授に感謝いたします。

homan様のご教授を参考に、457行目付近に引用:
//商品点数制限
$objQuery = SC_Query::getSingletonInstance();
$table = 'dtb_products';
$where = 'del_flg = 0';
$count = $objQuery->count($table, $where);
if ($count >= PRODUCT_MAX) { $arrErr['alert'] = '※ 商品の登録最大数を超えました。これ以上商品を登録できません。<br/>';
return $arrErr;
}

と追加し、見事点数制限は出来ました。
有難うございます。

しかしながら、最大まで商品が入っている状態で商品を編集することが出来ません。
※仮にMAX100点の場合、100点登録済みの状態では商品編集が出来ない。

"商品編集の場合のみこの処理をしない"とすればいいと思うのですが、編集時を判断するにはどうしたらよいでしょうか。
ヒントをいただければ幸いです。
よろしくお願い申し上げます。
zaq
投稿日時: 2013/1/11 9:16
対応状況: 解決済
新米
登録日: 2011/6/20
居住地:
投稿: 6
Re: 商品登録制限(最大商品点数制御)について
自己解決しました、ありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,851名です
総投稿数は109,989件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1291
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.