Quantcast
Channel: EC-CUBE アーカイブ - あずみ.net
Viewing all 271 articles
Browse latest View live

【EC-CUBE3】会員登録承認制のクローズドサイト(会員制サイト)を簡単に作成する方法


【EC-CUBE3】様々なページで商品レコメンドができるプラグイン一覧

$
0
0

様々なページで商品レコメンドができるEC-CUBE3用のプラグイン一覧を紹介します。

カート内の商品と一緒に注文された商品を集計しておすすめ商品を表示するプラグイン。

【EC-CUBE3】カート内レコメンドプラグインをカルーセル表示対応しました

商品詳細ページの商品と一緒に注文された商品を集計しておすすめ商品を表示するプラグイン。

【EC-CUBE3】商品詳細ページレコメンドプラグインをカルーセル表示対応しました

商品一覧ページに表示されている商品と一緒に注文された商品を集計しておすすめ商品を表示するプラグイン。

【EC-CUBE3】商品一覧レコメンドプラグイン

お気に入り一覧ページに表示されている商品と一緒に注文された商品を集計しておすすめ商品を表示するプラグイン。

【EC-CUBE3】お気に入り一覧レコメンドプラグイン

 

【EC-CUBE3】任意のプラグインのエンティティをコマンドで自動生成する方法

$
0
0

EC-CUBE3用に作成した任意のプラグインのエンティティをコマンドで自動生成する方法です。

ymlファイルにテーブル定義後、以下のコマンドを実行して下さい。

vendor/bin/doctrine orm:generate:entities --extend="Eccube\\Entity\\AbstractEntity" --filter="Plugin\\[PluginName]\\Entity\\[EntityName]” app/

[PluginName]と[EntityName]は適宜変更して下さい。

【EC-CUBE3】カテゴリ別ランキング(売上個数または売上金額)ブロックプラグインがカテゴリページ以外のページでランキングが表示されるようになりました

$
0
0

EC-CUBE3用のカテゴリ別ランキング(売上個数または売上金額)ブロックプラグインがカテゴリページ以外のページでランキングが表示されるようになりました。

設定ページでカテゴリを指定するとカテゴリページ以外のページでランキングが表示されます。

詳しくはオーナーズストアを御覧ください。

カテゴリ別売り上げランキングブロック for EC-CUBE3

【EC-CUBE3】おすすめ商品管理(カルーセルスライダー表示)プラグイン

$
0
0

EC-CUBE3用のおすすめ商品管理(カルーセルスライダー表示)プラグインを作りました。

カルーセルスライダーで表示されるおすすめ商品をブロックとして追加することが出来ます。

設定ページにてカルーセルスライダーの表示設定が出来ます。
カルーセルスライダーは横方向と縦方向に表示させることが出来ます。

詳しくはオーナーズストアを御覧ください。

おすすめ商品管理(カルーセルスライダー表示)プラグイン for EC-CUBE3

[EC-CUBE3]バナー管理/カルーセルスライダー表示プラグイン

$
0
0

EC-CUBE3用のバナー管理/カルーセルスライダー表示プラグインを作りました。

管理画面でバナーが登録でき、登録したバナーがカルーセルスライダーで表示されるバナー管理プラグインです。

インストール時にバナーブロックが追加され、ブロックを設置するとバナーがカルーセルスライダーで表示されます。

設定ページにてカルーセルスライダーの細かい表示設定が出来ます。

カルーセルスライダーは横方向と縦方向に表示させることが出来るので、
サイドメニューに綺麗にバナーを表示させることもできます。

詳しくはオーナーズストアをご覧ください。

バナー管理/カルーセルスライダー表示 for EC-CUBE3

【EC-CUBE3】会員限定カテゴリページプラグイン

$
0
0

EC-CUBE3用の会員限定カテゴリページプラグインを作りました。

プラグインを導入するとログインした会員しか閲覧できないクローズドなカテゴリページを設定することが出来ます。

未ログインユーザーが会員限定カテゴリページにアクセスするとログインページが表示されるようになります。

詳しくはオーナーズストアをご覧ください。

会員限定カテゴリページプラグイン for EC-CUBE3

【EC-CUBE3】フロント認証(クローズド・非公開)プラグイン

$
0
0

EC-CUBE3用のフロント認証(クローズド・非公開)プラグインを作りました。

プラグインを導入すると、管理者が発行したIDとパスワードを入力しないとフロントページが閲覧できないクローズドなECサイトになります。

詳しくはオーナーズストアをご覧ください。

フロント認証(クローズド・非公開)プラグイン for EC-CUBE3


在庫数表示プラグイン for EC-CUBE3

$
0
0

在庫数表示プラグイン for EC-CUBE3を作りました。

商品詳細ページに在庫数を表示するプラグインです。

詳しくはオーナーズストアをご覧ください。

在庫数表示プラグイン for EC-CUBE3

商品別カート内メッセージ for EC-CUBE3

$
0
0

商品別カート内メッセージ for EC-CUBE3を作りました。

商品登録画面でメッセージを登録するとカートに商品を入れたときメッセージが表示されます。

詳しくはオーナーズストアをご覧ください。

商品別カート内メッセージ for EC-CUBE3

商品規格別メッセージ for EC-CUBE3

$
0
0

商品規格別メッセージ for EC-CUBE3を作りました。

商品規格別にメッセージが表示できるプラグインです。

詳しくはオーナーズストアをご覧ください。

商品規格別メッセージ for EC-CUBE3

お届け日で受注検索 for EC-CUBE3

$
0
0

お届け日で受注検索 for EC-CUBE3を作りました。

お届け日で受注検索ができるプラグインです。

詳しくはオーナーズストアをご覧ください。

お届け日で受注検索 for EC-CUBE3

ショップ用メモで受注検索 for EC-CUBE3

$
0
0

ショップ用メモで受注検索 for EC-CUBE3を作りました。

ショップ用メモで受注検索できます。

詳しくはオーナーズストアをご覧ください。

ショップ用メモで受注検索 for EC-CUBE3

ショップ用メモで会員検索 for EC-CUBE3

$
0
0

ショップ用メモで会員検索 for EC-CUBE3を作りました。

ショップ用メモで会員検索ができます。

詳しくはオーナーズストアをご覧ください。

ショップ用メモで会員検索 for EC-CUBE3

【EC-CUBE2.13】CSV出力項目追加プラグインの項目設定サンプル

$
0
0

【EC-CUBE2.13】CSV出力項目追加プラグインの項目を設定するサンプル一覧です。

お届け日設定

出力タイプ:受注管理
項目名:時間指定
カラム:(SELECT shipping_time FROM dtb_shipping S WHERE S.order_id = dtb_order.order_id) AS shipping_time

 

時間指定設定

出力タイプ:受注管理
項目名:時間指定
カラム:(SELECT shipping_time FROM dtb_shipping S WHERE S.order_id = dtb_order.order_id) AS shipping_time

CSV出力項目追加プラグイン for EC-CUBE2


【EC-CUBE4】会員情報項目を追加するプラグインを作る方法

$
0
0

EC-CUBE4で会員情報項目を追加するプラグインを作る方法です。

まず最初にコマンドでプラグインの雛形を生成します。

bin/console eccube:plugin:generate

上記コマンドを実行するとプラグインジェネレータのウィザードが開始されますので任意のテキストを入力してください。

今回は会員情報にニックネームを追加します。

EC-CUBE Plugin Generator Interactive Wizard
===========================================

 name [EC-CUBE Sample Plugin]:
 > ニックネーム

 code [Sample]:
 > Nickname

 ver [1.0.0]:
 > 1.0.0

入力が完了したらPluginディレクトリ内にNicknameディレクトリが自動で生成されます。

会員情報テーブルにニックネームフィールドを追加

会員情報テーブル(dtb_customer)にニックネームフィールドを追加するため、Customer Entityをtraitと@EntityExtension アノテーションを使って拡張します。

CustomerTraitを作成してEntityディレクトリに配置してください。

サンプルコードは以下のとおりです。

<?php

namespace Plugin\Nickname\Entity;

use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation as Eccube;

/**
 * @Eccube\EntityExtension("Eccube\Entity\Customer")
 */
trait CustomerTrait {

    /**
     * @ORM\Column(name="nickname", type="string", length=255, nullable=true)
     */
    private $nickname;

    public function getNickname() {
        return $this->nickname;
    }

    public function setNickname($nickname) {
        $this->nickname = $nickname;

        return $this;
    }
}

EC-CUBE4のドキュメントにもEntityの拡張方法が掲載されています。

フォームにニックネーム項目を追加

ニックネームカラムを追加したので、次はフォームにニックネームを追加します。

先程作成したCustomerTraitのnicknameフィールドに@FormAppend アノテーションを追加します。

@FormAppend アノテーションを追加することでニックネーム項目が自動で生成されます。

<?php

namespace Plugin\Nickname\Entity;

use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation as Eccube;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @Eccube\EntityExtension("Eccube\Entity\Customer")
 */
trait CustomerTrait {

    /**
     * @ORM\Column(name="nickname", type="string", length=255, nullable=true)
     * @Eccube\FormAppend(
     *  auto_render=true,
     *  type="\Symfony\Component\Form\Extension\Core\Type\TextType",
     *  options={
     *    "required": true,
     *    "label": "ニックネーム"
     *  }
     * )
     * @Assert\NotBlank(message="ニックネームを入力してください")
     */
    private $nickname;

    public function getNickname() {
        return $this->nickname;
    }

    public function setNickname($nickname) {
        $this->nickname = $nickname;

        return $this;
    }
}

@FormAppend アノテーションのauto_renderをfalseにして、form_themeに自作のフォームのパスを指定するとオリジナルの入力項目が作成できます。

@FormAppend アノテーションのtypeは入力項目の種類を指定しています。今回はTextTypeを指定しています。

@FormAppend アノテーションのoptionsはlabelやrequiredなどのオプションが指定できます。

@NotBlankで入力チェックも出来ます。

詳しくはEC-CUBE4ドキュメントの「Entity からフォームを自動生成する」をご確認ください。

以上でプラグインは完成です。

動作確認のためコマンドでプラグインをインストールして有効化します。

プラグインのインストールと有効化

プラグインはコマンドでインストールと有効化が出来ます。

プラグインのインストール方法は以下のとおりです。

bin/console eccube:plugin:install --code Nickname

プラグインの有効化の方法は以下のとおりです。

bin/console eccube:plugin:enable --code Nickname

プラグインを有効化すると、「新規会員登録ページ」、マイページの「会員情報編集ページ」、管理画面の「会員登録ページ」にニックネーム項目が追加されます。

ニックネームを入力して保存するとニックネームがデータベースに保存されます。

【EC-CUBE4】商品を一個しか購入できないプラグインを作る方法

$
0
0

EC-CUBE4で商品を一個しか購入できないプラグインを作る方法です。

EC-CUBE4にバンドルされている「PurchaseFlowにProcessorを追加するサンプル」をベースに開発してみます。

まず最初にコマンドでプラグインの雛形を生成します。

bin/console eccube:plugin:generate

上記コマンドを実行するとプラグインジェネレータのウィザードが開始されますので任意のテキストを入力してください。

今回は以下のように入力しました。

EC-CUBE Plugin Generator Interactive Wizard
===========================================

 name [EC-CUBE Sample Plugin]:
 > 商品を一個しか購入できないプラグイン

 code [Sample]:
 > SaleLimitOne

 ver [1.0.0]:
 > 1.0.0

入力が完了したらPluginディレクトリ内にSaleLimitOneディレクトリが自動で生成されます。

商品規格テーブルに商品を一個しか購入できないフラグを追加

商品規格テーブル(dtb_product_class)に商品を一個しか購入できないフラグフィールドを追加するため、ProductClass Entityをtraitと@EntityExtension アノテーションを使って拡張します。

ProductClassTraitを作成してEntityディレクトリに配置してください。

サンプルコードは以下のとおりです。

<?php

namespace Plugin\SaleLimitOne\Entity;

use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation as Eccube;

/**
 * @Eccube\EntityExtension("Eccube\Entity\ProductClass")
 */
trait ProductClassTrait {

    /**
     * @ORM\Column(name="sale_limit_one", type="boolean", options={"default":false})
     */
    private $sale_limit_one;

    public function isSaleLimitOne()
    {
        return $this->sale_limit_one;
    }
    
    public function setSaleLimitOne($sale_limit_one)
    {
        $this->sale_limit_one = $sale_limit_one;
        
        return $this;
    }
}

EC-CUBE4のドキュメントにもEntityの拡張方法が掲載されています。

今回はフラグフィールドなのでtypeにbooleanを指定しています。

フォームに商品を一個しか購入できないフラグ項目を追加

一個しか購入できないフラグフィールドを追加したので、次はフォームに一個しか購入できないフラグ項目を追加します。

先程作成したProductClassTraitのsale_limit_oneフィールドに@FormAppend アノテーションを追加します。

@FormAppend アノテーションを追加することでニックネーム項目が自動で生成されます。

<?php

namespace Plugin\SaleLimitOne\Entity;

use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation as Eccube;

/**
 * @Eccube\EntityExtension("Eccube\Entity\ProductClass")
 */
trait ProductClassTrait {

    /**
     * @ORM\Column(name="sale_limit_one", type="boolean", options={"default":false})
     * @Eccube\FormAppend(
     *  auto_render=true,
     *  type="\Eccube\Form\Type\ToggleSwitchType",
     *  options={
     *    "label": "商品を一個しか購入できないフラグ"
     *  }
     * )
     */
    private $sale_limit_one;

    public function isSaleLimitOne()
    {
        return $this->sale_limit_one;
    }
    
    public function setSaleLimitOne($sale_limit_one)
    {
        $this->sale_limit_one = $sale_limit_one;
        
        return $this;
    }
}

@FormAppend アノテーションのtypeでToggleSwitchTypeを指定すると有効・無効の切り替えボタンが生成されます。

@FormAppend アノテーションのoptionsはlabelなどのオプションが指定できます。

詳しくはEC-CUBE4ドキュメントの「Entity からフォームを自動生成する」をご確認ください。

これで管理画面の商品登録ページに商品を一個しか購入できないフラグ項目が追加され、フラグがデータベースに登録できるようになりました。

PurchaseFlowを使ってカートに入れたときの商品数量チェック

PurchaseFlowを使うと簡単にカートに入れたときの商品数量をチェックできます。

EC-CUBE4にバンドルされている「PurchaseFlowにProcessorを追加するサンプル」をベースにして、商品を一個しか購入できないフラグが有効化された商品の場合、商品数量チェックするようにします。

以下のサンプルコードを「Service/PurchaseFlow/Processor」ディレクトリ内に配置して下さい。ファイル名は「SaleLimitOneValidator.php」として下さい。

<?php
namespace Plugin\SaleLimitOne\Service\PurchaseFlow\Processor;

use Eccube\Annotation\CartFlow;
use Eccube\Annotation\OrderFlow;
use Eccube\Annotation\ShoppingFlow;
use Eccube\Entity\ItemInterface;
use Eccube\Service\PurchaseFlow\InvalidItemException;
use Eccube\Service\PurchaseFlow\PurchaseContext;
use Eccube\Service\PurchaseFlow\ItemValidator;

/**
 * @CartFlow
 */
class SaleLimitOneValidator extends ItemValidator {

    /**
     * @param ItemInterface $item
     * @param PurchaseContext $context
     *
     * @throws InvalidItemException
     */
    protected function validate(ItemInterface $item, PurchaseContext $context)
    {
        if (!$item->isProduct()) {
            return;
        }

        if ($item->getProductClass()->isSaleLimitOne()) {
            $quantity = $item->getQuantity();
            if (1 < $quantity) {
                $this->throwInvalidItemException('商品は1個しか購入できません。');
            }
        }
    }

    protected function handle(ItemInterface $item, PurchaseContext $context)
    {
        $item->setQuantity(1);
    }

}

@CartFlow アノテーションを追加すると、カートのPurchaseFlowにProcessorを追加されカートに商品を入れたときのチェックが行えるようになります。

以上でプラグインは完成です。

動作確認のためコマンドでプラグインをインストールして有効化します。

プラグインのインストールと有効化

プラグインはコマンドでインストールと有効化が出来ます。

プラグインのインストール方法は以下のとおりです。

bin/console eccube:plugin:install --code SaleLimitOne

プラグインの有効化の方法は以下のとおりです。

bin/console eccube:plugin:enable --code SaleLimitOne

プラグインを有効化すると、管理画面の「商品登録ページ」に商品を一個しか購入できないフラグ項目が追加されます。

商品を一個しか購入できないフラグを有効にして保存すると、フラグを有効化した商品は数量2個以上でカートに入れるとエラメッセージが表示され、カートには商品が1個しか追加されなくなります。

【EC-CUBE4】対応状況を注文取消し(キャンセル)したときに何かするプラグインを作る方法

$
0
0

EC-CUBE4で対応状況を注文取消し(キャンセル)したときに何かするプラグインを作る方法です。

まずは以下のコマンドでプラグインの雛形を作ります。

プラグインコードはなんでも良いのですが、今回は「CancelStatus」にしてください。

bin/console eccube:plugin:generate

注文取消し時に何かするイベントを登録

自動生成されたプラグイン一式内にServiceディレクトリを作り、以下のOrderStateMachine.phpファイルを設置して下さい。

<?php

namespace Plugin\CancelStatus\Service;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Eccube\Service\PurchaseFlow\PurchaseContext;

// SymfonyのWorkflowコンポーネントのイベントを使用します。
use Symfony\Component\Workflow\Event\Event;

/**
 * @author Akira Kurozumi <info@a-zumi.net>
 */
class OrderStateMachine implements EventSubscriberInterface {

    public static function getSubscribedEvents(): array
    {
        return [
            'workflow.order.transition.cancel' => [['cancel']],
        ];
    }

    /**
     * 対応状況が注文取消しに変わったときの処理
     * 
     * @param Event $event
     */
    public function cancel(Event $event)
    {
        // 注文取消しになった受注データ
        $Order = $event->getSubject()->getOrder();
        
        // 注文取消しになった会員データ
        $Customer = $Order->getCustomer();
    }
}

cancelメソッドに処理したいことを書けば完成です。

プラグインをインストール・有効化すると動作します。

このプラグインのファイル一式はこちら

【EC-CUBE4】合計金額3000円未満の場合は送料に300円加算するプラグインを作る方法

$
0
0

EC-CUBE4で合計金額3000円未満の場合は送料に300円加算するプラグインを作る方法です。

まずは以下のコマンドでプラグインの雛形を作ります。

プラグインコードはなんでも良いのですが、今回は「DeliveryFee」にしてください。

bin/console eccube:plugin:generate

 

送料計算するプロセッサーを用意

自動生成されたプラグイン一式内にService/PurchaseFlowディレクトリを作り、以下のDeliveryFeePreprocessor.phpファイルを設置して下さい。以上で完成です。

<?php

namespace Plugin\DeliveryFee\Service\PurchaseFlow;

use Eccube\Service\PurchaseFlow\ItemHolderPreprocessor;
use Eccube\Service\PurchaseFlow\PurchaseContext;
use Eccube\Entity\ItemHolderInterface;
use Eccube\Service\PurchaseFlow\Processor\DeliveryFeePreprocessor as BaseDeliveryFeePreprocessor;
use Eccube\Annotation\ShoppingFlow;
use Eccube\Annotation\OrderFlow;
use Eccube\Entity\Order;

/**
 * 合計金額3000円未満の場合、送料に300円加算
 * 
 * @author Akira Kurozumi <info@a-zumi.net>
 * 
 * ご注文手続きページで実行されるようアノテーションを設定
 * @ShoppingFlow
 */
class DeliveryFeePreprocessor implements ItemHolderPreprocessor {

    public function process(ItemHolderInterface $itemHolder, PurchaseContext $context)
    {
        if (!$itemHolder instanceof Order) {
            return;
        }
        
        // お届け先ごとに判定
        foreach ($itemHolder->getShippings() as $Shipping) {
            // 送料無料の受注明細かどうか確認
            foreach ($Shipping->getOrderItems() as $Item) {
                // 送料明細を探す
                if ($Item->getProcessorName() == BaseDeliveryFeePreprocessor::class) {
                    // 送料明細の数量が0の場合は送料無料
                    if ($Item->getQuantity() == 0) {
                        // 送料無料の場合は次の受注明細へ
                        continue 2;
                    }
                }
            }

            // 合計金額計算
            $total = 0;
            foreach ($Shipping->getProductOrderItems() as $Item) {
                $total += $Item->getPriceIncTax() * $Item->getQuantity();
            }

            // 合計金額が3000円未満の場合、送料に300円加算
            if ($total < 3000) {
                foreach ($Shipping->getOrderItems() as $Item) {
                    if ($Item->getProcessorName() == BaseDeliveryFeePreprocessor::class) {
                        $Item->setPrice($Item->getPrice() + 300);
                    }
                }
            }
        }
    }
}

アノテーションの設定を忘れずに

購入処理(PurchaseFlow)に独自の処理を追加するためには@ShoppingFlowアノテーションを追加する必要があります。

アノテーションの設定を忘れると動作しません。

送料無料条件の考慮

EC-CUBE4本体でも送料計算をしていますのでそちらの考慮も必要です。

EC-CUBE4本体では送料無料条件のチェック機能があり、送料無料条件にマッチした場合送料明細の数量が0に設定されます。

ですので、送料明細の数量が0の場合はプラグインの送料条件を適用しないようにしています。

プラグインのインストールと有効化

プラグインをインストールと有効化を行うと上記の送料条件が動作します。

このプラグインのファイル一式はこちら

【EC-CUBE4】商品一覧を無限スクロールに対応するプラグインを作る方法

$
0
0

EC-CUBE4で商品一覧を無限スクロールに対応するプラグインを作る方法です。

まずは以下のコマンドでプラグインの雛形を作ります。

プラグインコードはなんでも良いのですが、今回は「InfiniteScroll」にしてください。

bin/console eccube:plugin:generate

無限スクロールの実装

まずは無限スクロールをjavascriptで実装します。

自動生成されたプラグイン一式内にResource/tempalte/default/jsディレクトリを作り、以下のscript.twigファイルを設置して下さい。

{% block javascript %}
    <script src="//unpkg.com/infinite-scroll@3/dist/infinite-scroll.pkgd.min.js"></script>
    <script>
        $(function () {
            var nextURL;

            function updateNextURL(doc) {
                nextURL = $(doc).find('ul.ec-pager a:contains("次へ")').attr('href');
                // 2ページ目以降のカートボタンが動作しないので非表示
                $(doc).find('li.ec-shelfGrid__item form, li.ec-shelfGrid__item .ec-productRole__btn').hide();
            }

            updateNextURL(document);

            var $container = $('.ec-layoutRole__main').infiniteScroll({
                path: function() {
                    return nextURL;
                },
                append: '.ec-shelfRole',
                history: true,
                hideNav: '.ec-pagerRole',
            });
            
            $container.on('load.infiniteScroll', function(event, response) {
                updateNextURL(response);
            });
        });
    </script>
{% endblock %}

無限スクロール対応すると2ページ目以降の「カートに入れる」ボタンが機能しないのでボタンを非表示にしています。

javascriptを商品一覧ページで出力

上記で作成したjavascriptを商品一覧ページで出力させるようにEvent.phpにイベントを登録します。

<?php

namespace Plugin\InfiniteScroll;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Eccube\Event\TemplateEvent;

class Event implements EventSubscriberInterface
{
    /**
     * @return array
     */
    public static function getSubscribedEvents()
    {
        return [
            'Product/list.twig' => 'addAsset'
        ];
    }
    
    public function addAsset(TemplateEvent $event)
    {
        $event->addSnippet('@InfiniteScroll/default/js/script.twig');
    }
}

商品一覧ページ用のテンプレートファイル「Product/list.twig」にjavascriptを読み込ませるようイベントで登録しています。

$event->addSnippetでjavascriptのパスを指定するとページの下部にjavascriptが出力されるようになります。

プラグインのインストールと有効化

以上で完成です。

プラグインのインストールと有効化を行うと商品一覧ページにて無限スクロールが実行されます。

このプラグインのファイル一式はこちら

Infinite Scrollのライセンスについて

Infinite Scrollを商用で使用する場合、有料ライセンスが必要です。

ライセンスについてはこちら

Viewing all 271 articles
Browse latest View live