Рекомендуемые сообщения

inFlammen    0

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

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

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

Версия 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));
}
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
ArtemPitov    386

уберите 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
inFlammen    0

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
thentru    173

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Dotrox    330

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
chukcha    937

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
inFlammen    0

Это сможет помочь?

 

Спасибо большое, этот модуль помог.

Сколько времени потратил а 250 деревянных решили все  :oops:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Похожий контент

    • От Ngmt

      300.00 руб
      Скачать/Купить дополнение


      FastLinker - быстрый доступ к любому модулю
      FastLinker - модуль для быстрого доступа к любому модулю, через удобный пункт меню.
      Руководство пользования:
       
      Добавил Ngmt Добавлено 12.10.2017 Категория Модули Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 2.2
      2.1
      2.0 ocStore 2.2
      2.1 OpenCart.Pro, ocShop Не проверялось  
    • От Ngmt
      FastLinker - модуль для быстрого доступа к любому модулю, через удобный пункт меню.
      Руководство пользования:
       
    • От Rufan
      помогите решите проблему!
      1.)  товар не добавляется с каталога в корзину, закладки и сравнения, если же перейти на сам товар то тогда все норм!
      2.)  если все же удается добавить товар в корзину то при нажатии на корзину всплывает окно в котором отображается товарная позиция и если нажать на крестик рядом с ней то вместо того чтоб товар удалился из корзины она просто исчезает   (не закрывается а именно и исчезает)
       
      http://retro-cars.in.ua/index.php?route=product/category&path=67_63
       
    • От excalibur
      Когда-то в версии 1.5 делал доступ к закладкам лишь удалив в контроллере первых несколько строк проверки логина пользователя, и всё работало.
      Сейчас проделал подобное, но обнаружил, что закладки каким-то образом общие для любых поситителей, любых IP, браузеров устройств.
       
      Реализовал работу с закладками исключительно правкой контроллера catalog\controller\account\wishlist.php
       
      Убрать строки
      if (!$this->customer->isLogged()) { $this->session->data['redirect'] = $this->url->link('account/wishlist', '', true); $this->response->redirect($this->url->link('account/login', '', true)); } После строки:
      $this->model_account_wishlist->deleteWishlist($this->request->get['remove']); Добавить:      
      if (!$this->customer->isLogged()) {             $this->session->data['wishlist'] = array_diff( $this->session->data['wishlist'], array($this->request->get['remove']) );                 } После строки
      $results = $this->model_account_wishlist->getWishlist(); Добавить:
      if (empty($results)){ if (!empty($this->session->data['wishlist'])){ foreach ($this->session->data['wishlist'] as $wish){ $results[]['product_id'] = $wish; } } } Чтобы кнопка "Продолжить" со страницы закладок перенаправляла не в аккаунт а на предыдущую страницу
      Строку :
      $data['continue'] = $this->url->link('account/account', '', true); Заменить на:
      $data['continue'] = 'javascript:history.go(-1)'; И последнее, в конце строку:
      $json['success'] = sprintf($this->language->get('text_login'), $this->url->link('account/login', '', true), $this->url->link('account/register', '', true), $this->url->link('product/product', 'product_id=' . (int)$this->request->post['product_id']), $product_info['name'], $this->url->link('account/wishlist'));   Заменить на:
      $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'));  
      Протестировал, у меня все работает, закладки теперь привязаны к сессии, следственно каждый посетитель сайта может накидать закладок и потом из них выбрать и оформить заказ без регистрации (если это доступно), при закрытии браузера закладки не обнуляются, 
       
      Не могу утверждать что решение идеальное, поэтому кто заинтересован - берите, тестируйте, оценивайте, предлагайте идеи, если можно что-то улучшить.
       
      У меня остался нерешенным вопрос - вычислить длительность пользовательской и админской сессии и как их продлить. Решения, найденные на форуме и в сети неоднозначные и описывают замену строк в файле session.php которые гораздо проще чем в версии 2.3.0.1
  • Последние посетители   0 пользователей онлайн

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