カテゴリー別アーカイブ: EC-CUBE(2系)

EC-CUBEで顧客情報と受注情報のみ移動させるときの注意

2度目にやったときに見事に忘れていたので、メモ代わりに。

[ec-cube] 顧客情報、受注情報をインポートした際の注意点

わかりやすいまとめでした。ありがとうございます。

要するにシーケンス番号の書換えに注意ってことですが、私はこの「シーケンス」という言葉ごと忘れるので注意が必要。

dtb_customer を移行。そして、シーケンス dtb_customer_customer_id_seq も注意

dtb_order と dtb_order_detail を移行。そして、シーケンス dtb_order_order_id_seq と dtb_order_detail_order_detail_id_seq も注意。

WADAXサーバにてDNS切替後500エラー発生

WADAXの共用サーバにEC-CUBEをインストール。
初期ドメインではうまく動いていたEC-CUBEが、DNS切り替え後、どこを触っても500エラー。
ただのindex.htmlを入れても、500エラー。

原因は、パーミッションでした。

しかし、WADAXにEC-CUBEをインストールしたときに、
EC-CUBE側から言われた通りにパーミッションを変えました。
でないと、ドキュメントルートのフォルダに777なんて……普通やるはずがない。

WADAXのQA「パーミッションの設定はどうすればいいの?」
http://faq.wadax.ne.jp/wdx5569/web3765/faq/Detail.aspx?id=33&isCrawler=1

ドキュメントルートのパーミッションを「755」に設定すれば、ひとまず動き出しました。

あとは、user_dataフォルダ以下とか、EC-CUBEのインストール時に「777」にしたフォルダを「755」や「707」に、新規ページ作成などで自動で作成されたphpなどは「705」に変更していけば、一通り動くように。

初期ドメイン時に作成した「user_data」に格納される新規ページのphpなどは、所有者が「web」などになってパーミッションが変更できなかったため、一旦ファイルをダウンロードし、削除、再度アップロードすることで所有者を変更。その後、パーミッションを設定しました。

ただ、この状態でも、新しくページ追加などをすると、phpのパーミッションが666とかになり、500エラーがでますので、そこは注意です。

なんで、DNSを切り替えたら、こんなエラーが出るのか? WADAXには問い合わせ中です。

こんなに面倒なサーバだったかしら……。WADAXさん、好きだったのに。
DNS切り替えは初めてだから、何かが違うのかなぁ。

【追記】
WADAXからの回答は、「事前確認用アドレスと、ドメイン表示用ではパーミッション設定の権限が異なりますためそうなりました」というような回答。
パーミッション設定を変えたら回避できるとか言われても、そんなことは重々承知。
私的には、なんで「事前確認用アドレス」のくせに、「ドメイン表示」と環境が変わるのか、そっちのほうが重要。
なんのための「事前確認用アドレス」なのか。

私が「他のサーバーでこんなことなったことないから」って書いたのが悪かったのかもしれないけど、
ご丁寧に「他社サーバーの仕様は弊社ではわかりかねます」とか返事してこられたのには、ちょっとびっくりしました。
まぁ、そうでしょうけど。

こんな「事前確認用アドレス」があてにならないサーバは初めてで、まったく説明になってない返事をもらったのもなんだかです。

昔は、WADAXさんなら大丈夫と思ってたけど、やっぱりいろいろと変わるもんですねぇ。

CKEditorのハイパーリンクのOKボタンが押せなくて

XOOPS内で、CKEditorモジュールを使用。
IE11で使用中に、ハイパーリンクが下図のような表示になって、OKもキャンセルも押せなくなります。hyperlink

通常は、
hyperlink2
こんな感じ。

IEで出ていたエラーは

SCRIPT5: アクセスが拒否されました。
ファイル: dnserrordiagoff.htm、行: 1、列: 1

この現象に関しては、

Issue found in IE11 and IE9 – Insert Hyperlink does not work

にある通り、4.3よりもバージョンが低い場合に起こるようなので、バージョンをあげてやればいいのだけども……。

でも、IE11でもちゃんと動いている環境があり、その差は、「テンプレートの追加を読み込んでる場合」と「読み込んでない場合」だった。

一度起こる様になったら、テンプレートの追加を切っても、起こる様になりましたので……不思議。
でも、javascriptのキャッシュも絡んでいて、なんだか、本当にちゃんと出ていた原因がそれだったのかも切り分けにくく。

そして、CKEditor4をバージョンアップしたら、投稿画面のエディターでなくなったし。

もー、前に何したか思い出さなきゃ……。

EC-CUBE2.11.5からEC-CUBE2.12へのバージョンアップの検証

まず、EC-CUBE2.11.5をインストールします。
気がかりなのは、顧客情報のパスワードが変更になることなので、テストで顧客情報を入れます。

2.11系のデータをエクスポートする。プラグインがあるのでそれを利用する。

データエクスポートモジュール(2.11系)

ちょっと迷ったのだけど、エクスポートモジュールをインストール後、エクスポートするには「オーナーズストア」から「購入商品一覧」を表示し「購入商品一覧を取得する」ボタンをクリックし、表示された一覧から、エクスポートツールの「設定」をクリックする必要があります。

ec-cube-export

そして、データをエクスポート。

次に、違う領域に2.12.1をインストールしてみました。そして、

データ移行プラグイン(インポート)

をダウンロードして、プラグインとしてインストール。
2.11系はオーナーズストアから購入してからインストールだけど、2.12系からはプラグインなのですね。

そして、エクスポートしたデータを、インポートしました。このときに、パスワードが変わっちゃうから、管理者パスワードをすぐに登録しなおして!と言われるので、速攻再登録。

さて、肝心の顧客情報のパスワード。
ログインしましたが、やはりログインできませんでした。 続きを読む

EC-CUBEで海外からの注文を受ける時

とはいっても、多言語化とかいう話ではなくて、対象は

・日本語がバリバリ読める海外の人

です。

会員登録フォームに

(1)国を入れるようにしたい。
(2)郵便番号の処理をどうしようか。桁数をフリーにしたほうがいいかも。
(3)都道府県は必須だけど、ないから必須を外したい。
(4)電話番号の桁数もフリーにしたい。国番号をいれてもらえるようにしたい。

というようなご要望。

この(1)から(3)のご要望は、EC-CUBE側で準備してくれています。

「管理画面」>「システム設定」>「パラメーター設定」で、

FORM_COUNTRY_ENABLE を false にする。

これだけです。

これで
ec-cube-before

ec-cube-after

あ、「海外の方はこちらへの記入は・・・」とか「日本の方はこちらへの記入は・・・」とかは、後でテンプレート(frontparts>form_input_parsonal.tpl)に追加しました。

このパラメータは、Smartyで「$smarty.const.FORM_COUNTRY_ENABLE」で呼び出せるので、

<!--{if $smarty.const.FORM_COUNTRY_ENABLE}--><br /><span class="mini">日本の方はこちらへの記入は不要です。</span><!--{/if}-->

という風にしてやると、パラメータの変更と連動します。

【メモ】EC-CUBEで海外向けオンラインショップを作る参考ページリンク

まずは、EC-CUBEの多言語
海外向けショッピングサイトも制作可能! EC-CUBEに多言語対応版が登場!!
【公式サイト】EC-CUBE英語版

Paypalのことが気になって。やっぱりPaypalがいいのかな
EC-Cube Paypal決済カスタマイズ⑥
EC-CUBE、ペイパル決済プラグインにより海外決済に対応

商品発送は、国際郵便(EMS)とか?
国際郵便【郵便局】

EMSに対応したプラグインがあるらしいけど、バージョンが止まってる?便利そうなのに。
EMS配送に対応したEC-CUBEをインストール提供いたします!

講演とかもあるのね。早く知ってたら行きたかったな。
越境EC経験者が語るEC-CUBE海外支援セミナー

とりあえず、今日調べた分。
また、何か調べたら追加しますー。

 

というか、こういうのをまとめNAVERで作ればいいのだよね……きっと。
また考えよ。

EC-CUBEのサーバ移行後、ログインできない。

EC-CUBEのサーバ移行後に、管理画面にログインできなくなった。

data/config/config.phpのAUTH_MAGICを移行前のデータにすればよいとのことだったので、そうしたらログインできるようになりました。

「遷移エラー」が出たら

→ ログインページのアドレスがインストール時に登録したものと同じかチェックする。(URLで登録したのでIPでアクセスしているとか

「idかパスワードが間違ってます」と出たら

→ 間違ってないか再度確認

→ data/config/config.phpのAUTH_MAGIC を同じにしてみる

→ 管理者用のパスワードを忘れた場合はどうすれば良いの? を参考に、パスワードを再度セットする。

【EC-CUBE2.11.5】商品別送料の計算を変更する。

前に記事で書いた「商品別送料の計算を変更する」の続編というか…仕様変更。

送料無料の商品A と 送料無料でない商品Bがある。また、送料は一律1000円とする。

この場合、以下の様な送料計算にしたい。

A)送料無料商品Aのみを買った場合(複数でも) → 送料無料
B)送料無料商品Aと送料無料でない商品B(複数でも)を買った場合 → 送料0円
C)送料無料でない商品Bを買った場合(複数でも)ツꀀ→ 送料1000円

赤字のところが変わりました。

商品登録時の「商品送料」を0円に設定して、あとは、「商品別送料の計算を変更する」のプログラム変更後、以下のように付け足します。

data/class/SC_Cartsession.php のL.700あたりからです。

//商品送料無料の商品買ったかのフラグを準備。
$deliv_free_flag = 0;

// 商品ごとの送料を加算
if (OPTION_PRODUCT_DELIV_FEE == 1) {
$cartItems = $this->getCartList($productTypeId);
$deliv_fee_cn = 0;
foreach ($cartItems as $item) {
if($item[‘productsClass’][‘deliv_fee’] != null){
$results[‘deliv_fee’] += $item[‘productsClass’][‘deliv_fee’] * $item[‘quantity’];

//個別送料が0円の商品があればフラグを立てる
if($item[‘productsClass’][‘deliv_fee’] == “0”){
$deliv_free_flag = 1;
}

}else{
$deliv_fee_cn++;
}
}
}

// 配送業者の送料を加算
if (OPTION_DELIV_FEE == 1
&& $deliv_fee_cn != 0
&& !SC_Utils_Ex::isBlank($deliv_pref)
&& !SC_Utils_Ex::isBlank($deliv_id)) {
$results[‘deliv_fee’] += $objDb->sfGetDelivFee($deliv_pref, $deliv_id);
}

//個別送料が0円の商品を一つでも買っていれば、送料無料
if ($deliv_free_flag == 1) {
$results[‘deliv_fee’] = 0;
}

赤字を追加しました。

複数送り先のプログラム部分にも同様に追加します。

0円商品買ったらなんでもかんでも送料無料、という仕様です。
商品送料を別に指定していても(500円とかしてても)0円が優先されます。

【EC-CUBE】会員種別で表示・非表示になる商品カテゴリーを作成する。

会員に「本会員(status:2)」が既にありますが、これに「A会員(status:3)」「B会員(status:4)」を追加して、「A会員」や「B会員」にしか買えないカテゴリーを作りたい。

0.「A会員(status:3)」「B会員(status:4)」の人がログインできるように修正します。
data\class\SC_Customer.phpのL44に

$sql = “SELECT * FROM dtb_customer WHERE (email = ?” . $sql_mobile . “) AND del_flg = 0 AND (status = 2 || status = 3 || status = 4)”;

という風に、statusを追加する必要があります。

1.カテゴリーテーブルに「taiou_status」のカラムを追加します。
2.カテゴリー登録ページに「taiou_status」を登録できるようなカスタマイズをします。

data\class\pages\admin\products\LC_Page_Admin_Products_Category.php
function init() {
の中に

       $masterData = new SC_DB_MasterData_Ex();#add グループ判定のため
        $this->arrCUST = $masterData->getMasterData("mtb_customer_status");#add グループ判定のため

を追加して、グループ(会員種別)を取得する

L238あたりの「 function doPreEdit(&$objFormParam) 」に

       // 編集対象のカテゴリ名をDBより取得する
        $where = "category_id = ?";
        $category_name = $objQuery->get("category_name", "dtb_category", $where, array($category_id));
        $taiou_status = $objQuery->get("taiou_status", "dtb_category", $where, array($category_id));#add グループ判定のため

という風に「$taiou_status」を追加。

        // 対応グループを取得#add グループ判定のため
        $this->arrForm['taiou_status']   = $taiou_status;#add グループ判定のため

も「$this->arrForm[‘category_id’]」の下に追加

L266 あたりの「function doEdit(&$objFormParam) {」に

            $this->arrForm['category_name'] = $objFormParam->getValue('category_name');
            $this->arrForm['taiou_status'] = $objFormParam->getValue('taiou_status');#add グループ判定のため

という風に
「function doEdit」の中で、

this->arrForm['category_name'] = $objFormParam->getValue('category_name');

となっているところの次の行にとにかくつける。(3か所)

続きを読む

【EC-CUBE】で税込と税別の値段を同時に表示する。

※(2013.03.13追記)基本的に2.11.5を想定して書いてましたが、2.12.1にバージョンアップしたテストのときに2.12.1についても一部追加。2.13以降はまだテストしてませんが、もし変更があったりテストすることがあれば後日追記します。

税込と税別の値段を同時に表示させる。
最初はテンプレートで
税別

<!--{$arrProduct.price01_min|number_format}-->

税込

<!--{$arrProduct.price01_min|sfCalcIncTax:$arrSiteInfo.tax:$arrSiteInfo.tax_rule|number_format}-->

というふうに変更するだけでよいと簡単に思っていました。

そう。規格のことを忘れていました。

詳細ページでは、規格を変更するとこの値段の部分が変更されます。

product.jsで制御しているようだったのですが、ここで扱っているのが「税込」の値段のみです。

最初は
product.jsの

$price02_dynamic.text(classcat2['price02']).show();

という部分で

$price02_dynamic.text("税込価格"+classcat2['price02']+"円(税別価格:").show();

なんて、一気に書いてしまって、税別も税込も同時に表示入れ替えをしようと思っていたのですが、
税別の価格を取ってこれていないことに気づきます。表示部分と同じ計算をさせたほうがよいので、javascript上で1.05で割るなんて恐ろしいことしたくないし。と、考えていて……。

このclasscat2[‘price02’]は、商品詳細ページのheader部分に埋め込まれている

<![CDATA[
    classCategories =

以下のデータを読み込んでいるようです。

このデータはどこで作られているかというと
data/class/SC_Product.php の L232あたり
function setProductsClassByProductIds
以下。

ここに
2.11.5まで

// 価格 税抜価格を表示させるために追加 start
$classCats2['price011']
   = strlen($productsClass['price01'])
   ? number_format($productsClass['price01'])
   : '';

$classCats2['price021']
   = strlen($productsClass['price02'])
   ? number_format($productsClass['price02'])
   : '';
//end

2.12.1以降(追記:2014.03.13)

//  税抜価格を表示させるために追加 start
 $arrClassCats2['price011']
       = strlen($arrProductsClass['price01'])
        ? number_format($arrProductsClass['price01'])
       : '';

$arrClassCats2['price021']
       = strlen($arrProductsClass['price02'])
       ? number_format($arrProductsClass['price02'])
       : '';
 //end

を追加します。

そして、product.js(html>jsの中の)を

// 販売価格
    var $price02_default = $form.find('[id^=price02_default]');
    var $price02_dynamic = $form.find('[id^=price02_dynamic]');
    var $price021_default = $form.find('[id^=price021_default]');//add 税抜
    var $price021_dynamic = $form.find('[id^=price021_dynamic]');//add 税抜
    if (classcat2
        && typeof classcat2['price02'] != 'undefined'
        && String(classcat2['price02']).length >= 1) {

        $price02_dynamic.text(classcat2['price02']).show();
        $price021_dynamic.text(classcat2['price021']).show();//add 税抜
        $price02_default.hide();
        $price021_default.hide();//add 税抜(2013.03.13追記。addを入れるの忘れてた)
    } else {
        $price02_dynamic.hide();
        $price02_default.show();
        $price021_dynamic.hide();//add 税抜
        $price021_default.show();//add 税抜
    }

という風に各種追加。とりあえず、販売価格だけ書いてますが、通常価格も必要なら同じように改造を・・・。

テンプレートの方を

<!--★販売価格★-->
        価格:
        <!--{strip}-->
         <strong>
            <span id="price021_default"><!--{$arrProduct.price02_min|number_format}--></span><span id="price021_dynamic"></span>円</strong>
            (税込価格:<span id="price02_default"><!--{$arrProduct.price02_min|sfCalcIncTax:$arrSiteInfo.tax:$arrSiteInfo.tax_rule|number_format}--></span><span id="price02_dynamic"></span>円)
        <!--{/strip}-->

としました。