天然石とマクラメとアートな日々。Akihi's World
$Akihi's World 

全ての画像・文章の無断使用・転載はご遠慮ください。
1 | 2 | 3 | 4 | 5 | 最初次のページへ >>

EC-CUBE3 導入備忘録 ーやったことー

現在、ショップのシステムをEC-CUBE2.系からEC-CUBE3系へ移行作業中なのですが、

調べて助かったこと、調べてもなかなかわからなかったこと、苦労した点を、今後の自分のため、また同じように苦労されている方のために、備忘録としてここに置いておきます。

色々なサイト様を参考にさせていただきました。

ありがとうございますm(_ _)m

 

 

◆2.15→3系への移行

EC-CUBE2.4、2.11、2.13からEC-CUBE3.0.1xへのデータ移行ツール公開

http://amidaike.hatenablog.com/entry/2017/12/15/230730

 

config.phpを修正した後、ファイルをサーバーのルートへ

SSH(TeraTerm)でルートへ行き、migration.shを実施

$ mysql -h mysql[データベースサーバーの番号].db.sakura.ne.jp -u ユーザー名 -p データベース名 < ファイル名

パスワードを聞かれるので、入力して実施

 

出来たデータを新しいDBへインポートする際、先にデータが入っているとエラーになるので

EC-CUBE3の管理画面よりサンプル商品、サンプルカテゴリーを全て削除、DBでインポートする際のエラー表示に従って、カテゴリークラスなども削除

 

データによっては大きすぎてエラーが出るので、対象ファイルをサーバーにUp後、SSHでインポート

 

 

◆商品詳細ページの商品説明にテーブル構造があると、テーブル前にbrタグが大量に挿入されてしまいレイアウトが崩れる

→brタグは、テーブル内容記載の際のエディタ上の改行が、テーブル内にbrタグとして入るのが原因のようで、
ブラウザ上で結果的にそれら改行が全てテーブルの外に出てテーブル前に挿入されてしまっているようでした。
なので、テーブル内のカラムが多いほど、挿入されるbrタグも多いという。
 

→twitterにてあけびさんより、商品詳細ページのtwigに以下のスクリプトを記入することで、とりあえず連続brタグが解消されるとお教えいただけました。

ありがとうございますm(_ _)m

<script> setTimeout(function(){ let d = document.getElementById('item_detail'); d.innerHTML = d.innerHTML.replace(/(\s*<br[\s\/]*>\s*){2,}/ig, '<br />'); },100); </script>

 

<追記>

 

↑こちらの記述で確かに連続brは消えるのですが、その後、このスクリプトがあるとカートが動作しないことが判明汗
現在は、CSSで

.item_comment br + br + br {
    display: none;
}

としていて、3行以上の改行がある場合に非表示としています。

 

また、新規に商品登録する際には、divに新たなクラス属性をつけて、

br { display:block;}

としています。

 

◆メガメニュー

参考「 レスポンシブ対応、メガメニューを実装できるプラグイン「megamenu.js」の使い方」

https://design.aekana.com/blog/js-megamenu

 

app/template/default/default_frame.twigのヘッダに追加

<link rel="stylesheet" href="{{ app.config.front_urlpath }}/css/mega-menu.css?v={{ constant('Eccube\\Common\\Constant::VERSION') }}">

<script src="{{ app.config.front_urlpath }}/js/mega-menu.js"></script>

 

カテゴリブロックに以下を記載

<nav id="category" class="drawer_block pc">
<div class="menu-container">
  <div class="menu">
    <ul>
      <li><a href="{{ url('homepage') }}">Home</a></li>
      <li>
      {% for Category in Categories %}
          {{ _self.tree(Category) }}
          {% endfor %}
      </li>
      <li><a href="{{ url('homepage') }}contact">お問合せ</a></li>          
    </ul>
  </div>
</div>
</nav>

 

 

◆ECCUBE3サイドブロックに独自メニューを設置する方法

http://www.tukuruhito.com/web/279

ここに書かれていることをしないと、カテゴリブロックをサイドにコピー移動しただけではメニューが展開しないのでやるべし

 

◆カテゴリ一覧で、特定のカテゴリを表示させない

在庫がないカテゴリは、EC-CUBE2系では自動で表示されなくなりましたが、3系では表示されてしまうので、強制的に非表示に。
今後在庫ができたときに手動で戻します。
 
カテゴリブロック
{% macro tree(Category) %}
直後に表示したくないカテゴリID(ここでは9)を記述
{% if (Category.id != 9) }

複数指定は&で

{% if (Category.id != 9) and (Category.id != 12) and (Category.id != 62) }

 


◆商品詳細のサムネイル画像がスマホでは●表示になるのを、画像のまま表示

→CSSで対応

→トップページのスライド周辺の位置にも影響するので、DIVのID名やクラス名など考慮

 

 

◆売り切れ商品の値段をSoldOut表示に

商品詳細ページのtwigを参考に、価格表示の前後に下記を記入


 {% if Product.stock_find %}

   価格の記述

 {% else %} 
<dd class="sale_price text-primary">SOLD OUT</dd>
{% endif %} {#End stock find#}

 

 

◆帳票まわりの変更

ロゴの変更:/app/template/admin/OrderPdf/logo.png

レイアウト元のPDF app/Plugin/OrderPdf/Resource/template/nouhinsyo1.pdf

ロゴやPDFファイル(名)を変更した場合、app/Plugin/OrderPdf/config.ymlのパスを変更

 

納品書にお届け先や配送方法が記載されないていないと、配送ミスの原因になってとても困るので、記載されるように変更。

お届け先と支払い方法と配送方法を帳票に記載

app/Plugin/OrderPdf/Service/OrderPdfService.php
402行 お買い上げ明細部、//注文番号の下に下記を追加

// お支払い方法
$this->lfText(25, 145, $Order->getpayment(), 10);

$Shipping = $Order->getShippings()[0];
// お届け先郵便番号
$text = '〒 '.$Shipping->getZip01().' - '.$Shipping->getZip02();
$this->lfText(84, 125, $text, 10);
// お届け先都道府県+住所1
$text = $Shipping->getPref().$Shipping->getAddr01();
$this->lfText(84, 130, $text, 10);
$this->lfText(84, 135, $Shipping->getAddr02(), 10); //お届け先住所2
// お届け先氏名
$text = $Shipping->getName01().' '.$Shipping->getName02().' 様';
$this->lfText(84, 140, $text, 10);
// お届け先電話番号
$this->lfText(84, 145, $Shipping->getTel01().$Shipping->getTel02().$Shipping->getTel03(), 10);
//配送方法
$text = $Shipping->getShippingDeliveryName();
$this->lfText(149, 125, $text, 10);
 

それぞれのタイトルは修正PDF画像の方に追記保存

 

 

◆購入金額に応じて送料値引き、無料条件

購入金額によって、配送方法ごとに送料無料や値引きを設定したい

具体的には

税込み
・3239円未満:送料値引きなし
・3240円以上はクリックポスト、普通郵便(delivery_id:3; 185円)無料

・3240~7559は送料200円引き
・7560円以上はレターパックプラス(delivery_id:4; 510円)無料

・7560~17999円は送料510円引き
・18000円以上はゆうパック(delivery_id:5;)無料としたい

 

/src/Eccube/Service/ShoppingService.php 680行目付近を下記に変更

    /**
     * 配送料無料条件(合計金額)の条件を満たしていれば配送料金を0に設定
     *
     * @param Order $Order
     */
    public function setDeliveryFreeAmount(Order $Order)
    {
        // 配送料無料条件(合計金額)
        $Shipping = $Order->getShippings()->first();
        $deliv_id = $Shipping->getDelivery()->getId();
        
        $deliveryFreeAmount = $this->BaseInfo->getDeliveryFreeAmount();
        if (!is_null($deliveryFreeAmount)) {
            // 合計金額が設定金額以上であれば送料無料
             if ($Order->getSubTotal() <= 3000) {
                   if($deliv_id==3 ) $Order->setDeliveryFeeTotal(185);
                   if($deliv_id==6 ) $Order->setDeliveryFeeTotal(205); 
                   if($deliv_id==4 ) $Order->setDeliveryFeeTotal(510);
                   if($deliv_id==5 ) $Order->setDeliveryFeeTotal($Order->getDeliveryFeeTotal());                                      
           }else if ($Order->getSubTotal() <= 6999) {
                   if($deliv_id==3 ) $Order->setDeliveryFeeTotal(0);
                   if($deliv_id==6 ) $Order->setDeliveryFeeTotal(0);                   
                   if($deliv_id==4 ) $Order->setDeliveryFeeTotal(310);
                   if($deliv_id==5 ) $Order->setDeliveryFeeTotal($Order->getDeliveryFeeTotal() - 200);                   
           }else if ($Order->getSubTotal() <= 16666) {
                   if($deliv_id==3 ) $Order->setDeliveryFeeTotal(0);
                   if($deliv_id==6 ) $Order->setDeliveryFeeTotal(0);                    
                   if($deliv_id==4 ) $Order->setDeliveryFeeTotal(0);                     
                   if($deliv_id==5 ) $Order->setDeliveryFeeTotal($Order->getDeliveryFeeTotal() - 510);
           }else{
                   $Order->setDeliveryFeeTotal(0);
 
                // お届け先情報の配送料も0にセット
                $shippings = $Order->getShippings();
                foreach ($shippings as $Shipping) {
                    $Shipping->setShippingDeliveryFee(0);
                }
            }
        }
    }

 

但し、この方法だと、支払い方法を先に選択しないと、送料が正しく表示されないことがわかったので

shopping.twig内の該当の記述の順番を変えて、支払い方法を先に選択するようにしました。

 

◆2系の会員ポイントデータを3系へ

ポイントプラグインを導入後、挙動がおかしかったので以下を参考にDBへインポート

Re: バグでしょうか?(POINTプラグイン)

 

 

◆ポイントプラグインをPHP7.2で動かすとエラーが出る

→Warning: count(): Parameter must be an array or an object that implements Countable

→該当のファイルの行部分(付与率の設定がされていない場合)をコメントアウト

 

 

◆ポイント利用規約を作成

EC-CUBEプラグインでは、ポイントをつけることは出来ても、失効させることは出来ない

けれど、今回のようにバージョンアップやシステム入れ直しが生じた際、ポイントデータが消失する可能性があるし、消費者と店側とで、ポイント利用に関してトラブルになることも多いと聞いたので、利用規約を作成してトラブルに備える

 

 

◆サイトマップ作成

sitemap.xml Editor"を使ってXMLサイトマップを自動生成しよう!

→Google Consoleさんにサイトマップを申請

 

◆SEO対策

タイトルが商品名+店名の順番になるように

EC-CUBE3のSEO問題を解決する2つの方法

 

 

◆管理画面の商品の並び順を更新順から登録日順に

EC-CUBEのデフォルトでは、商品は更新日順に並ぶ。
これに慣れていたけれど、他店で商品が購入された際など、商品を探すのに手間取るので、並び順が動かないように設定

商品マスターの並び替え・並び順変更方法 (登録日・価格)

 

 

◆在庫切れ商品の並びを後ろへ

在庫切れ商品の並び替え/表示についてのご相談

↑こちらのリンクを参考に

src/Eccube/Repository/ProductRepository.php
getQueryBuilderBySearchData() 内にて、

$qb ->orderBy('pc.stock', 'DESC');

この記述を加えてみたけれど、エラーになってカテゴリーページが表示されない

 

そこでこちらを参考に

EC-CUBE3在庫数順(在庫切れ商品後ろ)でエラーの件

$qb->addSelect('pc.stock as HIDDEN stock');
$qb->OrderBy('stock', 'DESC');

とすれば上手くいく事がわかりました。

ただ、記述には工夫が必要で

            $qb->orderBy('p.create_date', 'DESC');
            $qb->addOrderBy('p.id', 'DESC');

上記、元々のコードの下に追記する形で 

            $qb->orderBy('p.create_date', 'DESC');
            $qb->addOrderBy('p.id', 'DESC');

            $qb->addoOrderBy('pc.stock', 'DESC');

としてもエラーになって表示されない。

・・・・のでこれらよりも上に追記

 

最終的にはこちらで落ちつきました

        // 新着順
    } else if (!empty($searchData['orderby']) && $searchData['orderby']->getId() == $config['product_order_newer']) {
        // 在庫切れ商品非表示の設定が有効時対応
        // @see https://github.com/EC-CUBE/ec-cube/issues/1998
        if ($this->app['orm.em']->getFilters()->isEnabled('nostock_hidden') == true) {
            $qb->innerJoin('p.ProductClasses', 'pc');
        }
        $qb->innerJoin('p.ProductClasses', 'pc');
        $qb->addSelect('MAX(pc.stock) as HIDDEN stock_max');                    
        $qb->groupBy('p.id');
        $qb->orderBy('stock_max', 'DESC');
        $qb->addOrderBy('p.create_date', 'DESC');
        $qb->addOrderBy('p.id', 'DESC');

 

規格のある商品については、在庫にばらつきがあるので、MAX(pc.stock)をとって並ぶようにしていますが、

場合によってはMINでもいいかも。
 

価格順についてはこちら↓で落ち着きました(安い順はprice02のMAXをMINに)

        $qb->addSelect('MAX(pc.price02) as HIDDEN price02_max','MAX(pc.stock) as HIDDEN stock_max');
        $qb->innerJoin('p.ProductClasses', 'pc');
        $qb->groupBy('p.id');
        $qb->orderBy('stock_max', 'DESC');            
        $qb->addOrderBy('price02_max', 'DESC');
        $qb->addOrderBy('p.id', 'DESC');

これで暫く様子見です。

たったこれだけの記述に、丸い一日頭を悩まされました(^ー^;



◆商品csv登録が16行ずつしか出来ない問題

17行目のフォーマットが一致しません、と出て、どうしても17行以上の商品をcsv登録できずにいて悩みましたが
結果、アップするcsvファイルの文字コードをUTF-8にすることで問題は解消しました。

エクセルから保存したShift-JISなcsvでも、16行ずつ分割すれば登録出来ていたので、17行目移行のデータに問題があるとも思えず
エラーログには何も残っていないし

プラグインを全て無効化しても問題が解消しないしで
この数日間かなり悩みました・・・(^ー^;
まさか自分のファイルの方に問題があったとは。
 

実はどうやら、Shift-JISでも何件でも登録出来るのだそうです。
問題は私のパソコンの方?
ロケールの問題かも、とフォーラムで教えていただきましたが、どうすればいいかわからず。
とりあえずUTF-8保存で登録できるので良しとします。。。

やれやれ~

 

◆商品のcsvダウンロード項目と、商品登録csv項目とが違う件について

EC-CUBE3では、商品の変更を一括でしようと、商品csvデータをダウンロードしても、そのまでは登録用のcsvの雛形項目とは違うため、フォーマットが違うと言われて商品csv登録が出来ません。
 

EC-CUBE3がなぜこんな仕様にしているのか、

また何故いつまでも改善されないのか、全く理解に苦しみますが

仕方がないので自力で改善。

データベースのdtb_csvへ商品削除フラグと商品規格削除フラグを追加。

csv_id :空欄

csv_type: 5 - カテゴリCSV

creator_id: 2 - 管理者

entity_name: Eccube\Entity\Product

field_name: product_del_flg

disp_name: 商品削除フラグ

rank: 31 

enable_flg:1

create_date、update_date: カレンダーから今日の日付を

csv_id :空欄

csv_type: 5 - カテゴリCSV

creator_id: 2 - 管理者

entity_name: Eccube\Entity\ProductClass

field_name: product_class_del_flg

disp_name: 商品規格削除フラグ

rank: 32 

enable_flg:1

create_date、update_date: カレンダーから今日の日付を

 

管理画面のcsv出力項目設定画面に2つの項目が加えられているので、順番をcsv登録雛形通りの位置に変えればOK

 

 

◆帳票pdfをブラウザに表示させたい

私は配送方法として主にクリックポストを使っているんですが、

クリックポストの宛名PDFがChromeで文字化けするので、そのままでは印刷できず、毎回PDFをDLしてからAcrobat Readerから印刷しています。
クリックポストの宛名PDFはA6の用紙に印刷

帳票PDFはA5に印刷する都合上、

Acrobat Readerでいちいち両者の用紙変更・カラー・モノクロ変更をするのが手間なので、

帳票だけは、これまでのEC-CUBE2系と同様ブラウザから印刷したい。

・・・ので、デフォルトでDLしか出来なくなった帳票を、ブラウザに表示させるようにしました。

app/Plugin/OrderPdf/Service/OrderPdfService.php 140行目付近
以下、attachmentをinlineに変更するだけ。


// レスポンスヘッダーにContent-Dispositionをセットし、ファイル名をreceipt.pdfに指定
//        $response->headers->set('Content-Disposition', 'attachment; filename="'.$service->getPdfFileName().'"');
        $response->headers->set('Content-Disposition', 'inline; filename="'.$service->getPdfFileName().'"');

 

◆帳票の下部、備考欄にお客様からのお問合せを載せたい

 

app/Plugin/OrderPdf/Service/OrderPdfService.php

188行目あたり  

            // 備考を描画する
            $this->renderEtcData($order, $formData);

 カッコ内に$orderを足す

 

320行目あたり、<備考>の下に以下を足す


        $this->SetFont(self::FONT_GOTHIC, 'B', 10);
        $this->MultiCell(0, 6, '< 備考 >', 'T', 2, 'L', 0, '');
        

        $this->SetFont(self::FONT_GOTHIC, '', 10);        
        $this->Ln();
        $text = preg_replace('/\s+$/us', '',  $Order['Message']);
        $this->MultiCell(0, 6, $text, '0', 2, 'L', 0, '20');

 

備考欄にではなく、表よりも上の方の

購入者情報らへん( protected function renderOrderData(Order $Order)内)に記載する場合には、

$this->lfText(25, 148,$Order->getMessage(), 11);

みたいな記述でOKなんですが

これだと改行されないし、長い文章だと表とかぶってしまう場合があるので見にくいのですよね。

 

表の下部、備考欄に記載するには、上に書いたような書き方でないとうまく表示されません。

またも、この方法にたどり着くまでに1日がかりでした(^ー^;

 

 

◆受注メールの件名にお客様の名前を入れたい

 
[ショップ名] ○○○様- ご注文ありがとうございます

src/Eccube/Service/MailService.php

247行目

 ->setSubject('[' . $this->BaseInfo->getShopName() . '] ' . $Order->getName01() . '様-  ' . $MailTemplate->getSubject())
 

 

撮影うらばなし

 

最近、当店では石の写真の背景に【銀一シルクグレーカード】というグレーの背景を用いるようにしています。

 

インターネットでは、スマホやパソコン(デスクトップ、ノート)、タブレットなど、見る側の環境によって、同じ写真でも異なる色合いに見えることが少なくありません。

 

当店のパソコンで、いくら実物に近い色で写真を色調整したとしても、見る側の環境によっては、色褪せて見えたり、赤っぽく見えたり、青っぽく見えたり。

見る側の環境によって色が異なって見えるのは、どうしても避けられない現象です。

 

でも、だからといって、開き直って過度に写真の彩度をあげたり、過度に明るくしたりして、商品の魅力をオーバーアピールすると、

購入するときはその美しさにワクワクしても、

いざ商品を受け取ったときに、「思っていたのとちょっと違う・・・」ということになりかねません。

 

そこで重要になってくるのが、基準をおく、ということです。

 

グレーバランスとは、グレーが正しくグレーに見えるように調整することで、他の色もほぼ正しく表示されるようになり、その写真の色味がほぼ正確になるというものです。

 

当店では、実物を見たときの「がっかり」を少しでも避けるため

せめて撮影編集時にきちんとグレーバランスをとることで、写真の全体の色味の基準を統一して、鮮やかすぎず、色褪せすぎず、石そのものの正しい色をお見せしていきたいと考えています。

絵本「たまご たまご」がAmazonKindleより出版されました★

お久しぶりですこんにちは!ニコニコ

 

この度、私の姉:池田 薫 (文)と私Akihi(絵)の絵本「たまご たまご」が、 Amazon Kindleより出版される運びとなりました✨😃
http://amzn.asia/d/doqXV4Z

 

この絵本を作ったのはもう何年も前のこと。
多くの方に見てもらいたいと思いつつも、出版の高過ぎる壁に、世に出すのを諦めざるを得ませんでした。

 

しかしこの度、ECHARINIUM Music &amp; Art 様の多大なるお力添えをいただきまして、Amazon Kindleから電子書籍として出版していただけることになりました✨
ありがとうございますハート

 

 

絵本「たまご たまご」

命について描いた、ほっとするあったかい絵本となっています。
 
 
 

「繋がっている
生まれたときからずっと
生まれる前からずっと」

 

 

 
僅か数ページの絵本ではありますが、1人でも多くの方に、この世界を感じていただけたら嬉しいです✨

(1ページずつ、ゆーーーーっくりと眺めていただくのをオススメします❤)

 

Amazon Kindleでどうやって本を読むの?
分からない方も多いかもしれません。

Kindleの本を読むためには、Amazonのアカウントと、パソコンかスマホと、Kindleアプリが必要です。
(それとWi-Fi環境)
(パソコンでは2ページずつ、スマホでは1ページずつ、見れるようです)

 

Kindleアプリをダウンロードしてインストールしなければならないの?

そうなんです。

慣れないと、ちょっとだけ、ハードルは高いかもしれませんが、
もしも宜しければ、是非ハードルを越えて、この絵本を眺めに来てくださると嬉しいです。


そうやって一人でも多くの方に読んでもらえることによって、更に多くの方の目に留まることに繋がるのだそうです。

 

私も姉も、子育て中の方や、自分に自身が持てなくなった方、

そして、一人でも多くの方に、この絵本を見てもらいたいと思っています。

 

そのために、もしもよければ、Amazonでレビューを残してくださると嬉しいです✨✨

 

この度のAmazon Kindle出版記念といたしまして、2018年11月末日までにレビューを残してくださった方の中から抽選で、私のイラスト絵葉書セットか、お好きな天然石(2000円相当)をプレゼントしたいと思います🎶❤️

 

もしもAmazonでレビューをしてくださいましたら、是非レビューアカウント名とお名前をお知らせくださいね✨
(どなたがコメントを下さったのか、お名前はこちらからは分かりませんので)

 
この絵本が、1人でも多くの必要とされる方に届きますように・・・。

多謝💕

 

[たまご たまご] http://amzn.asia/d/doqXV4Z

 

1 | 2 | 3 | 4 | 5 | 最初次のページへ >>