EC-CUBE3で会員登録承認制のクローズドサイト(会員制サイト)を簡単に作成する方法です。
以下の2つのプラグインを導入すると会員登録承認制のクローズドサイト(会員制サイト)が簡単に作成できます。
EC-CUBE3で会員登録承認制のクローズドサイト(会員制サイト)を簡単に作成する方法です。
以下の2つのプラグインを導入すると会員登録承認制のクローズドサイト(会員制サイト)が簡単に作成できます。
様々なページで商品レコメンドができるEC-CUBE3用のプラグイン一覧を紹介します。
カート内の商品と一緒に注文された商品を集計しておすすめ商品を表示するプラグイン。
商品詳細ページの商品と一緒に注文された商品を集計しておすすめ商品を表示するプラグイン。
商品一覧ページに表示されている商品と一緒に注文された商品を集計しておすすめ商品を表示するプラグイン。
お気に入り一覧ページに表示されている商品と一緒に注文された商品を集計しておすすめ商品を表示するプラグイン。
EC-CUBE3用に作成した任意のプラグインのエンティティをコマンドで自動生成する方法です。
ymlファイルにテーブル定義後、以下のコマンドを実行して下さい。
vendor/bin/doctrine orm:generate:entities --extend="Eccube\\Entity\\AbstractEntity" --filter="Plugin\\[PluginName]\\Entity\\[EntityName]” app/
[PluginName]と[EntityName]は適宜変更して下さい。
EC-CUBE3用のカテゴリ別ランキング(売上個数または売上金額)ブロックプラグインがカテゴリページ以外のページでランキングが表示されるようになりました。
設定ページでカテゴリを指定するとカテゴリページ以外のページでランキングが表示されます。
詳しくはオーナーズストアを御覧ください。
EC-CUBE3用のおすすめ商品管理(カルーセルスライダー表示)プラグインを作りました。
カルーセルスライダーで表示されるおすすめ商品をブロックとして追加することが出来ます。
設定ページにてカルーセルスライダーの表示設定が出来ます。
カルーセルスライダーは横方向と縦方向に表示させることが出来ます。
詳しくはオーナーズストアを御覧ください。
EC-CUBE3用のバナー管理/カルーセルスライダー表示プラグインを作りました。
管理画面でバナーが登録でき、登録したバナーがカルーセルスライダーで表示されるバナー管理プラグインです。
インストール時にバナーブロックが追加され、ブロックを設置するとバナーがカルーセルスライダーで表示されます。
設定ページにてカルーセルスライダーの細かい表示設定が出来ます。
カルーセルスライダーは横方向と縦方向に表示させることが出来るので、
サイドメニューに綺麗にバナーを表示させることもできます。
詳しくはオーナーズストアをご覧ください。
EC-CUBE3用の会員限定カテゴリページプラグインを作りました。
プラグインを導入するとログインした会員しか閲覧できないクローズドなカテゴリページを設定することが出来ます。
未ログインユーザーが会員限定カテゴリページにアクセスするとログインページが表示されるようになります。
詳しくはオーナーズストアをご覧ください。
EC-CUBE3用のフロント認証(クローズド・非公開)プラグインを作りました。
プラグインを導入すると、管理者が発行したIDとパスワードを入力しないとフロントページが閲覧できないクローズドなECサイトになります。
詳しくはオーナーズストアをご覧ください。
在庫数表示プラグイン for EC-CUBE3を作りました。
商品詳細ページに在庫数を表示するプラグインです。
詳しくはオーナーズストアをご覧ください。
商品別カート内メッセージ for EC-CUBE3を作りました。
商品登録画面でメッセージを登録するとカートに商品を入れたときメッセージが表示されます。
詳しくはオーナーズストアをご覧ください。
商品規格別メッセージ for EC-CUBE3を作りました。
商品規格別にメッセージが表示できるプラグインです。
詳しくはオーナーズストアをご覧ください。
お届け日で受注検索 for EC-CUBE3を作りました。
お届け日で受注検索ができるプラグインです。
詳しくはオーナーズストアをご覧ください。
ショップ用メモで受注検索 for EC-CUBE3を作りました。
ショップ用メモで受注検索できます。
詳しくはオーナーズストアをご覧ください。
ショップ用メモで会員検索 for EC-CUBE3を作りました。
ショップ用メモで会員検索ができます。
詳しくはオーナーズストアをご覧ください。
【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
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で商品を一個しか購入できないプラグインを作る方法です。
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を使うと簡単にカートに入れたときの商品数量をチェックできます。
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で対応状況を注文取消し(キャンセル)したときに何かするプラグインを作る方法です。
まずは以下のコマンドでプラグインの雛形を作ります。
プラグインコードはなんでも良いのですが、今回は「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円加算するプラグインを作る方法です。
まずは以下のコマンドでプラグインの雛形を作ります。
プラグインコードはなんでも良いのですが、今回は「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で商品一覧を無限スクロールに対応するプラグインを作る方法です。
まずは以下のコマンドでプラグインの雛形を作ります。
プラグインコードはなんでも良いのですが、今回は「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を商品一覧ページで出力させるように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を商用で使用する場合、有料ライセンスが必要です。
ライセンスについてはこちら。