Registro Magento per account alla cassa


8

Qualcuno sa se è possibile spostare la fase di registrazione del cliente alla cassa come nella cassa originale di Magento 1? Alla ricerca di un'estensione che farà questo per me o consigli su come potrei raggiungere questo obiettivo.


Puoi aggiungere i passaggi per effettuare il checkout qui: devdocs.magento.com/guides/v2.0/howdoi/checkout/…
harri,

Una volta completato il checkout, Magento offre ora anche la possibilità di creare un account dai dettagli forniti durante il checkout sulla pagina di successo.
Harri,

@harri So che funziona così, ma abbiamo un cliente che vuole che la registrazione avvenga nello stesso momento in cui è stato effettuato l'ordine.
Jason,

@Jason Hai avuto qualche soluzione per questo?
Rohit Kundale,

Risposte:


1

Vorrei fare creando un passaggio nel checkout che rilevi il tempo in cui sei loggato e quindi mostri il modulo di conseguenza.

Carica il modulo di registrazione in questo passaggio su ajax e modifica l' evento after register rilevando se la registrazione è stata effettuata il checkout reindirizza nuovamente al checkout anziché al dashboard.

Sono arrivato ad aggiungere un passaggio di lavoro che mostra quando non si è effettuato l'accesso per la registrazione e reindirizzare il successo della registrazione al checkout disabilitando il passaggio precedente per un'esperienza utente fluida.

Offrire un'opzione di accesso se l'utente ha un account ma non ha effettuato l'accesso in questa fase migliorerebbe ulteriormente qui.

Questo è il codice completo se si desidera controllare che tutto fosse molto da includere nella risposta:

https://github.com/harrigo/RegisterCheckout

Creare un modulo di registro all'interno del controller:

Poiché i passaggi del checkout richiedono phpl'esecuzione di alcuni per ottenere l'URL del modulo, la chiave ecc., Sarà necessario un controller in modo da poter caricare questo modulo di registro su Ajax nel passaggio.

<?php
namespace Harrigo\RegisterCheckout\Controller\Index;

use Magento\Framework\Controller\ResultFactory;

class Register extends \Magento\Framework\App\Action\Action
{
    protected $resultPageFactory;

    /**
     * Constructor
     * 
     * @param \Magento\Framework\App\Action\Context  $context
     * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
     */
    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Framework\View\Result\PageFactory $resultPageFactory
    )
    {
        $this->resultPageFactory = $resultPageFactory;
        $this->_resultFactory = $context->getResultFactory();
        parent::__construct($context);
    }

    /**
     * Execute view action
     * 
     * @return \Magento\Framework\Controller\ResultInterface
     */
    public function execute()
    {
        //if (isset($_POST["cart"])) {
            $resultLayout = $this->resultFactory->create(ResultFactory::TYPE_LAYOUT);
            return $resultLayout;   
        //}
        //$this->_redirect('checkout/');

    }
}

Controller / Index / register.php

Di seguito vengono visualizzati i blocchi di registrazione all'interno del controller in modo da poter quindi chiamare ajax nel checkout.

<?xml version="1.0"?>
<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
  <container name="root" label="Root">
            <block class="Magento\Framework\View\Element\Js\Components" name="customer_account_create_head_components" template="Magento_Customer::js/components.phtml"/>
            <block class="Magento\Customer\Block\Form\Register" name="customer_form_register" template="Harrigo_RegisterCheckout::register.phtml">
                <container name="form.additional.info" as="form_additional_info"/>
                <container name="customer.form.register.fields.before" as="form_fields_before" label="Form Fields Before" htmlTag="div" htmlClass="customer-form-before"/>
            </block>
            <block class="Magento\Cookie\Block\RequireCookie" name="require-cookie" template="Magento_Cookie::require_cookie.phtml">
                <arguments>
                    <argument name="triggers" xsi:type="array">
                        <item name="registerSubmitButton" xsi:type="string">.action.submit</item>
                    </argument>
                </arguments>
            </block>
            <block class="Magento\Framework\View\Element\Template" name="form_additional_info_customer" template="Magento_Customer::additionalinfocustomer.phtml"/>
  </container>
</layout>

/view/frontend/layout/harrigoregister_index_register.xml

Assicurati di aggiungere route.xml nella cartella etc / frontend del modulo.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/App/etc/routes.xsd">
    <router id="standard">
        <route id="harrigoregister" frontName="harrigoregister">
            <module name="Harrigo_RegisterCheckout" />
        </route>
    </router>
</config>

Crea un passaggio di pagamento:

http://devdocs.magento.com/guides/v2.0/howdoi/checkout/checkout_new_step.html

Dato che questo è il primo passo, assicurati di aggiungere i mixin proprio come ho fatto nel modulo, poiché devdocs non è corretto qui, portando a ogni passaggio che mostra:

<!--The 'step_code' value from the .js file should be used-->
<li id="registerstep" data-bind="fadeVisible: isVisible">
<div class="step-title" data-bind="i18n: 'Register'" data-role="title"></div>
    <div id="checkout-step-title"
         class="step-content"
         data-role="content">
        <form data-bind="submit: navigateToNextStep" novalidate="novalidate">
            <div class="actions-toolbar" id="shipping-method-buttons-container">
                <div class="primary">
                    <button data-role="opc-continue" type="submit" class="button action continue primary">
                        <span><!-- ko i18n: 'Continue as guest'--><!-- /ko --></span>
                    </button>
                </div>
            </div>
        </form>
    </div>  
    <div id="registerblock"></div>
</li>

Ciò non funzionava se il blocco non si era caricato prima della chiamata ajax ma alla fine si è utilizzato qualcosa di simile per ottenere il nostro modulo di registrazione dal controller e sputarlo sul passaggio:

//waits for elements to load in checkout
function waitForElement(elementPath, callBack){
  window.setTimeout(function(){
    if($(elementPath).length){
      callBack(elementPath, $(elementPath));
    }else{
      waitForElement(elementPath, callBack);
    }
  },500)
}

//get crosssell products / newsletter
$.ajax({
  url: "/harrigoregister/index/register",
  type: "post",
  data: { 
    cart: "yes"
  },
  success: function(response) {
    waitForElement("#registerblock",function(){
                $("#registerblock").html(response);
        });
  },
  error: function(xhr) {
  }
});

Ci sono molti più passaggi qui, basta seguire i devdocs assicurandosi di fare il passo del mixin ma usare di seguito per il mixin poiché l'esempio di devdocs non funziona:

define(
    [
        'ko',
        'Magento_Customer/js/model/customer'
    ], function (ko, customer) {
        'use strict';

        var mixin = {

            initialize: function () {
                if(!customer.isLoggedIn()) {
                    this.isVisible = ko.observable(false);
                    this.visible = ko.observable(false); // set visible to be initially false to have your step show first
                }
                    this._super();

                return this;
            }
        };

        return function (target) {
            return target.extend(mixin);
        };
    }
);

Le principali differenze erano le fasi di pagamento e spedizione che utilizzano isVisible e Visible e devdocs utilizza solo visibile nell'esempio, pertanto è necessario aggiungere IsVisible per la correzione. Inoltre, è stato necessario apportare modifiche se il passaggio era disabilitato.

Modifica reindirizzamento registrazione:

Magento 2 - Reindirizza l'utente a una pagina specifica dopo il registro

<?php

namespace Harrigo\RegisterCheckout\Plugin;

use Magento\Framework\Controller\ResultFactory;
use Magento\Framework\Registry;
use Magento\Framework\UrlInterface;

class Redirect
{
    protected $coreRegistry;

    protected $url;

    protected $resultFactory;


    public function __construct(Registry $registry, UrlInterface $url, ResultFactory $resultFactory)
    {
        $this->coreRegistry = $registry;
        $this->url = $url;
        $this->resultFactory = $resultFactory;
    }

    public function aroundGetRedirect ($subject, \Closure $proceed)
    {
        //need to check out if registration was from checkouit
        /** @var \Magento\Framework\Controller\Result\Redirect $result */

        if ($_POST['checkout'] = 'true') {
            $result = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
            $result->setUrl($this->url->getUrl('checkout'));
            return $result;
        }

        return $proceed();
    }
}

Esempio approssimativo, ma è stato necessario sostituire anche il file register.phtml per aggiungere la variabile post checkout per determinare la differenza tra i 2 moduli. Là dove molti passaggi non ho mostrato ma controlla il modulo che ho creato per un esempio completo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.