バージョン選択

フォーラム

メニュー

オンライン状況

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

PR

デザインテンプレート EC-CUBE3.0版が登場!
広告掲載について

サイト内検索

質問 > 管理機能 > v2.13 画像のアップロードにつきまして

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ma-ma
投稿日時: 2017/5/10 12:42
対応状況: −−−
常連
登録日: 2014/9/22
居住地:
投稿: 48
v2.13 画像のアップロードにつきまして
▼テンプレート
[EC-CUBE] 2.13.5、新規インストール
[レンタルサーバ] zenlogic
[PHP] PHP 5.6.21
[データベース] MySQL 5.1.73
[カスタマイズの有無] 無し

お世話になります。
現在、管理画面の商品登録の画像アップロードの機能を
カテゴリ登録にも作りたいと考えています。
LC_Page_Admin_Products.php
を確認してみたのですが、
画像をアップロードされている箇所がわかりませんでした。
画像アップロードの記述は別のファイルに記載があるのでしょうか?

ご教示頂ければ幸いです。
karin
投稿日時: 2017/5/10 13:18
対応状況: −−−
仙人
登録日: 2008/9/15
居住地: 東京都
投稿: 609
Re: v2.13 画像のアップロードにつきまして
ma-ma 様

LC_Page_Admin_Products_Product.phpを確認してみてください。


----------------

468
投稿日時: 2017/5/10 14:27
対応状況: −−−
仙人
登録日: 2008/10/26
居住地:
投稿: 536
Re: v2.13 画像のアップロードにつきまして
以下のカテゴリを画像に置き換えるプラグインの2系版を
ちょうど開発しております。
http://www.ec-cube.net/products/detail.php?product_id=1389

karinさんのおっしゃられるようにLC_Page_Admin_Products_Product.phpの
188行目~217行目付近や175行目に画像アップロードに関する記述があります。

処理の流れとして、商品詳細画面のアップロードボタンで、画像を一時ディレクトリに保存して、
商品確認画面から商品登録完了画面への流れの中で
画像データを一時ディレクトリから本番ディレクトリに移動させています。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
■360°画像ビューワーimg360
■ECCUBE技術資料blog

ma-ma
投稿日時: 2017/5/11 12:39
対応状況: −−−
常連
登録日: 2014/9/22
居住地:
投稿: 48
Re: v2.13 画像のアップロードにつきまして
karin様
468様

ご教示頂きありがとうざいました。
LC_Page_Admin_Products_Product.phpを参考に下記コードを追加いたしまたが、
正常に動作ができませんでした。
(下記コードで使用しているメソッドはそのままコピーしています。)
javascript上で
ReferenceError: fnInitSelect is not defined
のエラーが出ているのですが、どうすればよろしいのでしょうか?
お手数をおかけいたしますが、ご教示頂ければ幸いです。

------------
追加コード(function action()内)


// アップロードファイル情報の初期化
$objUpFile = new SC_UploadFile_Ex(IMAGE_TEMP_REALDIR, IMAGE_SAVE_REALDIR);
$objDownFile = new SC_UploadFile_Ex(DOWN_TEMP_REALDIR, DOWN_SAVE_REALDIR);
$this->lfInitFile($objUpFile);
$objUpFile->setHiddenFileList($_POST);
$mode = $this->getMode();

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 = $this->lfSetOnloadJavaScript_InputPage($anchor_hash);
break;


}
}
------------

468
投稿日時: 2017/5/11 15:06
対応状況: −−−
仙人
登録日: 2008/10/26
居住地:
投稿: 536
Re: v2.13 画像のアップロードにつきまして
商品編集画面の初期化用のJavascriptがセットされていると思いますので、以下ようにimage_keyだけ渡すようにすれば良いかと思います。
$this->tpl_onload = $this->lfSetOnloadJavaScript_InputPage($anchor_hash);

$this->tpl_onload = $anchor_hash;

以下のメソッドもコピーされていると思いますが、こちらは削除してもいいと思います。
(多分、利用する事は無いと思いますので)
public function lfSetOnloadJavaScript_InputPage($anchor_hash = '')
    {
        return "eccube.checkStockLimit('" . DISABLED_RGB . "');fnInitSelect('category_id_unselect'); fnMoveSelect('category_id_unselect', 'category_id');" . $anchor_hash;
    }


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
■360°画像ビューワーimg360
■ECCUBE技術資料blog

ma-ma
投稿日時: 2017/5/12 12:32
対応状況: −−−
常連
登録日: 2014/9/22
居住地:
投稿: 48
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>

-------------
468
投稿日時: 2017/5/12 15:05
対応状況: −−−
仙人
登録日: 2008/10/26
居住地:
投稿: 536
Re: v2.13 画像のアップロードにつきまして
返信ありがとうございます。

まず、先のコメントで記載させていただいた通り、
カテゴリ画像投稿プラグイン(2系)を有償プラグインとしての配布を予定している為、
この場ですべてをお応えする事が出来ないという
私の立場については、ご理解をいただきたいと思います。

>画像のアップロードが正常にできませんでした。
とありますが、
アップロードボタンを押した後、画面遷移は発生しましたか?
(画面が再読込される動き)
画像ファイル自体がサーバに送信されていないのか?
受け取ったaction()内で一時ディレクトリに保存されていないのか?
一時ディレクトリの保存後、カテゴリ画面を再度表示した時に画像が画面に表示されないのか?
どの段階で上手くいっていないのかは、1ステップずつデバッグしていくのが確実かと思います。

私はいつも、var_dump();exit;を多用して、
どこを処理が流れて、想定した値が入ってきているか確認していますので、

まずは、
1.以下のcaseの中に処理が入ってきているかどうか?
// 画像のアップロード
case 'upload_image':
case 'delete_image':

2.$objUpFileにアップロードした画像の情報がきちんとセットされいるか?

3.一時ディレクトリ(/html/upload/temp_image/)にアップロードした画像が保存されているか?

4.function lfSetViewParam_InputPage()の中で画像がセットされているかどうか?

の順番で確認されたほうが良いかと思います。


あと、ソースを見ると、action()に画像関連の処理を追記されたのだと思いますが、
カテゴリの処理の最後に、画像関連の追記では無く、
デフォルトの登録や削除などの処理の分岐をしている
switch ($this->getMode()) {
// カテゴリ登録/編集実行
・・・・・・
}
の中にcaseの分岐を追記する形で移植する必要があります。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
■360°画像ビューワーimg360
■ECCUBE技術資料blog

ma-ma
投稿日時: 2017/5/15 10:31
対応状況: −−−
常連
登録日: 2014/9/22
居住地:
投稿: 48
Re: v2.13 画像のアップロードにつきまして
468様

ご返信ありがとうございます。
468様の立場も考慮せず質問ばかりして、
申し訳ございません。
468様のお答え頂ける範囲内で問題ありませんので、
ご教示頂ければ幸いです。

ご教示頂いたデバックを行って、
改めてご連絡させて頂きます。

今のところですが、
caseのcase 'upload_image':には処理が入っているのですが、
画像データが取得できていないかと思われます。

category.tpl側で下記の<input>を記載しているのですが、
こちらがまちがっているのでしょうか?
--------
<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" />
<input type="hidden" name="mode" value="edit" />
<input type="hidden" name="parent_category_id" value="<!--{$arrForm.parent_category_id|h}-->" />
<input type="hidden" name="category_id" value="<!--{$arrForm.category_id|h}-->" />
<input type="hidden" name="keySet" value="" />
<input type="hidden" name="image_key" value="" />

<input type="hidden" name="copy_product_id" value="<!--{$arrForm.copy_product_id|h}-->" />
<input type="hidden" name="anchor_key" value="" />
<input type="hidden" name="select_recommend_no" value="" />
<input type="hidden" name="has_product_class" value="<!--{$arrForm.has_product_class|h}-->" />
<input type="hidden" name="<!--{$key}-->" value="<!--{$item|h}-->" />
------

お手数をおかけいたしますが、
よろしくお願いいたします。
468
投稿日時: 2017/5/15 11:23
対応状況: −−−
仙人
登録日: 2008/10/26
居住地:
投稿: 536
Re: v2.13 画像のアップロードにつきまして
copy_product_id, anchor_key, select_recommend_no, has_product_classのinputタグは不要ではないかと思います。

あと、最後のhiddenはループさせる必要があるのではないでしょうか?
<!--{foreach key=key item=item from=$arrForm.arrHidden}-->
<input type="hidden" name="<!--{$key}-->" value="<!--{$item|h}-->" />
<!--{/foreach}-->

あと、デバッグされて、画像データが取得できていないというのは、
$arrForm['image_key']
が空になっているという事でしょうか?

実際にサーバへのリクエストに、ファイルが送信されているかどうかは、
var_dump($_FILES)などで中身を確認すると良いかもしれません。
$_FILESの中身が無ければ、送信するhtml上のformに問題があると思いますので、
問題の切り分けが出来ると思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
■360°画像ビューワーimg360
■ECCUBE技術資料blog

ma-ma
投稿日時: 2017/5/15 13:34
対応状況: −−−
常連
登録日: 2014/9/22
居住地:
投稿: 48
Re: v2.13 画像のアップロードにつきまして
468様
ご返信誠にありがとうございます!


>copy_product_id, anchor_key, select_recommend_no, >has_product_classのinputタグは不要ではないかと思います。
>あと、最後のhiddenはループさせる必要があるのではないでしょうか?
><!--{foreach key=key item=item from=$arrForm.arrHidden}-->
><input type="hidden" name="<!--{$key}-->" value="><!--{$item|h}-->" />
><!--{/foreach}-->
こちら削除、追記をさせていただきました。

画像データの件ですが、
switch ($mode) {
case 'upload_image':
内に
var_dump($arrForm['image_key']);
と記述すると、string(0) "" と表示がされます。

また、
switch ($mode) {
case 'upload_image':
内に
var_dump($_FILES);
と記述すると、
array(1) { ["main_image"]=> array(5) { ["name"]=> string(30) "test.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(19) "/data/tmp/phppmq2mH" ["error"]=> int(0) ["size"]=> int(620144) } }

と表示がされます。

こちらはHTML部分は問題ないということでしょうか?

申し訳ございませんが、よろしくお願いいたします。
(1) 2 3 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

 



ログイン


EC-CUBEガイドブック

統計情報

総メンバー数は19,366名です
総投稿数は81,313件です

投稿数ランキング

1
seasoft
7331
2
AMUAMU
2712
3
nanasess
1619
4
yuh
1326
5
red
1049
6
fukap
907
7
shutta
827
8 ramrun 789
9
tsuji
778
10
umebius
670
11
tao_s
646
12 sumida 637
13
homan
633
14 karin 609
15 DELIGHT 571
16
468
536
17
patapata
502
18
flealog
483
19 tonton 436
20
ecbg
387


ネットショップの壺

EC-CUBEガイドブック
Copyright© LOCKON CO.,LTD. All Rights Reserved.