Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Wishlist без авторизации


Recommended Posts

Добрый день уважаемые!

Измучился со своей проблемой.

Необходимо реализовать закладки без авторизации, все возможные варианты из гугла перепробовал, не работают.

Версия Opencart 2.1.0.2.1

 

Не бейте если тема уже такая имеется, не нашел.  :unsure:

 

class ControllerAccountWishList extends Controller {
public function index() {
if (!$this->customer->isLogged()) {
$this->session->data['redirect'] = $this->url->link('account/wishlist', '', 'SSL');

$this->response->redirect($this->url->link('account/login', '', 'SSL'));
}

$this->load->language('account/wishlist');

$this->load->model('account/wishlist');

$this->load->model('catalog/product');

$this->load->model('tool/image');

if (isset($this->request->get['remove'])) {
// Remove Wishlist
$this->model_account_wishlist->deleteWishlist($this->request->get['remove']);

$this->session->data['success'] = $this->language->get('text_remove');

$this->response->redirect($this->url->link('account/wishlist'));
}

$this->document->setTitle($this->language->get('heading_title'));

$data['breadcrumbs'] = array();

$data['breadcrumbs'][] = array(
'text' => $this->language->get('text_home'),
'href' => $this->url->link('common/home')
);

$data['breadcrumbs'][] = array(
'text' => $this->language->get('text_account'),
'href' => $this->url->link('account/account', '', 'SSL')
);

$data['breadcrumbs'][] = array(
'text' => $this->language->get('heading_title'),
'href' => $this->url->link('account/wishlist')
);

$data['heading_title'] = $this->language->get('heading_title');

$data['text_empty'] = $this->language->get('text_empty');

$data['column_image'] = $this->language->get('column_image');
$data['column_name'] = $this->language->get('column_name');
$data['column_model'] = $this->language->get('column_model');
$data['column_stock'] = $this->language->get('column_stock');
$data['column_price'] = $this->language->get('column_price');
$data['column_action'] = $this->language->get('column_action');

$data['button_continue'] = $this->language->get('button_continue');
$data['button_cart'] = $this->language->get('button_cart');
$data['button_remove'] = $this->language->get('button_remove');

if (isset($this->session->data['success'])) {
$data['success'] = $this->session->data['success'];

unset($this->session->data['success']);
} else {
$data['success'] = '';
}

$data['products'] = array();

$results = $this->model_account_wishlist->getWishlist();

foreach ($results as $result) {
$product_info = $this->model_catalog_product->getProduct($result['product_id']);

if ($product_info) {
if ($product_info['image']) {
$image = $this->model_tool_image->resize($product_info['image'], $this->config->get('config_image_wishlist_width'), $this->config->get('config_image_wishlist_height'));
} else {
$image = false;
}

if ($product_info['quantity'] <= 0) {
$stock = $product_info['stock_status'];
} elseif ($this->config->get('config_stock_display')) {
$stock = $product_info['quantity'];
} else {
$stock = $this->language->get('text_instock');
}

if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
$price = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));
} else {
$price = false;
}

if ((float)$product_info['special']) {
$special = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')));
} else {
$special = false;
}

$data['products'][] = array(
'product_id' => $product_info['product_id'],
'thumb' => $image,
'name' => $product_info['name'],
'model' => $product_info['model'],
'stock' => $stock,
'price' => $price,
'special' => $special,
'href' => $this->url->link('product/product', 'product_id=' . $product_info['product_id']),
'remove' => $this->url->link('account/wishlist', 'remove=' . $product_info['product_id'])
);
} else {
$this->model_account_wishlist->deleteWishlist($product_id);
}
}

$data['continue'] = $this->url->link('account/account', '', 'SSL');

$data['column_left'] = $this->load->controller('common/column_left');
$data['column_right'] = $this->load->controller('common/column_right');
$data['content_top'] = $this->load->controller('common/content_top');
$data['content_bottom'] = $this->load->controller('common/content_bottom');
$data['footer'] = $this->load->controller('common/footer');
$data['header'] = $this->load->controller('common/header');

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/account/wishlist.tpl')) {
$this->response->setOutput($this->load->view($this->config->get('config_template') . '/template/account/wishlist.tpl', $data));
} else {
$this->response->setOutput($this->load->view('default/template/account/wishlist.tpl', $data));
}
}

public function add() {
$this->load->language('account/wishlist');

$json = array();

if (isset($this->request->post['product_id'])) {
$product_id = $this->request->post['product_id'];
} else {
$product_id = 0;
}

$this->load->model('catalog/product');

$product_info = $this->model_catalog_product->getProduct($product_id);

if ($product_info) {
if ($this->customer->isLogged()) {
// Edit customers cart
$this->load->model('account/wishlist');

$this->model_account_wishlist->addWishlist($this->request->post['product_id']);

$json['success'] = sprintf($this->language->get('text_success'), $this->url->link('product/product', 'product_id=' . (int)$this->request->post['product_id']), $product_info['name'], $this->url->link('account/wishlist'));

$json['total'] = sprintf($this->language->get('text_wishlist'), $this->model_account_wishlist->getTotalWishlist());
} else {
if (!isset($this->session->data['wishlist'])) {
$this->session->data['wishlist'] = array();
}

$this->session->data['wishlist'][] = $this->request->post['product_id'];

$this->session->data['wishlist'] = array_unique($this->session->data['wishlist']);

$json['success'] = sprintf($this->language->get('text_login'), $this->url->link('account/login', '', 'SSL'), $this->url->link('account/register', '', 'SSL'), $this->url->link('product/product', 'product_id=' . (int)$this->request->post['product_id']), $product_info['name'], $this->url->link('account/wishlist'));

$json['total'] = sprintf($this->language->get('text_wishlist'), (isset($this->session->data['wishlist']) ? count($this->session->data['wishlist']) : 0));
}
}

$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));
}
}

Надіслати
Поділитися на інших сайтах


уберите 

if (!$this->customer->isLogged()) {
$this->session->data['redirect'] = $this->url->link('account/wishlist', '', 'SSL');

$this->response->redirect($this->url->link('account/login', '', 'SSL'));
}
Надіслати
Поділитися на інших сайтах

Это были мои первые действия, к сожалению не помогает.

Если я все правильно понял на одном из форумов процитирую "wishlist привязывается к аккаунту, если просто избавиться от авторизации то привязаться будет не к чему. Нужно настраивать привязку к сессии"

В общем при выполнении данного шага я могу попасть на страницу вишлиста, но она абсолютно пустая, сколько бы я туда товара не добавил.

Надіслати
Поділитися на інших сайтах


Вам нужно обработать эту строку

Если пользователь залогинен то данные берутся из

$results = $this->model_account_wishlist->getWishlist();

Иначе из сессии

$results = $this->session->data['wishlist'];

Только в случае гостя массив results нужно привести к первому виду

Надіслати
Поділитися на інших сайтах


Хранить вишлист в сессии бессмысленно: посетитель через пол часа вернётся на сайт, а вишлист уже пустой. Для незарегистрированных его нужно хранить либо в куки, либо в localStorage (лучше в последнем).
 
Ну, и полноценное решение данной задачи чуть объёмнее, чем то, что можно просто подсказать на форуме.

 

 
Это сможет помочь?
Этот модуль хранит в сессии. Но его можно взять за основу для реализации описанного мною выше варианта.
Надіслати
Поділитися на інших сайтах


да, в 2-ке wishlist пишется в таблицу и.. сессию

 

Но доступен только для авторизованного пользователя

 

В сессии он нужен, чтобы если покупатель авторизовался, то его "собранный" товар попал  таблицу вишлиста

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.