Добрый день! Подскажите, может кто-нибудь уже это делал или знает как это реализовать. Opencart 2.3.0.2.
Необходимо чтоб пользователь войдя в личный кабинет мог сменить пароль и адрес электронной почты от аккаунта на странице account/password, а не в разных как это сделано изначально (почту тут account/edit, а пароль тут account/password).
Но при этом чтоб они были в разных формах, т.е. чтоб можно было отдельно изменить пароль и отдельно поменять почту.
Самостоятельно смог сделать все в одной форме, но это не удобно, т.к. если я хочу поменять только почту, то приходится указывать и пароль и наоборот.
Сделал это так..
в файле catalog/view/theme/default/template/account/password.tpl добавил email
<form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data">
<div class="input-group">
<label for="input-email">Адрес эл. почты *</label><input type="email" name="email" value="<?php echo $email; ?>" placeholder="Адрес эл. почты *" id="input-email" /><?php if ($error_email) { ?><div class="text-danger">Это поле является обязательным..</div><?php } ?><?php if ($error_warning) { ?><div class="text-danger">Этот адрес эл. почты уже зарегистрирован..</div><?php } ?>
</div>
<div class="input-group">
<label for="input-password">Пароль *</label><input type="password" name="password" value="<?php echo $password; ?>" placeholder="Пароль *" id="input-password" /><?php if ($error_password) { ?><div class="text-danger">Длина пароля не менее 4-х символов..</div><?php } ?>
</div>
<div class="input-group">
<label for="input-confirm">Повторите пароль *</label><input type="password" name="confirm" value="<?php echo $confirm; ?>" placeholder="Повторите пароль *" id="input-confirm" /><?php if ($error_confirm) { ?><div class="text-danger">Пароли не совпадают..</div><?php } ?>
</div>
<button type="submit" style="margin-top: 5px;">Сохранить</button>
</form>
в файле catalog/model/account/customer.php добавил
public function editCustomerEmail($data) {
$this->db->query("UPDATE " . DB_PREFIX . "customer SET email = '" . $this->db->escape($data['email']) . "' WHERE customer_id = '" . (int)$this->customer->getId() . "'");
}
в файле catalog/controller/account/password.php добавил
перед
$this->model_account_customer->editPassword($this->customer->getEmail(), $this->request->post['password']);
добавил
$this->model_account_customer->editCustomerEmail($this->request->post);
и еще добавил это
if (isset($this->error['warning'])) {
$data['error_warning'] = $this->error['warning'];
} else {
$data['error_warning'] = '';
}
if (isset($this->error['email'])) {
$data['error_email'] = $this->error['email'];
} else {
$data['error_email'] = '';
}
и это
if (($this->customer->getEmail() != $this->request->post['email']) && $this->model_account_customer->getTotalCustomersByEmail($this->request->post['email'])) {
$this->error['warning'] = $this->language->get('error_exists');
}
if ((utf8_strlen($this->request->post['email']) > 96) || !filter_var($this->request->post['email'], FILTER_VALIDATE_EMAIL)) {
$this->error['email'] = $this->language->get('error_email');
}
Заранее спасибо если кто откликнется и подскажет как делать!