Giriş yapın ve müşteriyi web sitesine yönlendirin


10

Mutistore-multiwebsite Magento'da, kullanıcıları kayıtlı oldukları web sitesine giriş yapmaya zorlamak istiyorum. Herhangi bir web sitesinde herhangi bir giriş formunu kullanabilirler, ancak form kimlik bilgilerini kontrol etmeli ve doğru web sitesine yönlendirmelidir.

Müşterinin web sitesini kontrol etmeye ve onu giriş yapmaya zorladım. Yine de iyi çalışmıyor. Kullanıcı, kayıtlı olduğu web sitesine değil, mevcut web sitesine giriş yapar.

Uygulama / kod / yerel / büyücü / Müşteri / Oturum.php

public function login($username, $password)
{
    /**************************************************/
    $customer = Mage::getModel("customer/customer");
    $customer_website = null;


    foreach (Mage::app()->getWebsites() as $website) {
        $customer->setWebsiteId($website->getId());
        $customer->loadByEmail($username);
        //check if user exists
        if($customer->getName()){
            $customer_website = $website->getId();
        }
    }
    /*************************************************/
    $customer = Mage::getModel('customer/customer')->setWebsiteId($customer_website);

    if ($customer->authenticate($username, $password)) {
        $this->setCustomerAsLoggedIn($customer);
        return true;
    }
    return false;
}

Herhangi bir fikir?


Bir siteden giriş yaparsanız otomatik olarak sitemize giriş yapar mısınız?
Amit Bera

Sorunuzu anladığınızdan emin değilim. Kullanıcı oturum açmış ve kayıtlı olduğu web sitesine yönlendirmelidir. Her iki web sitesi de değil
zekia

Diyelim ki, Web Sitesi A'daki müşteri kaydı. Müşteri Web Sitesi B'den giriş yapmayı deneyin, O zaman müşteri web sitesindeA'daki qutologin ile Web SitesiA'ya yönlendirmelidir. sağ?
Amit Bera

Evet, doğru
zekia

Yanıtlar:


10

İlk olarak, ayarlarda bazı değişiklikler yapmanız gerekir.

Müşteri hesaplarını birden çok Web Sitesi arasında paylaşma

Burada bu özelliği yapılandırmak olmalıdır: System -> Configuration -> Customer Configuration -> Share Customer Accounts.

Her müşteriyi tüm web sitelerinde paylaşmak için bu ayarı Global olarak yapın .

resim açıklamasını buraya girin

Giriş bilgilerini web siteleri arasında paylaşma

Farklı web sitelerindeki mağazalar arasında geçiş yaparken oturumu korumak için Sistem> Yapılandırma> Genel> Web'de "Ön Uçta SID Kullan" seçeneğini etkinleştirin :

resim açıklamasını buraya girin

Kullanıcıları kaydettikleri web sitesine yönlendirmeye zorlayın

Başka bir web sitesinden giriş yapmaya çalıştığımızda , aynı web sitesine müşteri girişini zorla gir .

kullanım customer_login

Olayı config.xml olarak tanımlayın

<?xml version="1.0"?>
<config>
  <modules>
    <Stackexchange_Magento165528>
      <version>1.0.0</version>
    </Stackexchange_Magento165528>
  </modules>
  <global>
    <models>
      <magento165528>
        <class>Stackexchange_Magento165528_Model</class>
      </magento165528>
    </models>
    <events>
      <customer_login> <!-- identifier of the event we want to catch -->
        <observers>
          <customer_login_handler> <!-- identifier of the event handler -->
            <type>singleton</type> <!-- class method call type; valid are model, object and singleton -->
            <class>magento165528/observer</class> <!-- observers class alias -->
            <method>redirectoSourceDomain</method>  <!-- observer's method to be called -->
            <args></args> <!-- additional arguments passed to observer -->
          </customer_login_handler>
        </observers>
      </customer_login>
    </events>
  </global>
</config> 

Gözlemci sınıfı:

<?php
class Stackexchange_Magento165528_Model_Observer
{

    public function redirectoSourceDomain(Varien_Event_Observer $observer)
    {
        $_customer = $observer->getEvent()->getCustomer();
        /* 
        * Store of website from which website  Customer have registered
        */
        $_customer_resgister_store_id= $_customer->getStoreId();

        if($_customer_resgister_store_id != Mage::app()->getStore()->getStoreId()){
            $allStores=Mage::app()->getStores(); //get list of all stores,websites

            foreach ($allStores as $_eachStoreId => $val){
                $_storeId = Mage::app()->getStore($_eachStoreId)->getId();
                //get url using store id
                if($_customer_resgister_store_id  == $_eachStoreId ){
                $Websiteurl= Mage::app()->getStore($_storeId)->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
                $_redirecUrl =  $Websiteurl."customer/account/login?SID=".Mage::getModel("core/session")->getEncryptedSessionId(); 
                /* Force redirect to repective Website */
                Mage::app()->getFrontController()->getResponse()
                            ->setRedirect($_redirecUrl)
                            ->sendResponse();
                        exit;   
                }

            }

        }
        return;
    }

}

NOT:

MAGENTO DEMO MAĞAZA WEB SİTELERİMDE BU KODU TEST EDİYORUM.

Bu iki web sitesi, web sitesi konsepti kullanılarak aynı magento örneğinden çalışmaktadır.

resim açıklamasını buraya girin


1
Bu sorunu çözmek için doğru bir yoldur. Ancak bu yöntemle Web Sitesi A'daki bir müşteri, Web Sitesi B'ye sipariş verebilir. Proje spesifikasyonundan bir kısıtlama olabilir.
Franck Garnier

doğru, proje şartnamesine bağlıdır
Amit Bera

Müşterilerin başka bir web sitesinden sipariş vermesini engellemek mümkün mü? Bu bir perakende / toptan çoklu mağaza yapılandırmasıdır, bu nedenle perakende müşterilerin toptan web sitesine giriş yapmasına izin verilmemelidir
zekia

evet, mümkün
Amit Bera

Birkaç sorum var? bir müşterinin perakendeci veya toptancı olduğunu nasıl tanımlarsınız?
Amit Bera

1

requirment için aşağıdaki yöntemi yeniden yazabilirsiniz

sınıfın altında yeniden yaz

Mage_Customer_Model_Session setCustomerAsLoggedIn yöntem

public function setCustomerAsLoggedIn($customer)
{
    $this->setCustomer($customer);
    $this->renewSession();
    Mage::dispatchEvent('customer_login', array('customer'=>$customer));
    // check here customer website ID and redirect to their own registered website  
    return $this;
}

Login () yerine, setCustomerAsLoggedIn () öğesine gönderdiğim kodu yerleştirmem gerektiği anlamına mı geliyor? Lütfen daha ayrıntılı bir cevap gönderin.
17'de zekia 9:28

1

customer_loginTemel dosyaları değiştirmek / yeniden yazmaktan / geçersiz kılmaktan kaçınmak için olayı kullanın .

Config.xml dosyasında

<config>
  <global>
    <models>
        ....
    </models>
    <events>
        <customer_login>
            <observers>
                <yourobservername>
                    <type>model</type>
                    <class>yourmodule/path_to_class</class>
                    <method>loginSwitchStore</method>
                </yourobservername>
            </observers>
        </customer_login>    
    </events>
  </global>
</config>

Gözlemci sınıfınız ( /app/code/local/YourCompany/YourModule/Model/Observer.php):

class YourCompany_YourModule_Model_Observer
{
    public function loginSwitchStore($observer)
    {
        $customer = $observer->getCustomer();

        switch($customer->getCustomerGroup())
        {
            case 1: $storeCode = 'storeview1';break;
            case 2: $storeCode = 'storeview2';break;
            case 3: $storeCode = 'storeview3';break;
        }
        $params = array( '_current' => TRUE, '_use_rewrite' => TRUE, '_store_to_url' => TRUE, '_store' => Mage::app()->getStore($storeCode)->getId() );  
        $url = Mage::getUrl('', $params); 
        Mage::app()->getResponse()->setRedirect($url);

        //add this if you want them to stay in that store even after logout
        Mage::getModel('core/cookie')->set('store', $storeCode); 
    }
}

Farklı mağaza görünümlerine sahip müşterilere farklı müşteri grupları atamanız gerektiğini unutmayın.

Ayrıca, müşteri gruplarını atamak yerine, kayıt sırasında gizli alan aracılığıyla kayıt sırasında müşteri dikkatini atayabilir ve bu adreslere ayarlayabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.