バージョン選択

フォーラム

メニュー

オンライン状況

51 人のユーザが現在オンラインです。 (44 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 51
もっと...

サイト内検索

質問 > その他 > カートの中身を削除する機能について

その他

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
manmosu999
投稿日時: 2018/6/5 13:10
対応状況: −−−
新米
登録日: 2018/6/5
居住地:
投稿: 8
カートの中身を削除する機能について
▼テンプレート
[EC-CUBE]3.0.16 , サーバーの簡単インストール機能
[レンタルサーバ] エックスサーバー
[OS] Windows10
[PHP] 7.1
[導入プラグインの有無] カートクリアボタン追加プラグイン(EC-CUBE3系) 、カート遷移しませんプラグイン
[カスタマイズの有無] 無
[現象] お世話になります。ECサイト構築に興味を持ち、先日EC-CUBE3.0.16をインストールして使用してみました。
初見の私でも簡単ではありますが商品登録や規格登録など、一通り操作することができました。
使ってみると欲が出てくるもので、新たなブロックの設置なども試してみたいのですが、一つだけ気になることがありご質問させていただきます。

商品をカートに入れると商品の数と合計金額がカゴの中に表示されるのですが、かごの中をクリックで開くと商品と、カートに進むボタン、キャンセルボタンとがあり、このキャンセルボタンが商品の購入をキャンセルする(削除)機能だと思っていました。
ただこのキャンセルボタンはカゴを閉じるだけのようです。

一度かごに入れたものを削除したいということは使う側からすればあると思うのですが、カートをクリアするためには一度「カートに進む」を押してから削除しなくてはなりません。

カートクリアボタン追加プラグインというのを導入しましたが、これもカートに進んでからしか機能しないプラグインのようです。(参照タグがありましたが商品詳細ページでは使えませんでした)

有料プラグインで「どこでもカート商品削除プラグイン for EC-CUBE3」というのもありますが説明ページを見る限り、削除ボタンが×なのでカートを閉じる×と紛らわしいかなと…。
(「削除」という文章にカスタマイズできればいいのですが購入してみないとわからないので。。。)

EC-CUBE 3.0.16はとてもよくできていると思うのですが、カゴの中の商品を削除する機能が元々ないというのが不思議でなりません。

カートクリアボタン追加プラグインが他のページでも使用できればいいのですが、ちょっと厳しそうです。

EC-CUBE 2系だとカートの中身を削除するカスタマイズは可能なようですが、EC-CUBE 3系だと難しいのでしょうか?
【EC-Cube : ver 2.12.5】カートの中身を一括削除するお
http://namahage.blog.jp/archives/52361613.html

フォーラムで検索してもカートの中身を削除する機能について有効な情報が得られませんでしたので質問させていただきました。

長文になってしまい、要点がわかりにくい文章になってしまいましたが、お知恵をお借りできればと存じます。
umebius
投稿日時: 2018/6/5 15:11
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: カートの中身を削除する機能について
弊社のカートクリアボタン追加プラグインをご検討いただきありがとうございます。

カートの中身を消すには基本的に、src/Eccube/Service/CartService.phpというクラスのclearメソッドを呼べば良いので、3系ではさほど難しくはございません。

下記のように使用できます。
$app['eccube.service.cart']->clear()->save();

ボタンを押したときにこのメソッドが呼ばれるようにカスタマイズしてやればOKです。


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

manmosu999
投稿日時: 2018/6/5 21:03
対応状況: −−−
新米
登録日: 2018/6/5
居住地:
投稿: 8
Re: カートの中身を削除する機能について
umebius様

ご回答ありがとうございます。
「カートクリアボタン追加プラグイン」利用させていただいております。
またumebius様のサイトと思われますがhttps://umebius.com/にあります
「ページ内の好きな場所にブロックを設置する方法」や
「動的ブロックとは何か?」など非常に参考になり実践することができました。

そこで今回の件についてなのですが、
”src/Eccube/Service/CartService.phpというクラスのclearメソッドの呼び出し方”
というのは、動的ブロックを作って呼び出すやり方と同じような部分はありますか?

例えば「カートクリアボタン追加プラグイン」ではControllerフォルダにCartClearController.phpをおいて何らかの形で削除ボタンを商品購入画面で呼び出していると思われますが、動的ブロックを作るやり方と同じでsrc/Eccube/Controller/Block/CartClearController.php
として呼び出す方法は可能でしょうか?

ちょっとイマイチ自分でも良く分かっていないところがあるので、だいぶ的外れなことをお聞きしているかも知れませんが
アドバイスを頂けたらと思います。
umebius
投稿日時: 2018/6/6 9:54
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: カートの中身を削除する機能について
引用:
例えば「カートクリアボタン追加プラグイン」ではControllerフォルダにCartClearController.phpをおいて何らかの形で削除ボタンを商品購入画面で呼び出していると思われますが、動的ブロックを作るやり方と同じでsrc/Eccube/Controller/Block/CartClearController.php として呼び出す方法は可能でしょうか?


方法としては似ております。次のような流れとなります。

・削除ボタンをカートブロック内に追加
・削除ボタンを押すと、カート商品削除専用URLへ遷移(URLは・FrontControllerProviderでコントローラーを定義。/Block/CartClearController.phpで問題ございません)
・上記で定義したコントローラーでclearする。
・元のページにリダイレクト


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

manmosu999
投稿日時: 2018/6/6 12:25
対応状況: −−−
新米
登録日: 2018/6/5
居住地:
投稿: 8
Re: カートの中身を削除する機能について
umebius様

お世話になります。

とりあえず動的ブロックを作るやり方と同じにやってみましたが
システムエラーが出るばかりで正直どうしようもない状態です。

>削除ボタンをカートブロック内に追加

削除ボタンをどうしたらいいか分からなかったので
カートクリアプラグインのEvent.phpから削除に関する記述をそのまま拝借。
ブロック名:カートのクリア
ファイル名:clear.twig
ブロックデータ:<div id="cart_clear" class="cart_clear" style="float: left;">
<a href="{$url}" token-for-anchor="{$token}" data-method="put" data-message="カートから全ての商品を削除してもよろしいですか?"><span>全て削除</span></a>
</div>

>削除ボタンを押すと、カート商品削除専用URLへ遷移(URLは・FrontControllerProviderでコントローラーを定義。/Block/CartClearController.phpで問題ございません)

カートクリアプラグインのCartClearController.phpを
Blockフォルダにそのままアップしても当然だめですよね…。

元ファイル
namespace Plugin\CartClear\Controller;
use Eccube\Application;
use Eccube\Service\CartService;
use Symfony\Component\HttpFoundation\Request;
public function index(Application $app, Request $request)
{

いちおう直してみた修正ファイル
namespace Eccube\Controller\Block;
use Eccube\Application;
use Eccube\Service\CartService;
use Symfony\Component\HttpFoundation\Request;
class CartController
public function index(Application $app)
{

この部分も書き換えが必要だと思われますが、さっぱりわかりません。
/* @var $cartService CartService */
$Plugin = $app['eccube.repository.plugin']->findOneBy(array(
'code' => 'ProductOption',
'enable' => 1,
));
if($Plugin){
$app['eccube.productoption.service.cart']->clear()->save();
}

正直、自力でプラグインを作るようなものなので、まず無理なのではないかと思っています。
検索しても、ヒントになるようなものはほとんどなく、
EC-CUBE 3.0系に、「すぐに購入する」ボタンを追加するカスタマイズ
https://www.ec-cube.net/tsubo/2017/03/02/6070
上記URLでカートへ商品を追加する.部分だけを外してみましたがシステムエラーで動きませんでした。

他には、
【ECCUBE3プラグイン開発】カートの中身を制御する(購入品目数・個数制御)
http://blog.zamuu.net/2017/0803/eccube3_control_cart_item_num/
でしょうか。こちらもよく分かりませんでした。

仕方ないので商品詳細ページ内にカートクリアプラグインで使用しているコードを入れてみました。
<div id="cart_clear" class="cart_clear" style="float: left;">
<a href="http://xkids.xsrv.jp/ec-cube/plugin/cart_clear/clear" token-for-anchor="" data-method="put" data-message="カートから全ての商品を削除してもよろしいですか?"><span>全て削除</span></a>
</div>
これだとカートから商品は削除されるのですが、ショッピングカートページへリダイレクトされてしまいます。

元の商品ページへリダイレクトさせる方法はありますでしょうか?
自分で削除ボタンを導入するのは厳しそうなので、カートクリアプラグインをカスタマイズして、別のプラグインとして動作させるほうが、現時点では一番良い方法なのかなと。。。

自力で削除ボタンを作りたい気持ちに変わりはないですが、解決策を見出すための情報が乏しく、糸口が見えないようではやっていてもしんどいので…。

長々と書き連ねてしまいすみません。。。
manmosu999
投稿日時: 2018/6/7 0:20
対応状況: −−−
新米
登録日: 2018/6/5
居住地:
投稿: 8
Re: カートの中身を削除する機能について
お世話になります。

色々やってみて、カートクリアプラグインにあるCartClearController.php内の
return $app->redirect($app->url('cart'));の部分を
元のページ(商品詳細ページ)にリダイレクトさせる方法が良いと思いました。

そこでproduct_detailにリダイレクトさせようとしましたがシステムエラーが起きてダメです。
homepageやproduct_listはエラーが出ずにリダイレクトされるのですが、product_detailの場合、ページごとにIDが振ってあるので上手くいかないようです。

Cart遷移しませんプラグインの中に以下の記述があり、
この中のどこかをCartClearController.phpに組み込めば
product_detailの個別ページにリダイレクトされるのではないか思われますが、良い方法はありますでしょうか?

/**
* かーとに商品追加後、商品ページを表示する。
* @param \Eccube\Event\EventArgs $EventArgs
*/
public function toProductDetail(\Eccube\Event\EventArgs $EventArgs){

if (!$this->app['session']->getFlashBag()->has('eccube.front.request.error')) {
$this->app['session']->getFlashBag()->set('eccube.front.cart.success', '購入画面に進む');
}

$Product = $EventArgs->getArgument('Product');

$EventArgs->setResponse(
new RedirectResponse(
$this->app->url('product_detail', array('id' => $Product->getId()))
)
);
}
もう一歩のような気もしますので、お力添えを頂ければと存じますm(__)m
manmosu999
投稿日時: 2018/6/9 22:49
対応状況: −−−
新米
登録日: 2018/6/5
居住地:
投稿: 8
Re: カートの中身を削除する機能について
とあるサイトのおかげで解決することができました。

手順1
商品詳細ページ(Product/detail.twig )のページを編集して
以下のHTMLをカートボタンの辺りに記述して下さい。

<li class="col-xs-12 col-sm-8"><button type="submit" id="clear-cart" class="btn btn-info btn-block prevention-btn prevention-mask">カートクリア</button></li>


手順2
同じく商品詳細ページ(Product/detail.twig )のコードの中にある

$('#add-cart').click(function() {         $('#mode').val('add_cart');     });


の下に以下のコードを記述して下さい。

 $('#clear-cart').click(function() {         $('#mode').val('clear-cart');     });


手順3
/src/Eccube/Form/Type/AddCartType.phpの176行目辺りにある

if ($data['mode'] !== 'add_favorite') {


を以下に変更して下さい。

if ($data['mode'] !== 'add_favorite' && $data['mode'] !== 'clear-cart') {


手順4
/src/Eccube/Controller/ProductController.phpの204行目辺りの

return $app->redirect($app->url('cart')); } }


を以下に変更して下さい。

return $app->redirect($app->url('cart')); } elseif ($addCartData['mode'] === 'clear-cart') {     try {         $app['eccube.service.cart']->clear()->save(); }                catch (CartException $e) {         log_info('カートクリアエラー', array($e->getMessage())); }     return $app->redirect($app->url('product_detail', array('id' => $Product->getId()))); } }


カートクリアボタンの実装は以上となります。
umebius
投稿日時: 2018/6/10 17:10
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: カートの中身を削除する機能について
返信遅くなり申し訳御座いません。
なるほど、商品詳細ページで実装されたのですね。
解決されたようで何よりです。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,288名です
総投稿数は109,688件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.