バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 別ページにログインフォーム設置

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
be-s
投稿日時: 2020/11/9 14:57
対応状況: 解決済
一人前
登録日: 2016/2/2
居住地: São Paulo
投稿: 115
別ページにログインフォーム設置
[EC-CUBE] 4.0.4
[レンタルサーバ] AWS
[OS] Linux
[PHP] 7.3.14
[データベース] MySQL 5.7.28
[WEBサーバ] Apache/2.4.25
[ブラウザ] Chrome
[現象] フロント側とは別に、
[現象] カートページに非ログイン時にログインフォームを表示するように設置したいのですが
以前3系での質問があった同じような設置方法でできますでしょうか?

https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=18422&forum=5&post_id=79374#forumpost79374
umebius
投稿日時: 2020/11/11 6:39
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: 別ページにログインフォーム設置

src/Eccube/Controller/ShoppingController.phpにloginというメソッドがありますが、これが注文フロー内でのログイン画面の処理なので真似してやるのがおすすめです。
ポイントはCustomerLoginTypeのフォームを用いることです。

注文フロー内でのログイン画面のテンプレートはShopping/login.twigですが、これもフォーム部分はほぼそのままカートにコピペすれば良いです。

ログイン成功時と失敗時の遷移先URLを示している_target_path、_failure_pathはcartにしてやると良いかと思います。


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

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

be-s
投稿日時: 2020/11/11 10:28
対応状況: 解決済
一人前
登録日: 2016/2/2
居住地: São Paulo
投稿: 115
Re: 別ページにログインフォーム設置
umebius さん
ありがとうございます。

src/Eccube/Controller/ShoppingController.php
src/Eccube/Resource/template/default/Shopping/login.twig

ベースに作成したらできました。

以下メモです。

Controller側
//以下追加

use Eccube\Form\Type\Front\CustomerLoginType;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
//非ログイン時ログインフォーム設置用追加
public function index(Request $request, AuthenticationUtils $authenticationUtils) 
//public function index(Request $request)
{
    // カートを取得して明細の正規化を実行
    $Carts = $this->cartService->getCarts();
    $this->execPurchaseFlow($Carts);
    // TODO itemHolderから取得できるように
    $least = [];
    $quantity = [];
    $isDeliveryFree = [];
    $totalPrice = 0;
    $totalQuantity = 0;
    foreach ($Carts as $Cart) {
        $quantity[$Cart->getCartKey()] = 0;
        $isDeliveryFree[$Cart->getCartKey()] = false;
        if ($this->baseInfo->getDeliveryFreeQuantity()) {
            if ($this->baseInfo->getDeliveryFreeQuantity() > $Cart->getQuantity()) {
                $quantity[$Cart->getCartKey()] = $this->baseInfo->getDeliveryFreeQuantity()-$Cart->getQuantity();
            } else {
                $isDeliveryFree[$Cart->getCartKey()] = true;
            }
        }
        if ($this->baseInfo->getDeliveryFreeAmount()) {
            if (!$isDeliveryFree[$Cart->getCartKey()] && $this->baseInfo->getDeliveryFreeAmount() <= $Cart->getTotalPrice()) {
                $isDeliveryFree[$Cart->getCartKey()] = true;
            } else {
                $least[$Cart->getCartKey()] = $this->baseInfo->getDeliveryFreeAmount() - $Cart->getTotalPrice();
            }
        }
        $totalPrice += $Cart->getTotalPrice();
        $totalQuantity += $Cart->getQuantity();
    }
    // カートが分割された時のセッション情報を削除
    $request->getSession()->remove(OrderHelper::SESSION_CART_DIVIDE_FLAG);
    //非ログイン時ログインフォーム設置用追加
    /* @var $form \Symfony\Component\Form\FormInterface */
    $builder = $this->formFactory->createNamedBuilder('', CustomerLoginType::class);
    $builder->get('login_memory')->setData((bool) $request->getSession()->get('_security.login_memory'));
    if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
        $Customer = $this->getUser();
        if ($Customer instanceof Customer) {
            $builder->get('login_email')->setData($Customer->getEmail());
        }
    }
    $event = new EventArgs(['builder' => $builder,],$request);
    $this->eventDispatcher->dispatch(EccubeEvents::FRONT_MYPAGE_MYPAGE_LOGIN_INITIALIZE, $event);
    $form = $builder->getForm();
    //非ログイン時ログインフォーム設置用追加
    return [
        'totalPrice' => $totalPrice,
        'totalQuantity' => $totalQuantity,
        // 空のカートを削除し取得し直す
        'Carts' => $this->cartService->getCarts(true),
        'least' => $least,
        'quantity' => $quantity,
        'is_delivery_free' => $isDeliveryFree,
        //非ログイン時ログインフォーム設置用追加
        'error' => $authenticationUtils->getLastAuthenticationError(),
        'form' => $form->createView(),
        //非ログイン時ログインフォーム設置用追加
    ];
}






------------------twig側----------------------

<form name="shopping_login" id="shopping_login" method="post" action="{{ url('mypage_login') }}">
</form>



部分コピペで動きます。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2311
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1569
9
mcontact
1279
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.