バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > カテゴリ登録画面にチェックボックスの項目を追加する

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
taiton
投稿日時: 2013/2/28 6:45
対応状況: −−−
半人前
登録日: 2012/2/10
居住地:
投稿: 11
カテゴリ登録画面にチェックボックスの項目を追加する
EC-CUBE: 2.4.4
DBサーバ: PostgreSQL 9.1.2
PHP: 5.3.8

カテゴリ登録画面にチェックボックスの項目を追加して、チェックが入っていればDBに1を、入っていなければ0(Default値)を登録したいと考えています。

======
DB
======
dtb_category に test_flg を追加

=======
category.tpl
=======
<input type="checkbox" id="ipb" name="ipb" value="0" <!--{if $arrForm.test_flg == 1}-->checked="checked"<!--{/if}-->>

ここの記述ではHTMLのテーブルタグなどを省略していますが上記を追加しました。

=======
LC_Page_Admin_Products_Category_Ex.php
=======
$col = "category_name, category_title, category_info2, info_flg, level,  test_flg";


$this->arrForm['test_flg'] = $arrRet[0]['test_flg'];


function lfInitParam() {
        $this->objFormParam->addParam("カテゴリ名", "category_name", STEXT_LEN, "KVa", array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
        $this->objFormParam->addParam("チェック", "test_flg", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
}


を追加で記述したところで次に何をすれば良いのか分からなくなっております。
カテゴリの新規登録部分に
入力データを渡す為に
$sqlval
などを記述する必要があると思いますがどのように記述すれば良いのかよく分かりませんでした。

分かる方がいらっしゃいましたら教えてください。
dkazuto
投稿日時: 2013/2/28 9:42
対応状況: −−−
一人前
登録日: 2012/5/10
居住地:
投稿: 95
Re: カテゴリ登録画面にチェックボックスの項目を追加する
taiton様

まず、monopolistic_flgとtest_flgで名前を分けられた理由はありますでしょうか。
名前を統一したほうがECCUBEのフレームワーク上カスタマイズしやすいため名前がtest_flgで統一されている想定で書きます。

/data/class/pages/admin/products/LC_Page_Admin_Products_Category.php
の236行目当たりのlfInsertCat関数内に


// 入力データを渡す。
$sqlval = $this->objFormParam->getHashArray();
$sqlval['create_date'] = "Now()";
$sqlval['update_date'] = "Now()";


から始まる部分があるかと思います。
こちらを


// 入力データを渡す。
$sqlval = $this->objFormParam->getHashArray();
$sqlval = $this->objFormParam->getHashArray();
if (empty($sqlval['test_flg'])) {
    $sqlval['test_flg'] = 0;
} else {
    $sqlval['test_flg'] = 1;
}
$sqlval['create_date'] = "Now()";
$sqlval['update_date'] = "Now()";


のように書き換えます。

また、/data/class/pages/admin/products/LC_Page_Admin_Products_Category.php
の236行目当たりのlfUpdateCat関数内の同様の部分を

// 入力データを渡す。
$sqlval = $this->objFormParam->getHashArray();
$sqlval = $this->objFormParam->getHashArray();
if (empty($sqlval['test_flg'])) {
    $sqlval['test_flg'] = 0;
} else {
    $sqlval['test_flg'] = 1;
}
$sqlval['update_date'] = "Now()";

というように書き換えます。

さらに、同ファイル285行目当たりにlfInitParamという関数がありますので、そちらを下記のように書き換えます。

function lfInitParam() {
    $this->objFormParam->addParam("カテゴリ名", "category_name", STEXT_LEN, "KVa", array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
    $this->objFormParam->addParam("チェック", "test_flg", STEXT_LEN, "KVa", array());
}


以上で、カテゴリ登録時にチェックボックスにチェックがはいっていると
データベースにチェック情報を登録できるようになるかと思います。

以上、ご参考となればと思います。
taiton
投稿日時: 2013/2/28 13:26
対応状況: −−−
半人前
登録日: 2012/2/10
居住地:
投稿: 11
Re: カテゴリ登録画面にチェックボックスの項目を追加する
ありがとうございます。

試してみましたところ、NULLが登録されてしまい、
カテゴリでそのチェックを入れて登録して、再度編集しようとするとチェックが外れています。

他の部分に何か記述する必要があるのでしょうか?

>monopolistic_flgとtest_flgで名前を分けられた理由はありますでしょうか。
こちらは記述ミスでした。
投稿を修正いたしました。
taiton
投稿日時: 2013/2/28 14:59
対応状況: −−−
半人前
登録日: 2012/2/10
居住地:
投稿: 11
Re: カテゴリ登録画面にチェックボックスの項目を追加する
すみません。勘違いしていたようでして、
dkazutoの記述された様にするとチェックボックスにチェックを入れるとDBに1が登録出来るようになっていました。

ひとつ前に記述した
引用:
>試してみましたところ、NULLが登録されてしまい、
>カテゴリでそのチェックを入れて登録して、再度編集しようとするとチェックが外れています。

は間違いでした。

現状は、
カテゴリでそのチェックを入れて登録するとDBに「1」が登録され、再度編集しようとするとチェックが入ってうまく機能しているようでした。
ところが、チェックを外して再登録すると、「0」を登録するはずが「NULL」が登録されてしまいます。
(データベースのデフォルト値は「0」に設定しています)

これはどこに原因があるかおわかりになりますでしょうか?
dkazuto
投稿日時: 2013/2/28 15:28
対応状況: −−−
一人前
登録日: 2012/5/10
居住地:
投稿: 95
Re: カテゴリ登録画面にチェックボックスの項目を追加する
taiton様

すみません、私の記述ミスでした。
挿入するsqlvalに0を加える場合はクォテーションで囲む必要があるようでした。

以前私が付け加えたif分を以下のように変えてみてください。


if (empty($sqlval['test_flg'])) {
    $sqlval['test_flg'] = '0';
} else {
    $sqlval['test_flg'] = '1';
}


こちらで一度お試しください。

taiton
投稿日時: 2013/3/2 4:17
対応状況: −−−
半人前
登録日: 2012/2/10
居住地:
投稿: 11
Re: カテゴリ登録画面にチェックボックスの項目を追加する
dkazuto様

お返事が遅くなり大変申し訳ありません。
そしてお返事ありがとうございます。

一時出来るようになったDBへの「1」登録も何故か出来なくなってしまい、
その後、別のことでバタバタとしてしまっていてうまく整理できないでおりました。

先程やっと整理させていただきました。
このメッセージに返信する形で現状を書き込みさせていただきます。

ありがとうございました。
taiton
投稿日時: 2013/3/2 4:34
対応状況: −−−
半人前
登録日: 2012/2/10
居住地:
投稿: 11
Re: カテゴリ登録画面にチェックボックスの項目を追加する
if (empty($sqlval['test_flg'])) {
    $sqlval['test_flg'] = '0';
} else {
    $sqlval['test_flg'] = '1';
}


ですが、
ifの後にempty()で囲まれていると、このif文は機能しないようです。
empty()を外すとelseのものが反映されます。
これはチェックボックスに「チェック」が「ある」「ない」に関わらず、elseのものが反映されます。

つまり、
if ($sqlval['test_flg']) {
    $sqlval['test_flg'] = '0';
} else {
    $sqlval['test_flg'] = '1';
}


上記のように記述し、チェックボックスに「チェック」を入れると、
DBに「1」が登録されます。
チェックボックスに「チェック」を入れないで登録しても、
DBに「1」が登録されます。
(これを逆にすると「0」が登録されます。)

この反応を見ていると、
if ($sqlval['test_flg']) 

部分で全てfalse判定になっているようです。

チェックボックスに「チェック」が入っていれば 、
「1」
入っていなければ、
「0」
がDBに登録されるようにしたいです。


この部分どのように記述すれば良いか分かる方いらっしゃいますでしょうか?
よろしくお願いいたします。
dkazuto
投稿日時: 2013/3/14 12:23
対応状況: −−−
一人前
登録日: 2012/5/10
居住地:
投稿: 95
Re: カテゴリ登録画面にチェックボックスの項目を追加する
taiton様

ご返信が遅れ申し訳ありません。

こちらはDBの値がカテゴリ管理画面に反映されないことが問題ではないでしょうか。

順番に整理していきますと、まず
category.tplで


<input type="checkbox" id="importBrand" name="test_flg" value="1" <!--{if $arrForm.test_flg == 1}-->checked="checked"<!--{/if}--> />


のように記述します。

これは、チェックボックスがチェックされていたら1をサーバに送信し、チェックされていなかったらパラメータを送信しないという記述になります。

それによりサーバ側で値を受け取る処理は次のようになります。
LC_Page_Admin_Products_Category.phpの240行目(新規挿入部分)当たりと263行目(編集部分)当たりを以下のようにします。


if (isset($sqlval['test_flg']) && $sqlval['test_flg'] == 1) {
    $sqlval['test_flg'] = '0';
} else {
    $sqlval['test_flg'] = '1';
}


もし、test_flgというパラメータが設定されていれば1をDBに格納し
パラメータが設定されていないか1以外ならば0をDBに格納するという処理を行っています。

※以前私が、お教えしたemptyではチェックしきれない部分があったかと思います。
こちら、失礼致しました。

さらに、管理画面上で編集ボタンを押した際にDBからの値が引き継げるようにする必要もあります。

LC_Page_Admin_Products_Category.phpの117行目当たり(modeのcase: pre_edit内)に以下のような記述を追加します。


$test_flg = $oquery->get("dtb_category", "test_flg", $where, array($_POST['category_id']));
$this->arrForm['test_flg'] = $test_flg;


こちらはDBからtest_flgを取得し、arrFormに格納し、管理画面上で表示させるために利用します。

以上の流れで、新規作成→編集→削除まで正常に行えるかと思います。

よろしくお願いします。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は88,974名です
総投稿数は110,019件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1296
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.