質問 > 管理機能 > v2.13 画像のアップロードにつきまして |
管理機能
フラット表示 | 前のトピック | 次のトピック |
投稿者 | スレッド |
---|---|
ma-ma |
投稿日時: 2017/5/12 12:32
対応状況: −−−
|
常連 登録日: 2014/9/22 居住地: 投稿: 55 |
Re: v2.13 画像のアップロードにつきまして 468様
ご返信ありがとうございます。 ご教示いただた通り行ったところ、 Javascriptのエラーはなくなったのですが、 画像のアップロードが正常にできませんでした。 LC_Page_Admin_Products_Category.phpのfunction action()部分と追加メソッド部分と category.tplの追記した部分を下記に載せさせて頂きますので、 大変恐れ入りますがご教示いただけませんでしょうか? よろしくお願いいたします。 ------------- 【LC_Page_Admin_Products_Category.php】 public function action() { $objFormParam = new SC_FormParam_Ex(); $objCategory = new SC_Helper_Category_Ex(); $objUpFile = new SC_UploadFile_Ex(IMAGE_TEMP_REALDIR, IMAGE_SAVE_REALDIR); $objDownFile = new SC_UploadFile_Ex(DOWN_TEMP_REALDIR, DOWN_SAVE_REALDIR); // 入力パラメーター初期化 $this->initParam($objFormParam); $objFormParam->setParam($_POST); $objFormParam->convParam(); // アップロードファイル情報の初期化 $this->lfInitFile($objUpFile); $objUpFile->setHiddenFileList($_POST); $mode = $this->getMode(); switch ($this->getMode()) { // カテゴリ登録/編集実行 case 'edit': $this->doEdit($objFormParam); break; // 入力ボックスへ編集対象のカテゴリ名をセット case 'pre_edit': $this->doPreEdit($objFormParam); break; // カテゴリ削除 case 'delete': $this->doDelete($objFormParam); break; // 表示順を上へ case 'up': $this->doUp($objFormParam); break; // 表示順を下へ case 'down': $this->doDown($objFormParam); break; // FIXME r19909 によってテンプレートが削除されている case 'moveByDnD': // DnDしたカテゴリと移動先のセットを分解する $keys = explode('-', $_POST['keySet']); if ($keys[0] && $keys[1]) { $objQuery =& SC_Query_Ex::getSingletonInstance(); $objQuery->begin(); // 移動したデータのrank、level、parent_category_idを取得 $rank = $objQuery->get('rank', 'dtb_category', 'category_id = ?', array($keys[0])); $level = $objQuery->get('level', 'dtb_category', 'category_id = ?', array($keys[0])); $parent = $objQuery->get('parent_category_id', 'dtb_category', 'category_id = ?', array($keys[0])); // 同一level内のrank配列を作成 $objQuery->setOption('ORDER BY rank DESC'); if ($level == 1) { // 第1階層の時 $arrRet = $objQuery->select('rank', 'dtb_category', 'level = ?', array($level)); } else { // 第2階層以下の時 $arrRet = $objQuery->select('rank', 'dtb_category', 'level = ? AND parent_category_id = ?', array($level, $parent)); } for ($i = 0; $i < sizeof($arrRet); $i++) { $rankAry[$i + 1] = $arrRet[$i]['rank']; } // 移動したデータのグループ内データ数 $my_count = $this->lfCountChilds($objQuery, 'dtb_category', 'parent_category_id', 'category_id', $keys[0]); if ($rankAry[$keys[1]] > $rank) { // データが今の位置より上がった時 $up_count = $rankAry[$keys[1]] - $rank; $decAry = $objQuery->select('category_id', 'dtb_category', 'level = ? AND rank > ? AND rank <= ?', array($level, $rank, $rankAry[$keys[1]])); foreach ($decAry as $value) { // 上のグループから減算 $this->lfDownRankChilds($objQuery, 'dtb_category', 'parent_category_id', 'category_id', $value['category_id'], $my_count); } // 自分のグループに加算 $this->lfUpRankChilds($objQuery, 'dtb_category', 'parent_category_id', 'category_id', $keys[0], $up_count); } elseif ($rankAry[$keys[1]] < $rank) { // データが今の位置より下がった時 $down_count = 0; $incAry = $objQuery->select('category_id', 'dtb_category', 'level = ? AND rank < ? AND rank >= ?', array($level, $rank, $rankAry[$keys[1]])); foreach ($incAry as $value) { // 下のグループに加算 $this->lfUpRankChilds($objQuery, 'dtb_category', 'parent_category_id', 'category_id', $value['category_id'], $my_count); // 合計減算値 $down_count += $this->lfCountChilds($objQuery, 'dtb_category', 'parent_category_id', 'category_id', $value['category_id']); } // 自分のグループから減算 $this->lfDownRankChilds($objQuery, 'dtb_category', 'parent_category_id', 'category_id', $keys[0], $down_count); } $objQuery->commit(); } break; // カテゴリツリークリック時 case 'tree': break; // CSVダウンロード case 'csv': // CSVを送信する $objCSV = new SC_Helper_CSV_Ex(); $objCSV->sfDownloadCsv('5', '', array(), '', true); SC_Response_Ex::actionExit(); break; default: break; } $parent_category_id = $objFormParam->getValue('parent_category_id'); // 空の場合は親カテゴリを0にする if (empty($parent_category_id)) { $parent_category_id = 0; } // 親カテゴリIDの保持 $this->arrForm['parent_category_id'] = $parent_category_id; // カテゴリ一覧を取得 $this->arrList = $this->findCategoiesByParentCategoryId($parent_category_id); // カテゴリツリーを取得 $this->arrTree = $objCategory->getTree(); $this->arrParentID = $objCategory->getTreeTrail($parent_category_id); // ぱんくずの生成 $arrBread = $objCategory->getTreeTrail($this->arrForm['parent_category_id'], FALSE); $this->tpl_bread_crumbs = SC_Utils_Ex::jsonEncode(array_reverse($arrBread)); switch ($mode) { case 'complete': // 一時ファイルを本番ディレクトリに移動する $this->lfSaveUploadFiles($objUpFile, $objDownFile, $product_id); // 画像のアップロード case 'upload_image': case 'delete_image': // パラメーター初期化 $this->lfInitFormParam_UploadImage($objFormParam); $this->lfInitFormParam($objFormParam, $_POST); $arrForm = $objFormParam->getHashArray(); switch ($mode) { case 'upload_image': // ファイルを一時ディレクトリにアップロード $this->arrErr[$arrForm['image_key']] = $objUpFile->makeTempFile($arrForm['image_key'], IMAGE_RENAME); if ($this->arrErr[$arrForm['image_key']] == '') { // 縮小画像作成 $this->lfSetScaleImage($objUpFile, $arrForm['image_key']); } break; case 'delete_image': // ファイル削除 $this->lfDeleteTempFile($objUpFile, $arrForm['image_key']); break; default: break; } // 入力画面表示設定 $this->arrForm = $this->lfSetViewParam_InputPage($objUpFile, $objDownFile, $arrForm); // ページonload時のJavaScript設定 $anchor_hash = $this->getAnchorHash($arrForm['image_key']); $this->tpl_onload = $anchor_hash; break; } } /*追記メソッド*/ /** * アップロードファイルパラメーター情報の初期化 * - 画像ファイル用 * * @param SC_UploadFile_Ex $objUpFile SC_UploadFileインスタンス * @return void */ public function lfInitFile(&$objUpFile) { //$this->objUpFile->addFile('メイン画像', 'main_image', array('gif','jpeg','jpg','png'), IMAGE_SIZE, false, CLASS_IMAGE_WIDTH, CLASS_IMAGE_HEIGHT); $objUpFile->addFile('メイン画像', 'main_image', array('jpg', 'gif', 'png'), IMAGE_SIZE, false, SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT); } /** * パラメーター情報の初期化 * - 画像ファイルアップロードモード * * @param SC_FormParam_Ex $objFormParam SC_FormParamインスタンス * @return void */ public function lfInitFormParam_UploadImage(&$objFormParam) { $objFormParam->addParam('image_key', 'image_key', '', '', array()); } public function lfInitFormParam(&$objFormParam, $arrPost) { } /** * 縮小した画像をセットする * * @param SC_UploadFile_Ex $objUpFile SC_UploadFileインスタンス * @param string $image_key 画像ファイルキー * @return void */ public function lfSetScaleImage(&$objUpFile, $image_key) { $subno = str_replace('sub_large_image', '', $image_key); switch ($image_key) { case 'main_large_image': // 詳細メイン画像 $this->lfMakeScaleImage($objUpFile, $image_key, 'main_image'); case 'main_image': // 一覧メイン画像 $this->lfMakeScaleImage($objUpFile, $image_key, 'main_image'); break; case 'sub_large_image' . $subno: // サブメイン画像 $this->lfMakeScaleImage($objUpFile, $_POST['image_key'], 'sub_image' . $subno); break; default: break; } } /** * 画像ファイルのコピー * * @param object $objUpFile SC_UploadFileインスタンス * @return void */ public function lfCopyProductImageFiles(&$objUpFile) { $arrKey = $objUpFile->keyname; $arrSaveFile = $objUpFile->save_file; foreach ($arrSaveFile as $key => $val) { $this->lfMakeScaleImage($objUpFile, $arrKey[$key], $arrKey[$key], true); } } /** * アンカーハッシュ文字列を取得する * アンカーキーをサニタイジングする * * @param string $anchor_key フォーム入力パラメーターで受け取ったアンカーキー * @return <type> */ public function getAnchorHash($anchor_key) { if ($anchor_key != '') { return "location.hash='#" . htmlspecialchars($anchor_key) . "'"; } else { return ''; } } /** * 表示用フォームパラメーター取得 * - 入力画面 * * @param SC_UploadFile_Ex $objUpFile SC_UploadFileインスタンス * @param SC_UploadFile_Ex $objDownFile SC_UploadFileインスタンス * @param array $arrForm フォーム入力パラメーター配列 * @return array 表示用フォームパラメーター配列 */ public function lfSetViewParam_InputPage(&$objUpFile, &$objDownFile, &$arrForm) { // カテゴリマスターデータ取得 $objDb = new SC_Helper_DB_Ex(); list($this->arrCatVal, $this->arrCatOut) = $objDb->sfGetLevelCatList(false); if (isset($arrForm['category_id']) && !is_array($arrForm['category_id'])) { $arrForm['category_id'] = SC_Utils_Ex::jsonDecode($arrForm['category_id']); } $this->tpl_json_category_id = !empty($arrForm['category_id']) ? SC_Utils_Ex::jsonEncode($arrForm['category_id']) : SC_Utils_Ex::jsonEncode(array()); if ($arrForm['status'] == '') { $arrForm['status'] = DEFAULT_PRODUCT_DISP; } if ($arrForm['product_type_id'] == '') { $arrForm['product_type_id'] = DEFAULT_PRODUCT_DOWN; } if (OPTION_PRODUCT_TAX_RULE) { // 編集の場合は設定された税率、新規の場合はデフォルトの税率を取得 if ($arrForm['product_id'] == '') { $arrRet = SC_Helper_TaxRule_Ex::getTaxRule(); } else { $arrRet = SC_Helper_TaxRule_Ex::getTaxRule($arrForm['product_id'], $arrForm['product_class_id']); } $arrForm['tax_rate'] = $arrRet['tax_rate']; } // アップロードファイル情報取得(Hidden用) $arrHidden = $objUpFile->getHiddenFileList(); $arrForm['arrHidden'] = array_merge((array) $arrHidden, (array) $objDownFile->getHiddenFileList()); // 画像ファイル表示用データ取得 $arrForm['arrFile'] = $objUpFile->getFormFileList(IMAGE_TEMP_URLPATH, IMAGE_SAVE_URLPATH); return $arrForm; } 【category.tpl】 <div style="float:left; width: 100px;">メイン画像:</div> <span class="attention"><!--{$arrErr[$key]}--></span> <!--{if $arrForm.arrFile[$key].filepath != ""}--> <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="eccube.setModeAndSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br /> <!--{/if}--> <input type="file" name="main_image" size="40" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" /> <a class="btn-normal" href="java script:;" name="btn" onclick="eccube.setModeAndSubmit('upload_image', 'image_key', '<!--{$key}-->'); return false;">アップロード</a> ------------- |
フラット表示 | 前のトピック | 次のトピック |