Duplicate entry … for key ‘PRIMARY’

ECCUBEで遊んでたら
Duplicate entry … for key ‘PRIMARY’
が出て困った話。

ECCUBEを別のサーバーに移動するときに
管理画面上でCSVを使って商品情報を移動せずに、データベースで処理していて、商品登録を行ったところ上記エラーが出ました。

全部そのまま移動したつもりが、
dtb_products_class_product_class_id_seq

dtb_products_product_id_seq
の情報を移動し忘れていたみたい。

この値を現在の商品IDと重複しない数字にし、解決しました。
(↑の二つの数字は同一でないとエラーが出ます。)

以上メモ。

ECCUBEの現在のページをダンプする方法メモ

忘れないように。よく忘れるんだなこれが・・・。

ECCUBEで、
・今のページの階層どうだっけ?
・ifで分岐してみたが反映されない。何故だwhy?

そんなときは現在の階層をとりあえず調べる!


<pre><!--{$smarty.server.PHP_SELF|@var_export}--></pre>

これをその対象のページで表示されるように編集する。

結果は↓


'/shop/index.php'

だったり

'/html/index.php'

だったり、これはインストール環境で様々です。

その他わからないことは、seasoft様のサイトが便利
http://seasoft.jp1.cx/ec/tips/smarty

ECCUBE 会員登録を大量にやった時のメモ

(今回は会員登録の際、名前とメールアドレスしか情報が無かった場合になります。)

ECCUBEって会員登録に関してはまとめて登録できないんですよね。

他はCSV登録とか装備してるのに、なんでこれだけはダメなんでしょうね。
そんな時はSQL!と思いますが、SQL文打ったら「権限ありません!」ってエラーでることも。
権限与えるの調べるの面倒だったんで、phpMyAdminのエクスポートとインポートだけつかってみました。

ECCUBEのDBの下層にあるdb_customerを探して、それをCSVでエクスポートします。
個人的に見やすいので区切り文字は , にしてます。
あと1行目にフィールド名を追加してます。

編集するときお勧めなのが、OpenOffice。
エクセルだと数値を数値としか認識しないので、例えばカンマを含む場合”200,100″って値が”200100″になるんです。
openofficeで開く際にはutf-8、カンマ区切り、テキストとしてインポートを選択して開くと多分綺麗に見れます。
cassavaとかだと便利な機能が少ないので個人的にあまり使いません。

下記がおそらく1行目にでてると思われます。
customer_id
name01
name02
kana01
kana02
zip01
zip02
pref
addr01
addr02
email
email_mobile
tel01
tel02
tel03
fax01
fax02
fax03
sex
job
birth
password
reminder
reminder_answer
salt
secret_key
first_buy_date
last_buy_date
buy_times
buy_total
point
note
status
create_date
update_date
del_flg
mobile_phone_id
mailmaga_flg

どれが何なの?ってのは置いといて、記載の仕方のみにします。

プライマリーな値。絶対に同じ縦の列の値で重複が許されません。空白ダメ。
customer_id(1,2,3,4,5と順番にしていけばいいかと。)
secret_key(乱数当てればOK)
email(多分これも固有なほうが後で管理しやすかったはず)

乱数の発生にはこちらのサイトもおすすめです。
http://www.graviness.com/temp/pw_creator/
1000件のデータ作りたいなら
文字数32で生成個数を1000 x 1
って指定するといけるはず。
エクセルとかで、あの関数どうやって使うんだっけ?って悩む暇あったらジェネレータ使った方が楽ですよね。

重複OKだけど、同様にプライマリーな値のほうが安全。空白だめなはず。
password(乱数当てればOK)
reminder(乱数当てればOK)
reminder_answer(乱数当てればOK)
salt(乱数当てればOK)

重複OK。空白だめだったはず。(NULLで埋めてもよいはず。)
name01(NULL)
name02(NULL)
zip01(NULL)
zip02(NULL)
pref(1とか適当に)
addr01(NULL)
addr02(NULL)
email_mobile(NULL)
tel01(NULL)
tel02(NULL)
tel03(NULL)
fax01(NULL)
fax02(NULL)
fax03(NULL)
sex(1か2でよかったはず)
job(0でOK)
birth(0000-00-00 00:00:00で登録してました。)
first_buy_date(0000-00-00 00:00:00で登録してました。)
last_buy_date(0000-00-00 00:00:00で登録してました。)
buy_times(0でOK。メルマガ専用にECCUBEを使った際、ここでメールマガジンのグループを分けてました。)
buy_total(0でOK。)
point(0でOK。)
note(NULL)
status(2でOK。だったはず。本登録って扱いだったような。)
create_date(‘2013-06-27 21:10:09で登録してました。適当。)
update_date(‘2013-06-27 21:10:09で登録してました。適当。)
del_flg(0でOK。1にするとECCUBE上から削除されます。)
mobile_phone_id(NULL)
mailmaga_flg(1でOK。)

空欄でもよかったはず。
kana01
kana02

結構ざっくりでしたがこんな感じです。

テストサイトとかでしか試してないので、本番環境でやる際にはテストしてからにしてくださいね。

では、このへんで。

ECCUBEの税抜き表示

税抜き表示はdetail.tplとlist.tplでinctax部分を消してあげるだけ
ではなかった。

SC_Product.phpの下記部分をコメントアウトで規格変更時も税抜になってくれた。っていうメモ。購入完了まで問題なければこれでOKっぽい。

// 価格
// TODO: ここでprice01,price02を税込みにしてよいのか? _inctax を付けるべき?要検証
/*ここから
$arrClassCats2[‘price01’]
= strlen($arrProductsClass[‘price01’])
? number_format(SC_Helper_TaxRule_Ex::sfCalcIncTax($arrProductsClass[‘price01’], $productId, $arrProductsClass[‘product_class_id’]))
: ”;

$arrClassCats2[‘price02’]
= strlen($arrProductsClass[‘price02’])
? number_format(SC_Helper_TaxRule_Ex::sfCalcIncTax($arrProductsClass[‘price02’], $productId, $arrProductsClass[‘product_class_id’]))
: ”;
ここまで削除*/

ECCUBE 2.13.1

ECCUBEメモ

ECCUBE2.12.1使用

会員情報をまとめて登録する際、phpMyAdminで一気に登録。

その後、ECCUBE備え付けの会員登録をしてみたところ、システムエラーに。

原因はdtb_customer_customer_id_seqを更新し忘れ。下記ページ参照。
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=11197&forum=10&post_id=52455

Webmatrix2でEC-CUBEをインストールメモ

Webmatrix2を使用してEC-CUBEがようやくインストールできたので、つまづいた点をメモ。

Webmatrix2をインストール後、MySQLやらApacheやら必要なものをインストールしておく。

そしてphpMyAdminもインストールします。

 

Webmatrix2を起動し、アプリギャラリーからEC-CUBEを選択し、インストールを始める。

すると画面に

データベース名:
eccube_db

データベース ユーザー名:
eccube_user

データベース パスワード:
***********

のような感じの文字が出てくるのでメモしておく。
SQLを全然知らなかったのですが、Webmatrixのほうで勝手にeccube_dbっていうデータベースと、そのデータベースを使えるユーザーとパスワード設定してくれてるってことみたいです。
Webmatrix以外の方法でテストサーバーにインストールした場合、自身でSQL起動してデータベースとユーザー設定しないといけないので結構手間でした。

 

ここまでECCUBEを進めて、次に、phpMyAdminを開く
http://localhost/phpMyAdmin/index.php

データベース > eccube_db を選択 > 操作 > 照合順序をutf8_general_ciに変更

 

そしてようやくECCUBEのインストール続きを最後まで行います。

インストール後、install\index.phpを削除します。

WebMatrixの場合、多分以下の場所にあります。

C:\Users\ユーザー名\Documents\My Web Sites\EC-CUBE2\html\install

 

これで完了なはず。いやはや、照合順序を変更するのに気づくのに数日かかって、phpMyAdminで簡単に変更できることに気づくのに数週間かかりました。MySQL勉強不足なのがここにきて仇に・・・。

 

今後Webで食ってく上で勉強積んでいかなければ…というわけでメモ終わり。

 

きっと皆様にとってチンプンカンプンな話題かもしれませんが、同じ悩みで困っている方に少しでも力になれればと思います。

 

ではでは。