バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 商品マスターページで備考を記入、保存ができるようにしたい

管理機能

新規スレッドを追加する

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
by0448
投稿日時: 2013/9/6 11:15
対応状況: 解決済
長老
登録日: 2011/9/12
居住地: 横浜市
投稿: 186
Re: 商品マスターページで備考を記入、保存ができるようにしたい
yuh 様

ご返答ありがとうございました。

見事に頂いたコードで思い通りの結果が得られました。
本当にありがとうございます。


note[<!--{$arrProducts[cnt].product_id}-->]

というやり方にはまったく想像が及びませんでした。

改めて勉強になりました。


この度は色々な方々にご協力頂き、ありがとうございました。
皆様に感謝いたします。

yuh
投稿日時: 2013/9/5 12:17
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 商品マスターページで備考を記入、保存ができるようにしたい
index.tplに
<textarea name="note[<!--{$arrProducts[cnt].product_id}-->]" cols="50" rows="7" maxlength="99999" style=""><!--{$arrProducts[cnt].note}--></textarea>
<a href="<!--{$smarty.const.ROOT_URLPATH}-->" onclick="fnModeSubmit('upnote', 'product_id', <!--{$arrProducts[cnt].product_id}-->); return false;">UP</a>

を追加で、
LC_Page_Admin_Products_Ex.phpに

    function lfInitParam(&$objFormParam) {
		parent::lfInitParam($objFormParam);
		$objFormParam->addParam("備考欄(SHOP専用)", 'note', LLTEXT_LEN, 'KVa', array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
    }
    function doNote($where, $objFormParam) {
		$objQuery =& SC_Query_Ex::getSingletonInstance();
		$note = $objFormParam->getValue('note');;
		$sqlval['note']     = $note[$objFormParam->getValue('product_id')];
		$sqlval['update_date'] = 'now()';
		$arrParam = array($objFormParam->getValue('product_id'));
		$objQuery->update('dtb_products', $sqlval, $where, $arrParam);
    }
    function action() {

        $objDb = new SC_Helper_DB_Ex();
        $objFormParam = new SC_FormParam_Ex();
        $objProduct = new SC_Product_Ex();
        $objQuery =& SC_Query_Ex::getSingletonInstance();

        // パラメーター情報の初期化
        $this->lfInitParam($objFormParam);
        $objFormParam->setParam($_POST);
        $this->arrHidden = $objFormParam->getSearchArray();
        $this->arrForm = $objFormParam->getFormParamList();

        switch ($this->getMode()) {
		        case 'upnote':
			  $this->doNote("product_id = ?", $objFormParam);
		          $this->tpl_onload = "window.alert('編集が完了しました');";
			break;
            case 'delete':
                // 商品、子テーブル(商品規格)、会員お気に入り商品の削除
                $this->doDelete('product_id = ?', array($objFormParam->getValue('product_id')));
                // 件数カウントバッチ実行
                $objDb->sfCountCategory($objQuery);
                $objDb->sfCountMaker($objQuery);
                // 削除後に検索結果を表示するため breakしない

            // 検索パラメーター生成後に処理実行するため breakしない
            case 'csv':
            case 'delete_all':

            case 'search':
                $objFormParam->convParam();
                $objFormParam->trimParam();
                $this->arrErr = $this->lfCheckError($objFormParam);
                $arrParam = $objFormParam->getHashArray();

                if (count($this->arrErr) == 0) {
                    $where = 'del_flg = 0';
                    $arrWhereVal = array();
                    foreach ($arrParam as $key => $val) {
                        if ($val == '') {
                            continue;
                        }
                        $this->buildQuery($key, $where, $arrWhereVal, $objFormParam, $objDb);
                    }

                    $order = 'update_date DESC';

                    /* -----------------------------------------------
                     * 処理を実行
                     * ----------------------------------------------- */
                    switch ($this->getMode()) {
                        // CSVを送信する。
                        case 'csv':
                            $objCSV = new SC_Helper_CSV_Ex();
                            // CSVを送信する。正常終了の場合、終了。
                            $objCSV->sfDownloadCsv(1, $where, $arrWhereVal, $order, true);
                            SC_Response_Ex::actionExit();

                        // 全件削除(ADMIN_MODE)
                        case 'delete_all':
                            $this->doDelete($where, $arrWhereVal);
                            break;

                        // 検索実行
                        default:
                            // 行数の取得
                            $this->tpl_linemax = $this->getNumberOfLines($where, $arrWhereVal);
                            // ページ送りの処理
                            $page_max = SC_Utils_Ex::sfGetSearchPageMax($objFormParam->getValue('search_page_max'));
                            // ページ送りの取得
                            $objNavi = new SC_PageNavi_Ex($this->arrHidden['search_pageno'],
                                                          $this->tpl_linemax, $page_max,
                                                          'fnNaviSearchPage', NAVI_PMAX);
                            $this->arrPagenavi = $objNavi->arrPagenavi;

                            // 検索結果の取得
                            $this->arrProducts = $this->findProducts($where, $arrWhereVal, $page_max, $objNavi->start_row,
                                                                     $order, $objProduct);

                            // 各商品ごとのカテゴリIDを取得
                            if (count($this->arrProducts) > 0) {
                                foreach ($this->arrProducts as $key => $val) {
                                    $this->arrProducts[$key]['categories'] = $objDb->sfGetCategoryId($val['product_id'], 0, true);
                                    $objDb->g_category_on = false;
                                }
                            }
                    }
                }
                break;
        }

        // カテゴリの読込
        list($this->arrCatKey, $this->arrCatVal) = $objDb->sfGetLevelCatList(false);
        $this->arrCatList = $this->lfGetIDName($this->arrCatKey, $this->arrCatVal);

    }
    function findProducts($where, $arrValues, $limit, $offset, $order, &$objProduct) {
        $objQuery =& SC_Query_Ex::getSingletonInstance();

        // 読み込む列とテーブルの指定
        $col = 'product_id, note,name, main_list_image, status, product_code_min, product_code_max, price02_min, price02_max, stock_min, stock_max, stock_unlimited_min, stock_unlimited_max, update_date';
        $from = $objProduct->alldtlSQL();

        $objQuery->setLimitOffset($limit, $offset);
        $objQuery->setOrder($order);

        return $objQuery->select($col, $from, $where, $arrValues);
    }

を追加でできると思います。
エラーチェックは入れてないので、適当に追加してください。

原因はnoteが複数作成される事で上書きされ、空になる事と
noteのデータが読み出されない事が原因です
by0448
投稿日時: 2013/9/4 22:16
対応状況: −−−
長老
登録日: 2011/9/12
居住地: 横浜市
投稿: 186
Re: 商品マスターページで備考を記入、保存ができるようにしたい
sumida 様

ご返答ありがとうございます。

まったく行き詰ってしまいました。

色々組み合わせを替えておりますが、結局のところ見よう見まねなので悪い原因がどこにあるのかわかっておりません。

引用:

sumidaさんは書きました:
name部分に対し、product_idをキーとした配列を使う手段もありかと思いますが、
(product_idが'1'であれば、'note[1]'というように)
その場合、入力文字に対するエラーチェックがされない。


簡単な一言コメントですので、入力エラーチェックはあまり必要としておりませんでした。


引用:


$objFormParam->addParam("備考欄(SHOP専用)", 'note', LLTEXT_LEN, 'KVa', array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));

これが、無視されるんじゃないかと思います。

できれば、一覧画面ではなく編集画面経由の方が良いのでは。



確かにこの一行は必要ないのだと思いました。
ただ、一覧画面からの入力というものをどうしても設置したいと考えております。
そのせいで行き詰っているわけですが。


他人任せで本当に申し訳ありませんが、良い方法がありましたら、ご教授お願いいたします。

sumida
投稿日時: 2013/9/4 22:00
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: 商品マスターページで備考を記入、保存ができるようにしたい
name部分に対し、product_idをキーとした配列を使う手段もありかと思いますが、
(product_idが'1'であれば、'note[1]'というように)
その場合、入力文字に対するエラーチェックがされない。

$objFormParam->addParam("備考欄(SHOP専用)", 'note', LLTEXT_LEN, 'KVa', array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));

これが、無視されるんじゃないかと思います。

できれば、一覧画面ではなく編集画面経由の方が良いのでは。
by0448
投稿日時: 2013/9/4 20:32
対応状況: −−−
長老
登録日: 2011/9/12
居住地: 横浜市
投稿: 186
Re: 商品マスターページで備考を記入、保存ができるようにしたい
bratech 様

ご返答ありがとうございます。

確かに、商品の一番最後のテキストエリアの中身が引っ張られていました。

そこで、以下のように変更しましたところ、今度は先頭のテキストエリア内の情報しか引っ張ってくれなくなりました。



<form name="form2" id="form2" method="post" action="?">
<div class="under_comment">
<textarea name="note" cols="18" rows="7" maxlength="99999" style=""><!--{$arrProducts[cnt].note}--></textarea>
<p class="buttun"><a href="<!--{$smarty.const.ROOT_URLPATH}-->" onclick="fnModeSubmit('upnote', 'product_id', <!--{$arrProducts[cnt].product_id}-->); return true;"><input type="submit" value=" 保存 "></a></p>
</form>



もう一歩というところまで来ております。
また手を尽くしてみようかと思います。

bratech
投稿日時: 2013/9/4 19:48
対応状況: −−−
長老
登録日: 2008/11/28
居住地: 福岡
投稿: 223
Re: 商品マスターページで備考を記入、保存ができるようにしたい
引用:


292行目付近に以下を追加
<textarea name="note" cols="50" rows="7" maxlength="99999" style=""><!--{$arrProducts[cnt].note}--></textarea>
<a href="<!--{$smarty.const.ROOT_URLPATH}-->" onclick="fnModeSubmit('upnote', 'product_id', <!--{$arrProducts[cnt].product_id}-->); return false;">UP</a>



テンプレートにこのように記述されているようですが
この記述ですと、name属性が"note"となるテキストエリアがページ内に表示された商品数分生成される事になります。

この状態ですと、$_POST['note']に入る値は
おそらく一番最後の商品のテキストエリアの値になってしまいます。
ですので変更をかけたい商品のテキストエリアに記述した内容は反映されません。

すべてのテキストエリアを個別に扱うような方法に変更されれば解決出来るのではないでしょうか。

ご参考まで。


----------------
★売れる通販サイト作ります! ========================
(株)ブラテック EC-CUBEカスタマイズサービス
http://www.bratech.co.jp/lpo/eccube.html
==============================================

by0448
投稿日時: 2013/9/4 19:36
対応状況: −−−
長老
登録日: 2011/9/12
居住地: 横浜市
投稿: 186
Re: 商品マスターページで備考を記入、保存ができるようにしたい
sumida 様

ご返答ありがとうございます。
ご提示いただいた部分ですが、以下のように記述しております。


    function findProducts($where, $arrValues, $limit, $offset, $order, &$objProduct) {
        $objQuery =& SC_Query_Ex::getSingletonInstance();

        // 読み込む列とテーブルの指定
        $col = "product_id, name,  main_image, deliv_date_id, note, status, product_code_min, product_code_max, price02_min, price02_max, stock_min, stock_max, stock_unlimited_min, stock_unlimited_max, update_date";
        $from = $objProduct->alldtlSQL('del_flg = 0');
		
        $objQuery->setLimitOffset($limit, $offset);
        $objQuery->setOrder($order);

        return $objQuery->select($col, $from, $where, $arrValues);
    }



$col の方にはnoteは引っ張っていますので、直接DBに入力したものは表示できております。



nanasess 様

ご返答ありがとうございます。


>>登録確認画面で hidden に渡ってないとか??


商品マスターページからの登録を希望しておりまして、確認画面は介さないようにしているつもりです。
ですので、その介さない方法のせいで、情報が渡ってないのかもしれません。


よろしければ、ご教授いただけましたら幸いです。

nanasess
投稿日時: 2013/9/4 19:21
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2314
Re: 商品マスターページで備考を記入、保存ができるようにしたい
登録確認画面で hidden に渡ってないとか??
sumida
投稿日時: 2013/9/4 18:50
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: 商品マスターページで備考を記入、保存ができるようにしたい
LC_Page_Admin_Products.php

    function findProducts($where, $arrValues, $limit, $offset, $order, &$objProduct) {
        $objQuery =& SC_Query_Ex::getSingletonInstance();

        // 読み込む列とテーブルの指定
        $col = 'product_id, name, main_list_image, status, product_code_min, product_code_max, price02_min, price02_max, stock_min, stock_max, stock_unlimited_min, stock_unlimited_max, update_date';
        $from = $objProduct->alldtlSQL();

        $objQuery->setLimitOffset($limit, $offset);
        $objQuery->setOrder($order);

        return $objQuery->select($col, $from, $where, $arrValues);
    }

$col に'note'を加えなければ、DBから持って来ない。のかな?
でも、登録できているから、これは、はずしてるのかな。
by0448
投稿日時: 2013/9/4 18:10
対応状況: −−−
長老
登録日: 2011/9/12
居住地: 横浜市
投稿: 186
Re: 商品マスターページで備考を記入、保存ができるようにしたい
お世話になります。

試行錯誤してもまったくわからず、ある一点のみが問題なのに、どうにも解決に至りません。


function doNote($where, $objFormParam) {
        $objQuery =& SC_Query_Ex::getSingletonInstance();
        $sqlval['note']     = $objFormParam->getValue('note');
        $sqlval['update_date'] = 'now()';
		$arrParam = array($objFormParam->getValue('product_id'));
        $objQuery->update('dtb_products', $sqlval, $where, $arrParam);
    }


問題がこの一点にあることがわかっております

        $sqlval['note']     = $objFormParam->getValue('note');
   上の一行を以下のように変更↓
        $sqlval['note']     = 'test';



このようにした場合、データベースには『test』はUPされております。
ということは
$objFormParam->getValue('note');


の部分に情報が渡っていないという事になります。

これはどこかの記述が足らないのか、それともこの箇所の記述が違うのか、見当がつきません。
何度も質問をして申し訳ありませんが、どなたかご教授をよろしくお願いいたします。


(1) 2 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は89,097名です
総投稿数は110,033件です

投稿数ランキング

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