>EC-CUBEでカテゴリーに対して画像を項目追加するサンプル(管理画面側)

2011/01/18 14:05

>画像保管場所とかは適当に変えてください。
まだいい方法がありそうだけどとりあえず

○前提
・ファイルアップロードのpostをcategory_imgとする
・DBのカラムも合わせる

○DBに追加
・ dtb_categoryテーブルにcategory_imgカラム追加。textあたりで

○category.tpl変更

<!–▼画面右–>
<td width=”428″ valign=”top”>

<span class=”red12″><!–{$arrErr.category_name}–></span>
<input type=”text” name=”category_name” value=”<!–{$arrForm.category_name|escape}–>” size=”30″ class=”box30″ maxlength=”<!–{$smarty.const.STEXT_LEN}–>”/>
<input type=”file” name=”category_img” size=”30″ class=”box30″ /><!–ここを追加–>
<input type=”submit” name=”button” value=”登録” onclick=”fnModeSubmit(‘edit’,”,”); return false;”/><span class=”red10″> (上限<!–{$smarty.const.STEXT_LEN}–>文字)</span>
<table width=”428″ border=”0″ cellspacing=”0″ cellpadding=”0″ summary=” “>
<tr><td height=”15″></td></tr>
</table>
<tr bgcolor=”#f2f1ec” align=”center” class=”fs12n”>
<td width=”30″>ID</td>
<td width=”30″>画像</td>
<td width=”160″>カテゴリ名</td><!–ここを追加–>
<td width=”60″>編集</td>
<td width=”60″>削除</td>
<td width=”60″>移動</td>
</tr>
<!–{section name=cnt loop=$arrList}–>
<tr bgcolor=”<!–{if $arrForm.category_id != $arrList[cnt].category_id}–>#ffffff<!–{else}–><!–{$smarty.const.SELECT_RGB}–><!–{/if}–>” align=”left” class=”fs12n”>
<td><!–{$arrList[cnt].category_id}–></td>
<!–ここから追加–>
<td><img src=”<!–{$smarty.const.URL_DIR}–>user_data/<!–{$arrList[cnt].category_img}–>”></td>
<!–ここまで追加–>
<td>
<!–{if $arrList[cnt].level != $smarty.const.LEVEL_MAX}–>
<a href=”<!–{$smarty.server.PHP_SELF|escape}–>” onclick=”fnModeSubmit(‘tree’, ‘parent_category_id’, <!–{$arrList[cnt].category_id}–>); return false”><!–{$arrList[cnt].category_name|escape}–></td>
<!–{else}–>
<!–{$arrList[cnt].category_name|escape}–>
<!–{/if}–>
<td align=”center”>
<!–{if $arrForm.category_id != $arrList[cnt].category_id}–>
<a href=”<!–{$smarty.server.PHP_SELF|escape}–>” onclick=”fnModeSubmit(‘pre_edit’, ‘category_id’, <!–{$arrList[cnt].category_id}–>); return false;” />編集</a>
<!–{else}–>
編集中
<!–{/if}–>
</td>
<td align=”center”>
<a href=”<!–{$smarty.server.PHP_SELF|escape}–>” onclick=”fnModeSubmit(‘delete’, ‘category_id’, <!–{$arrList[cnt].category_id}–>); return false;” />削除</a>
</td>
<td align=”center”>
<!–{* 移動 *}–>
<!–{if $smarty.section.cnt.iteration != 1}–>
<a href=”<!–{$smarty.server.PHP_SELF|escape}–>” onclick=”fnModeSubmit(‘up’,’category_id’, <!–{$arrList[cnt].category_id}–>); return false;”>上へ</a>
<!–{/if}–>
<!–{if $smarty.section.cnt.iteration != $smarty.section.cnt.last}–>
<a href=”<!–{$smarty.server.PHP_SELF|escape}–>” onclick=”fnModeSubmit(‘down’,’category_id’, <!–{$arrList[cnt].category_id}–>); return false;”>下へ</a>
<!–{/if}–>
</td>
</tr>
<!–{/section}–>

○LC_Page_Admin_Products_category.php変更(ほんとはEXをさわるべき)

function process() {
$conn = new SC_DBConn();
$objView = new SC_AdminView();
$objSess = new SC_Session();
$objDb = new SC_Helper_DB_Ex();
$category_img_name=$_FILES[‘category_img’][‘name’];//←ここを追加
// 認証可否の判定
SC_Utils_Ex::sfIsSuccess($objSess);
(中略)
case ‘edit’:
$this->objFormParam->convParam();
$arrRet = $this->objFormParam->getHashArray();
$this->arrErr = $this->lfCheckError($arrRet);

//ここから追加
// ルートディレクトリ
$top_dir = USER_PATH;
// ファイル管理クラス
$objUpFile = new SC_UploadFile($top_dir, $top_dir);

// ファイル情報の初期化
$this->lfInitFile($objUpFile);

$ret = $objUpFile->makeTempFile(‘category_img’, false);
if($ret != “”) {
$arrErr[‘category_img’] = $ret;
} else {
$this->tpl_onload .= “alert(‘ファイルをアップロードしました。’);”;
$this->arrForm[‘category_img’] = $category_name_name;
// echo($_FILES[‘category_img’][‘name’].”—-“);
}
//ここまで追加
if(count($this->arrErr) == 0) {
if($_POST[‘category_id’] == “”) {
$objQuery = new SC_Query();
$count = $objQuery->count(“dtb_category”);
if($count < category_MAX) {
$this->lfInsertCat($_POST[‘parent_category_id’],$category_name_name);//←引数変更
} else {
print(“カテゴリの登録最大数を超えました。”);
}
} else {
$this->lfUpdateCat($_POST[‘category_id’],$category_name_name);//←引数変更
}
} else {
$this->arrForm = array_merge($this->arrForm, $this->objFormParam->getHashArray());
$this->arrForm[‘category_id’] = $_POST[‘category_id’];
}
break;

(中略)

// カテゴリの新規追加
function lfInsertCat($parent_category_id,$category_img) {//←引数変更

$objQuery = new SC_Query();
$objQuery->begin(); // トランザクションの開始

if($parent_category_id == 0) {
// ROOT階層で最大のランクを取得する。
$where = “parent_category_id = ?”;
$rank = $objQuery->max(“dtb_category”, “rank”, $where, array($parent_category_id)) + 1;
} else {
// 親のランクを自分のランクとする。
$where = “category_id = ?”;
$rank = $objQuery->get(“dtb_category”, “rank”, $where, array($parent_category_id));
// 追加レコードのランク以上のレコードを一つあげる。
$sqlup = “UPDATE dtb_category SET rank = (rank + 1) WHERE rank >= ?”;
$objQuery->exec($sqlup, array($rank));
}

$where = “category_id = ?”;
// 自分のレベルを取得する(親のレベル + 1)
$level = $objQuery->get(“dtb_category”, “level”, $where, array($parent_category_id)) + 1;

// 入力データを渡す。
$sqlval = $this->objFormParam->getHashArray();
$sqlval[‘create_date’] = “Now()”;
$sqlval[‘update_date’] = “Now()”;
$sqlval[‘creator_id’] = $_SESSION[‘member_id’];
$sqlval[‘parent_category_id’] = $parent_category_id;
$sqlval[‘category_img’] = $category_img;//←追加
$sqlval[‘rank’] = $rank;
$sqlval[‘level’] = $level;

// INSERTの実行
$objQuery->insert(“dtb_category”, $sqlval);

$objQuery->commit(); // トランザクションの終了
}

// カテゴリの編集
function lfUpdateCat($category_id,$category_img) {//←引数変更

$objQuery = new SC_Query();
// 入力データを渡す。
$sqlval = $this->objFormParam->getHashArray();
$sqlval[‘update_date’] = “Now()”;
$sqlval[‘category_img’] = $category_img;//←追加
$where = “category_id = ?”;
$objQuery->update(“dtb_category”, $sqlval, $where, array($category_id));
}

(中略)
//以下の関数を追加。サイズとかは適当
/* ファイル情報の初期化 */
function lfInitFile(&$objUpFile) {
$objUpFile->addFile(“カテゴリ画像”, ‘category_img’, array(‘jpg’, ‘gif’, ‘png’),IMAGE_SIZE, true, SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT);
}

コメントを投稿

次の HTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">

コメントはまだありません。