Czasami model biznesu i specyfika branży sklepu wymaga uprzedniego zatwierdzenia konta klienta przez administratora zanim ten pierwszy dokona zakupu. Poniżej tutorial jak poprzez parę modyfikacji uzyskać taką funkcjonalność na sklepie.
Nadpisanie kontrollera
Tworzymy plik:
override/classes/Customer.php
O treści:
<?php class Customer extends CustomerCore { public function add($autodate = true, $null_values = true) { $this->id_shop = ($this->id_shop) ? $this->id_shop : Context::getContext()->shop->id; $this->id_shop_group = ($this->id_shop_group) ? $this->id_shop_group : Context::getContext()->shop->id_shop_group; $this->id_lang = ($this->id_lang) ? $this->id_lang : Context::getContext()->language->id; $this->birthday = (empty($this->years) ? $this->birthday : (int)$this->years.'-'.(int)$this->months.'-'.(int)$this->days); $this->secure_key = md5(uniqid(rand(), true)); $this->last_passwd_gen = date('Y-m-d H:i:s', strtotime('-'.Configuration::get('PS_PASSWD_TIME_FRONT').'minutes')); if ($this->newsletter && !Validate::isDate($this->newsletter_date_add)) { $this->newsletter_date_add = date('Y-m-d H:i:s'); } if ($this->id_default_group == Configuration::get('PS_CUSTOMER_GROUP')) { if ($this->is_guest) { $this->id_default_group = (int)Configuration::get('PS_GUEST_GROUP'); } else { $this->id_default_group = (int)Configuration::get('PS_CUSTOMER_GROUP'); } } /* Can't create a guest customer, if this feature is disabled */ if ($this->is_guest && !Configuration::get('PS_GUEST_CHECKOUT_ENABLED')) { return false; } $this->active = false; $success = parent::add($autodate, $null_values); $this->updateGroup($this->groupBox); return $success; } }
Uwaga! Jest to klon funkcji z pliku:
classes/Customer.php
Z dodaną linijką:
$this->active = false;
Przed:
$success = parent::add($autodate, $null_values);
Jeśli Twój plik się różni od podanego przez nas – użyj Twojej wersji tej funkcji z dodaną tą 1 linijką.
Włączenie nadpisywania
Parametry zaawansowane -> Wydajność -> Wyłącz wszystkie nadpisywania -> NIE
Asekuracyjne usunięcie pliku cache z serwera:
cache/class_index.php
Dodatkowy e-mail do właściciela sklepu o rejestracji:
Otwieramy plik:
controllers/front/AuthController.php
W funkcji:
sendConfirmationMail()
Przed linijką:
return Mail::Send(
Wklejamy:
Mail::Send( $this->context->language->id, 'account', 'Rejestracja nowego użytkownika!', array( '{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{email}' => $customer->email, '{passwd}' => '(ukryte)'), (string)Configuration::get('PS_SHOP_EMAIL'), $customer->firstname.' '.$customer->lastname );
Aby było po bożemu ten plik też powinien być nadpisany poprzez overwrite, ale dla szybkości tego nie robiliśmy 🙂 Jeśli chcesz mieć pewność, że przy ewentualnych aktualizacjach jądra sklepu jego zawartość nie ulegnie zmianie – wykonaj to też w ten sposób jak się czujesz na siłach.
Adnotacja w mailu do klienta, że rejestracja musi być zatwierdzona przez administratora:
Otwieramy plik:
mails/pl/account.html
Po kodzie:
<span style="color:#333"><strong>Hasło:</strong></span> {passwd} </span>
Wklejamy informację typu:
<p><strong>Uwaga! Twoje konto będzie dostępne po zatwierdzeniu przez administratora!</strong></p>
Gotowe 😉
Super!
Dziękuję 🙂 Mogę prosić jeszcze o informację jak teraz ustawić żeby po aktywacji konta klient automatycznie dostał maila że już uzyskał dostęp?