質問 > 管理機能 > 管理機能>メーカー登録 に画像アップロード機能を追加したい |
管理機能
フラット表示 | 前のトピック | 次のトピック |
投稿者 | スレッド |
---|---|
beginner14 |
投稿日時: 2014/5/28 1:40
対応状況: 開発中
|
半人前 登録日: 2014/5/17 居住地: 投稿: 11 |
Re: 管理機能>メーカー登録 に画像アップロード機能を追加したい AMUAMU様
お世話になっております。 貴重なアドバイスを頂きまして誠にありがとうございます。 仰る通りで、シンプルに画像をアップロードするカスタマイズをするだけでございます。 早速、PaymentInputを真似してmakerをカスタマイズしてみましたところ、 画像のアップロードボタンを押すと画像は表示されるようになりましたが、 DBへの登録がうまくできませんでした。 大変恐縮ですが、もし宜しければうまく動作するようなアドバイスを頂くことはできませんでしょうか。 何卒よろしくお願いいたします。 下記のようにmaker.phpとテンプレートを変更しました。 admin/products/LC_Page_Admin_Products_Maker.php <?php require_once CLASS_EX_REALDIR . 'page_extends/admin/LC_Page_Admin_Ex.php'; class LC_Page_Admin_Products_Maker extends LC_Page_Admin_Ex { var $objUpFile; function init() { parent::init(); $this->tpl_mainpage = 'products/maker.tpl'; $this->tpl_subno = 'maker'; $this->tpl_maintitle = '商品管理'; $this->tpl_subtitle = 'メーカー登録'; $this->tpl_mainno = 'products'; } function process() { $this->action(); $this->sendResponse(); } function action() { $objFormParam = new SC_FormParam_Ex(); $mode = $this->getMode(); // パラメーター情報の初期化 $this->lfInitParam($mode, $objFormParam); // POST値をセット $objFormParam->setParam($_POST); // POST値の入力文字変換 $objFormParam->convParam(); //maker_idを変数にセット $maker_id = $objFormParam->getValue('maker_id'); // 変換後のPOST値を取得 $this->arrForm1 = $objFormParam->getHashArray(); // モードによる処理切り替え switch ($this->getMode()) { // 編集処理 case 'edit': // 入力文字の変換 // エラーチェック $this->arrErr = $this->lfCheckError($this->arrForm1, $objFormParam); if (count($this->arrErr) <= 0) { if ($this->arrForm1['maker_id'] == '') { // メーカー情報新規登録 $this->lfInsert($this->arrForm1); } else { // メーカー情報編集 $this->lfUpdate($this->arrForm1); } // 再表示 $this->objDisplay->reload(); } else { // POSTデータを引き継ぐ $this->tpl_maker_id = $this->arrForm1['maker_id']; } break; // 編集前処理 case 'pre_edit': $this->arrForm1 = $this->lfPreEdit($this->arrForm, $this->arrForm1['maker_id']); $this->tpl_maker_id = $this->arrForm1['maker_id']; break; // メーカー順変更 case 'up': case 'down': $this->lfRankChange($this->arrForm1['maker_id'], $this->getMode()); // リロード SC_Response_Ex::reload(); break; // 削除 case 'delete': $this->lfDelete($this->arrForm1['maker_id']); // リロード SC_Response_Ex::reload(); break; default: break; } // メーカー情報読み込み $this->arrMaker = $this->lfDisp(); // POSTデータを引き継ぐ $this->tpl_maker_id = $maker_id; // ファイル管理クラス $this->objUpFile = new SC_UploadFile(IMAGE_TEMP_REALDIR, IMAGE_SAVE_REALDIR); // ファイル情報の初期化 $this->objUpFile = $this->lfInitFile(); // Hiddenからのデータを引き継ぐ $this->objUpFile->setHiddenFileList($_POST); switch ($mode) { case 'edit': $objFormParam->setParam($_REQUEST); $objFormParam->convParam(); $post = $objFormParam->getHashArray(); $this->arrErr = $this->lfCheckError($post, $objFormParam, $objPayment); $this->charge_flg = $post['charge_flg']; if (count($this->arrErr) == 0) { $this->lfRegistData($objFormParam, $objPayment, $_SESSION['member_id'], $post['maker_id']); $this->objUpFile->moveTempFile(); $this->tpl_onload = "location.href = './maker.php'; return;"; } $this->tpl_maker_id = $post['maker_id']; break; // 画像のアップロード case 'upload_image': $objFormParam->setParam($_REQUEST); $objFormParam->convParam(); $post = $objFormParam->getHashArray(); // ファイル存在チェック $this->arrErr = $this->objUpFile->checkExists($post['image_key']); // 画像保存処理 $this->arrErr[$post['image_key']] = $this->objUpFile->makeTempFile($post['image_key']); $this->tpl_maker_id = $post['maker_id']; break; // 画像の削除 case 'delete_image': $objFormParam->setParam($_REQUEST); $objFormParam->convParam(); $this->arrErr = $objFormParam->checkError(); $post = $objFormParam->getHashArray(); if (count($this->arrErr) == 0) { $this->objUpFile->deleteFile($post['image_key']); } $this->tpl_payment_id = $post['maker_id']; break; case 'pre_edit': $objFormParam->setParam($_REQUEST); $objFormParam->convParam(); $this->arrErr = $objFormParam->checkError(); $post = $objFormParam->getHashArray(); if (count($this->arrErr) == 0) { $arrRet = $objPayment->get($post['maker_id']); $objFormParam->setParam($arrRet); $this->charge_flg = $arrRet['charge_flg']; $this->objUpFile->setDBFileList($arrRet); } $this->tpl_maker_id = $post['maker_id']; break; default: break; } $this->arrFor1m = $objFormParam->getFormParamList(); // FORM表示用配列を渡す。 $this->arrFile = $this->objUpFile->getFormFileList(IMAGE_TEMP_URLPATH, IMAGE_SAVE_URLPATH); // HIDDEN用に配列を渡す。 $this->arrHidden = array_merge((array)$this->arrHidden, (array)$this->objUpFile->getHiddenFileList()); } /** * デストラクタ. * * @return void */ function destroy() { parent::destroy(); } /** * パラメーター情報の初期化を行う. * * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @return void */ function lfInitParam($mode, &$objFormParam) { $objFormParam->addParam('メーカーID', 'maker_id', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('メーカー名', 'name', SMTEXT_LEN, 'KVa', array('EXIST_CHECK','SPTAB_CHECK','MAX_LENGTH_CHECK')); $objFormParam->addParam('メーカー画像', 'main_image', SMTEXT_LEN, 'KVa', array('SPTAB_CHECK','MAX_LENGTH_CHECK')); switch ($mode) { case 'edit': $objFormParam->addParam('支払方法', 'payment_method', STEXT_LEN, 'KVa', array('EXIST_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('手数料', 'charge', PRICE_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('利用条件(〜円以上)', 'rule_max', PRICE_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('利用条件(〜円以下)', 'upper_rule', PRICE_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('固定', 'fix'); $objFormParam->addParam('支払いID', 'payment_id', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('課金フラグ', 'charge_flg', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); break; case 'upload_image': case 'delete_image': $objFormParam->addParam('支払いID', 'maker_id', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('支払方法', 'maker_id', STEXT_LEN, 'KVa', array('EXIST_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('手数料', 'charge', PRICE_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('利用条件(〜円以上)', 'rule_max', PRICE_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('利用条件(〜円以下)', 'upper_rule', PRICE_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('固定', 'fix'); $objFormParam->addParam('画像キー', 'image_key', STEXT_LEN, 'KVa', array('EXIST_CHECK', 'MAX_LENGTH_CHECK')); break; case 'pre_edit': $objFormParam->addParam('支払いID', 'maker_id', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('課金フラグ', 'charge_flg', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); break; default: $objFormParam->addParam('支払方法', 'payment_method', STEXT_LEN, 'KVa', array('EXIST_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('手数料', 'charge', PRICE_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('利用条件(〜円以上)', 'rule_max', PRICE_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('利用条件(〜円以下)', 'upper_rule', PRICE_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('固定', 'fix'); break; } } /** * メーカー情報表示. * * @return array $arrMaker メーカー情報 */ function lfDisp() { $objQuery =& SC_Query_Ex::getSingletonInstance(); // 削除されていないメーカー情報を表示する $where = 'del_flg = 0'; $objQuery->setOrder('rank DESC'); $arrMaker = array(); $arrMaker = $objQuery->select('maker_id, name,main_image', 'dtb_maker', $where); return $arrMaker; } /** * メーカー情報新規登録. * * @param array $arrForm メーカー情報 * @return void */ function lfInsert(&$arrForm) { $objQuery =& SC_Query_Ex::getSingletonInstance(); // INSERTする値を作成する $sqlval['name'] = $arrForm['name']; $sqlval['main_image'] = $arrForm['main_image']; $sqlval['rank'] = $objQuery->max('rank', 'dtb_maker') + 1; $sqlval['creator_id'] = $_SESSION['member_id']; $sqlval['update_date'] = 'CURRENT_TIMESTAMP'; $sqlval['create_date'] = 'CURRENT_TIMESTAMP'; $sqlval['maker_id'] = $objQuery->nextVal('dtb_maker_maker_id'); // INSERTの実行 $objQuery->insert('dtb_maker', $sqlval); } /** * メーカー情報更新. * * @param array $arrForm メーカー情報 * @return void */ function lfUpdate(&$arrForm) { $objQuery =& SC_Query_Ex::getSingletonInstance(); // UPDATEする値を作成する $sqlval['name'] = $arrForm['name']; $sqlval['main_image'] = $arrForm['main_image']; $sqlval['update_date'] = 'CURRENT_TIMESTAMP'; $where = 'maker_id = ?'; // UPDATEの実行 $objQuery->update('dtb_maker', $sqlval, $where, array($arrForm['maker_id'])); } /** * メーカー情報削除. * * @param integer $maker_id メーカーID * @return void */ function lfDelete($maker_id) { $objDb = new SC_Helper_DB_Ex(); $objDb->sfDeleteRankRecord('dtb_maker', 'maker_id', $maker_id, '', true); } /** * メーカー情報順番変更. * * @param integer $maker_id メーカーID * @param string $mode up か down のモードを示す文字列 * @return void */ function lfRankChange($maker_id, $mode) { $objDb = new SC_Helper_DB_Ex(); switch ($mode) { case 'up': $objDb->sfRankUp('dtb_maker', 'maker_id', $maker_id); break; case 'down': $objDb->sfRankDown('dtb_maker', 'maker_id', $maker_id); break; default: break; } } /** * メーカー情報編集前処理. * * @param array $arrForm メーカー情報 * @param integer $maker_id メーカーID * @return array $arrForm メーカー名を追加 */ function lfPreEdit(&$arrForm, $maker_id) { $objQuery =& SC_Query_Ex::getSingletonInstance(); // 編集項目を取得する $where = 'maker_id = ?'; $arrMaker = array(); $arrMaker = $objQuery->select('name', 'dtb_maker', $where, array($maker_id)); $arrForm1['name'] = $arrMaker[0]['name']; return $arrForm; } /** * 入力エラーチェック. * * @param array $arrForm メーカー情報 * @return array $objErr->arrErr エラー内容 */ function lfCheckError(&$arrForm, &$objFormParam) { $arrErr = $objFormParam->checkError(); if (!empty($arrErr)) { return $arrErr; } // maker_id の正当性チェック if (!empty($arrForm['maker_id'])) { $objDb = new SC_Helper_DB_Ex(); if (!SC_Utils_Ex::sfIsInt($arrForm['maker_id']) || SC_Utils_Ex::sfIsZeroFilling($arrForm['maker_id']) || !$objDb->sfIsRecord('dtb_maker', 'maker_id', array($arrForm['maker_id'])) ) { // maker_idが指定されていて、且つその値が不正と思われる場合はエラー $arrErr['maker_id'] = '※ メーカーIDが不正です<br />'; } } if (!isset($arrErr['name'])) { $objQuery =& SC_Query_Ex::getSingletonInstance(); $arrMaker = array(); $arrMaker = $objQuery->select('maker_id, name', 'dtb_maker', 'del_flg = 0 AND name = ?', array($arrForm['name'])); // 編集中のレコード以外に同じ名称が存在する場合 if ($arrMaker[0]['maker_id'] != $arrForm['maker_id'] && $arrMaker[0]['name'] == $arrForm['name']) { $arrErr['name'] = '※ 既に同じ内容の登録が存在します。<br />'; } } return $arrErr; } /* ファイル情報の初期化 */ function lfInitFile() { $this->objUpFile->addFile('ロゴ画像', 'maker_image', array('gif','jpeg','jpg','png'), IMAGE_SIZE, false, CLASS_IMAGE_WIDTH, CLASS_IMAGE_HEIGHT); return $this->objUpFile; } /* DBへデータを登録する */ function lfRegistData(&$objFormParam, SC_Helper_Maker_Ex $objPayment, $member_id, $maker_id = '') { $sqlval = array_merge($objFormParam->getHashArray(), $this->objUpFile->getDBFileList()); $sqlval['update_date'] = 'CURRENT_TIMESTAMP'; $sqlval['maker_id'] = $maker_id; $sqlval['name'] = $name; $sqlval['main_image'] = $main_image; if ($sqlval['fix'] != '1') { $sqlval['fix'] = 2; // 自由設定 } $objPayment->save($sqlval); function lfCheckError($post, $objFormParam, SC_Helper_Maker_Ex $objPayment) { // DBのデータを取得 $arrPaymentData = $objPayment->get($post['maker_id']); // 手数料を設定できない場合には、手数料を0にする if ($arrPaymentData['charge_flg'] == 2) { $objFormParam->setValue('charge', '0'); } // 入力データを渡す。 $arrRet = $objFormParam->getHashArray(); $objErr = new SC_CheckError_Ex($arrRet); $objErr->arrErr = $objFormParam->checkError(); // 利用条件(下限)チェック if ($arrRet['rule_max'] < $arrPaymentData['rule_min'] and $arrPaymentData['rule_min'] != '') { $objErr->arrErr['rule'] = '利用条件(下限)は' . $arrPaymentData['rule_min'] .'円以上にしてください。<br>'; } // 利用条件(上限)チェック if ($arrRet['upper_rule'] > $arrPaymentData['upper_rule_max'] and $arrPaymentData['upper_rule_max'] != '') { $objErr->arrErr['upper_rule'] = '利用条件(上限)は' . $arrPaymentData['upper_rule_max'] .'円以下にしてください。<br>'; } // 利用条件チェック $objErr->doFunc(array('利用条件(〜円以上)', '利用条件(〜円以下)', 'rule_max', 'upper_rule'), array('GREATER_CHECK')); return $objErr->arrErr; } } } admin/products/maker.tpl <form name="form1" id="form1" method="post" action="./maker.php" enctype="multipart/form-data"> <input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" /> <input type="hidden" name="mode" value="edit" /> <input type="hidden" name="maker_id" value="<!--{$tpl_maker_id}-->" /> <input type="hidden" name="image_key" value="" /> <input type="hidden" name="fix" value="<!--{$arrForm.fix.value}-->" /> <!--{foreach key=key item=item from=$arrHidden}--> <input type="hidden" name="<!--{$key}-->" value="<!--{$item|h}-->" /> <!--{/foreach}--> <input type="hidden" name="charge_flg" value="<!--{$charge_flg}-->" /> <div id="products" class="contents-main"> <table class="form"> <tr> <th>メーカー名<span class="attention"> *</span></th> <td> <!--{if $arrErr.maker_id}--><span class="attention"><!--{$arrErr.maker_id}--></span><br /><!--{/if}--> <!--{if $arrErr.name}--><span class="attention"><!--{$arrErr.name}--></span><!--{/if}--> <input type="text" name="name" value="<!--{$arrForm1.name|h}-->" maxlength="<!--{$smarty.const.SMTEXT_LEN}-->" style="" size="60" class="box60"/> <span class="attention"> (上限<!--{$smarty.const.SMTEXT_LEN}-->文字)</span> </td> </tr> <tr> <th>ロゴ画像</th> <td> <!--{assign var=key value="maker_image"}--> <span class="attention"><!--{$arrErr[$key]}--></span> <!--{if $arrFile[$key].filepath != ""}--> <img src="<!--{$arrFile[$key].filepath}-->" alt="<!--{$arrForm.main_image|h}-->"> <br /><a href="" onclick="fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br /> <!--{/if}--> <input type="file" name="<!--{$key}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" /> <a class="btn-normal" href="java script:;" name="btn" onclick="fnModeSubmit('upload_image', 'image_key', '<!--{$key}-->'); return false;">アップロード</a> </td> </tr> </table> <div class="btn-area"> <ul> <li><a class="btn-action" href="java script:;" onclick="fnFormModeSubmit('form1', 'edit', '', ''); return false;"><span class="btn-next">この内容で登録する</span></a></li> </ul> </div> <!--{if count($arrMaker) > 0}--> <table class="list"> <col width="10%" /> <col width="50%" /> <col width="10%" /> <col width="10%" /> <col width="20%" /> <tr> <th>ID</th> <th>メーカー</th> <th class="edit">編集</th> <th class="delete">削除</th> <th>移動</th> </tr> <!--{section name=cnt loop=$arrMaker}--> <tr style="background:<!--{if $tpl_maker_id != $arrMaker[cnt].maker_id}-->#ffffff<!--{else}--><!--{$smarty.const.SELECT_RGB}--><!--{/if}-->;"> <!--{assign var=maker_id value=$arrMaker[cnt].maker_id}--> <td><!--{$maker_id|h}--></td> <td><!--{$arrMaker[cnt].name|h}--></td> <td class="center"> <!--{if $tpl_maker_id != $arrMaker[cnt].maker_id}--> <a href="?" onclick="fnModeSubmit('pre_edit', 'maker_id', <!--{$arrMaker[cnt].maker_id}-->); return false;">編集</a> <!--{else}--> 編集中 <!--{/if}--> </td> <td class="center"> <!--{if $arrClassCatCount[$class_id] > 0}--> - <!--{else}--> <a href="?" onclick="fnModeSubmit('delete', 'maker_id', <!--{$arrMaker[cnt].maker_id}-->); return false;">削除</a> <!--{/if}--> </td> <td class="center"> <!--{if $smarty.section.cnt.iteration != 1}--> <a href="?" onclick="fnModeSubmit('up', 'maker_id', <!--{$arrMaker[cnt].maker_id}-->); return false;" />上へ</a> <!--{/if}--> <!--{if $smarty.section.cnt.iteration != $smarty.section.cnt.last}--> <a href="?" onclick="fnModeSubmit('down', 'maker_id', <!--{$arrMaker[cnt].maker_id}-->); return false;" />下へ</a> <!--{/if}--> </td> </tr> <!--{/section}--> </table> <!--{/if}--> </div> </form> |
フラット表示 | 前のトピック | 次のトピック |
題名 | 投稿者 | 日時 |
---|---|---|
管理機能>メーカー登録 に画像アップロード機能を追加したい | beginner14 | 2014/5/25 22:51 |
Re: 管理機能>メーカー登録 に画像アップロード機能を追加したい | AMUAMU | 2014/5/27 17:02 |
» Re: 管理機能>メーカー登録 に画像アップロード機能を追加したい | beginner14 | 2014/5/28 1:40 |
Re: 管理機能>メーカー登録 に画像アップロード機能を追加したい | AMUAMU | 2014/5/28 13:37 |
Re: 管理機能>メーカー登録 に画像アップロード機能を追加したい | beginner14 | 2014/5/30 1:39 |
Re: 管理機能>メーカー登録 に画像アップロード機能を追加したい | shutta | 2014/5/30 9:43 |
Re: 管理機能>メーカー登録 に画像アップロード機能を追加したい | beginner14 | 2014/5/31 3:14 |
Re: 管理機能>メーカー登録 に画像アップロード機能を追加したい | shutta | 2014/6/2 13:23 |
Re: 管理機能>メーカー登録 に画像アップロード機能を追加したい | beginner14 | 2014/6/3 21:02 |