Jump to content

Recommended Posts

Когда-то в версии 1.5 делал доступ к закладкам лишь удалив в контроллере первых несколько строк проверки логина пользователя, и всё работало.

Сейчас проделал подобное, но обнаружил, что закладки каким-то образом общие для любых поситителей, любых IP, браузеров устройств. :blink:

 

Реализовал работу с закладками исключительно правкой контроллера 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

Edited by excalibur

Share this post


Link to post
Share on other sites

По-моему быстрее и удобней было бы в окмод оформить, чем в посте расписывать что куда :)

Share this post


Link to post
Share on other sites

На 2.1.0.2 чуть-чуть подправить и тоже работает...

Edited by L0ky

Share this post


Link to post
Share on other sites

Присоединяюсь к вопросу о длительности жизни этих закладок.

Share this post


Link to post
Share on other sites

Можно было бы прописать для установки времени жизни избранного что то вроде

        $this->db->query("DELETE FROM " . DB_PREFIX . "cart WHERE (api_id > '0' OR customer_id = '0') AND date_added < DATE_SUB(NOW(), interval 1 minute)");

как сделано в system\library\cart\cart.php , но в БД с методом предложенным @excalibur в  oc_customer_wishlist  записей не делается.

Как вариант можно перенять часть кода от корзины, там и айди уникальный создается для каждого пользователя и время жизни описано и в бд запись отдельная идет...

Edited by lilianz

Share this post


Link to post
Share on other sites
9 часов назад, warezliker сказал:

Присоединяюсь к вопросу о длительности жизни этих закладок.

@lilianz

В сети большинство пишет о том, что нужно в настройках хостинга увеличить время gc.max_lifetime с стандартных 1440 секунд (24 минуты) до требуемых и мол будет счастье. Нифига этот способ не работает, во всяком случае в 2.3 просто потому что обнаружил что не создаются файлы сессии, а сессия посетителя хранится в куки.

 

Чтобы увеличить время жизни корзины - нужно в вышеупомянутом system\library\cart\cart.php поставить INTERVAL x HOURS.

 

Закладки же хранятся в глобальной переменной $_SESSION с привязкой к значению куки default. Всего куки создается 4 - язык, валюта (срок действия - месяц), default и PHPSESSID.

 

Лично у меня на сервере при попытке в файле system/library/session.php 

session_set_cookie_params(0, '/');

заменить ноль на, например, 7*24*3600 (7 суток) я не мог залогиниться в админку. При этом по сети опять же множество рекомендаций замените ноль на требуемое количество секунд и будет счастье, мол печенька будет жить не сессию, а сколько вам нужно.

 

Проще говоря, и PHP и опенкарт создают по печеньке. Оба используют переменную времени жизни куки. Вот только PHP берет этот параметр и сам его плюсует к текущему времени чтобы установить Expires (действительна ДО), а Opencart создает куки используя тот же параметр сразу как "действительна ДО ...". Поэтому получается, устанавливая параметр в секундах на сервере вместо 0, на определенное значение в секундах - тогда создается корректное куки PHP с именем PHPSESSID, но не создается куки опенкарта так как время недействительное. Если устанавливаем time()+x, создается корректно куки опенкарта, а вот PHPSESSID создается до мая 2065 года (time()+time()+x)

 

Решение нашел такое - в файле вместо нуля установить session_set_cookie_params(7*24*3600, '/');

а в строке где именно опенкарт создает куки 

 

if ($key != 'PHPSESSID') {
    setcookie($key, $this->session_id, ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'), 		  ini_get('session.cookie_secure'), ini_get('session.cookie_httponly'));
}

заменить ini_get('session.cookie_lifetime') на time()+х секунд

 

Тогда обе куки создаются с одинаковым временем жизни.. При этом куки PHPSESSID живет пока не умрет по сроку давности, а default куки обновляется при каждом запросе к серверу и умрет только если не заходить на сайт установленное количество секунд х....

 

Опытным путём вычислил сейчас, что те же закладки записываются на сайте в глобальную переменную $_SESSION с привязкой к куки. И очищается эта переменная каждые 1440 стандартных секунд. Поэтому спустя 24 минуты выбрасывает из админки и очищаются закладки. Корзина не очищается потому что есть запись в базе данных.

То же самое эффективно и для установок языка, валюты в куки - пользователь заходит на сайт и опенкарт берет значения которые он ему присылает.. А вот с закладками и авторизацией... Идёт проверка в глобальном массиве сессий - если соответствия идентификатора не найдено - увы, от ворот - поворот.

 

И у меня на хостинге мне вроде бы предоставили доступ к изменению параметра gc.max_lifetime но его изменение влияет только на чистку файлов сессий подключений к самой cPanel... но не влияет на время жизни сессий PHP. Либо перебивается каким-то глобальным параметром сервера, который не меняют... Я не специалист...

 

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

 

Хранение в базе - преимуществ не вижу, а минус есть - нужно еще реализовать чистку, аналогичную чистке корзины с определенным интервалом...

 

А вот что делать со временем авторизации админки в 24 минуты бездействия - вопрос. Использовать костыль с пингом сервера не хочется, ибо это актуально будет только для включенного компьютера с запущенным браузером...

 

Надеюсь не запутал своими умозаключениями. У кого будут какие еще идеи или сведения?...

Edited by excalibur
  • +1 2

Share this post


Link to post
Share on other sites

Всё. Теперь окончательно со всем разобрался. Стоило просто прописать в опенкарте отдельную папку для хранения файлов сессий.

Теперь opencart туда скидывает файлы сессий которые в себе содержат идентификатор пользователя. Если этот пользователь - покупатель - в сессию записываются так же закладки. Если администратор - его айди и токен.

 

Есть три параметра отвечающих за обработку файлов сессий.

session.gc_probability integer
session.gc_probability в сочетании с session.gc_divisor определяет вероятность запуска функции сборщика мусора (gc, garbage collection). По умолчанию равна 1
session.gc_divisor integer
session.gc_divisor в сочетании с session.gc_probability вероятность запуска функции сборщика мусора (gc, garbage collection) при каждой инициализации сессии. Вероятность рассчитывается как gc_probability/gc_divisor, т.е. 1/100 означает, что функция gc запускается в одном случае из ста, или 1% при каждом запросе. session.gc_divisor по умолчанию имеет значение 100.
session.gc_maxlifetime integer
session.gc_maxlifetime задает отсрочку времени в секундах, после которой данные будут рассматриваться как "мусор" и потенциально будут удалены. Сбор мусора может произойти в течение старта сессии (в зависимости от значенийsession.gc_probability и session.gc_divisor).

Замечание: Если разные скрипты имеют разные значения session.gc_maxlifetime, но при этом одни и те же места для хранения данных сессии, то скрипт с минимальным значением уничтожит все данные. В таком случае следует использовать эту директиву вместе с session.save_path.

 

Таким образом, в файле system\library\session.php

задаем нужные нам параметры, если хотим чтобы они отличались от тех, что по умолчанию на сервере. параметры по умолчанию хостера можно узнать выведя функцию phpinfo();

 

Я у себя создал в папке tmp дополнительную папку для хранения сессий посетитетелей сайта и указал ее в session.save_path и изменил session.gc_maxlifetime на нужное мне время.

Теперь всё работает как часики.

Edited by excalibur
  • +1 2

Share this post


Link to post
Share on other sites

Сразу извиняюсь за некоторые неправильные умозаключения в посте 

Дело в том, что у меня на сервере в настройках PHP (версия 5.6) папка для сохранения временных файлов значилась tmp. Там действительно появлялись файлики вида sess_*************, НО, только сессий авторизации в cPanel. Как я не пытался где либо найти файлы сессий такого же вида самого Opencarta их нигде не было.

Поэтому предположил, что сессии на сервере хранятся как-то в неявном виде, в кеше временном типа, без создания этих файлов сессий во временной папке.

 

Но когда я уже в опенкарте задал другую папку для сохранения сессий, отличную от по-умолчанию, скажем tmp/opencart/ - там начали появлятся заветные файлики сессий sess_*********** каждого посетителя сайта. И эти файлики будут храниться установленное время gc.max_lifetime и очищаться сборщиком мусора, который запускается при каждом вызове сессии с вероятностью gc_probability/gc_divisor

 

Относительно вопроса почему файлов сессий опенкарта не было до этого, хотя в настройках PHP значилась доступная мне папка, там создавались файлы сессий cPanel... Скорее всего эти файлы создавались в папке, к которой на хостинге доступа нет - где-то в /var/lib/php/session.... Если у вас не выделенный собственный сервер, а хостинг - не все доступно для просмотра и тем более редактирования.

 

Share this post


Link to post
Share on other sites
В 28.08.2017 в 01:52, excalibur сказал:

Оформил :-)
...


У меня модификатор установился без проблем, а вот когда список закладок смотришь, то они почему-то исключительно по одной показываются. Дайте направления куда копать чтобы полный список увидеть? 
ps. разобрался. Все работает.

Edited by PaltonB

Share this post


Link to post
Share on other sites
10 часов назад, PaltonB сказал:


У меня модификатор установился без проблем, а вот когда список закладок смотришь, то они почему-то исключительно по одной показываются. Дайте направления куда копать чтобы полный список увидеть? 
ps. разобрался. Все работает.

 

Это хорошо, но напишите хоть в чем была проблема, какое решение нашли, какая версия опенкарта у вас, для других, у кого может возникнуть такая же проблема :-)

Edited by excalibur

Share this post


Link to post
Share on other sites
6 часов назад, excalibur сказал:

 

Это хорошо, но напишите хоть в чем была проблема, какое решение нашли, какая версия опенкарта у вас, для других, у кого может возникнуть такая же проблема :-)


Проблема была на моей стороне - ошибка в css, просто не показывались все товары в таблице. Поправил и все стало ОК.

Тем не менее, есть что добавить - добавьте в модификатор тэг <link>. А иначе, установленный у меня редактор модификаторов не позволяет его сохранять после редактирования (сама установка модификатора прошла гладко). Если не знаете какую поставить ссылку, поставьте ссылку на этот топик.

Edited by PaltonB

Share this post


Link to post
Share on other sites

Ребята, а ни кто не заморачивался с возможностью одной кнопкой добавить и убрать с закладок?

Share this post


Link to post
Share on other sites

@excalibur

скачал ваш Guest_favorites.ocmod.xml установил на ocstore 2.3 теперь когда жму добавить ывлазит ошибка

 

 image.png.845d040c36b0a090a0eb796092aca9ee.png

 

В чем может быть причина? 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By Valery332
      Добрый день. 
      Вот так нужно http://joxi.ru/n2YV6ZDHeGYPOA
      Вот так после нажатия добавить в избранные http://joxi.ru/eAONgRVHkwyXx2
      Где и как это исправить, что-бы отображалось только количество без текста?
    • By Yurta
      5 цветов в комплекте!
      Адаптивный, универсальный шаблон Fiji, Простая установка и настройка. Вы можете устанавливать любые модули на шаблон, с адаптацией под внешний вид помогаю.
      Шаблон не заменяет стандартных файлов, легко перенести товары и категории
      Шаблон Fiji - это универсальное решение для запуска вашего интернет-магазина, профессиональная техническая поддержка от разработчика, простота настройки и установки.
      С помощью этого шаблона вы с легкостью создадите свой бизнес в интернете, отличная конверсия.!!
      Адаптивная сетка шаблона построена на Bootstrap v4,1 Код чистый, проверить можно тут.
       
      Демо
      1. Главная страница
      2. Страница категории
      3. Страница товара
      4. Контакты
       
      Админ-панель (demo\demo)
       
      Комплектация:
      1. Шаблон (быстрый старт)
      2. Инструкция
      3. Адаптированные модули
      4. 5 цветов шаблона
       
      Преимущества:
      1. Отличная оптимизация
      2. Высокая конверсия
      3. Seo оптимизация 
       
      Большинство модулей легко устанавливается и работает, без дополнительных настроек.
      Модули идущие в комплекте модифицированы под шаблон.
       
      Быстрый просмотр. Модуль блога, с выводом рекомендуемых товаров к статье Модуль позиций на главной Отзывы о товарах Карусель для отзывов о товарах Избранные категории на главной 100% ширины контента Выбор кол-ва товара (+/-) Модуль обновления цены при выборе количества Модуль обновления цены при выборе опции Bootstrap адаптивный основной слайдер  Вывод количества товаров в корзине в шапке сайта Сообщение об успешном добавлении в корзину Модуль вы смотрели Модуль вкладки на главной (популярные\рекомендуемые\скидки\новинки) Модуль авто-рекомендуемые Модуль авто генерация seo ссылок при добавлении товара\категории\бренда\статьи Модуль выпадающего мега-меню (автоматически выводит все категории и основное изображение из раздела каталог\категории) NEW убраны лишние поля в процессе оформления покупки NEW добавлено отображение второго фото для товара, при просмотре главной\категории\итд. NEW Изменен внешний вид опций checkbox и radiobuton NEW Добавлена кнопка "купить сейчас" ( при клике, вас сразу отправит в корзину для оформления покупки) NEW Добавлен живой поиск.  






    • By Yurta
      1 799.00 руб
      Скачать/Купить дополнение


      Fiji - многомодульный, адаптивный шаблон 5в1.
      5 цветов в комплекте!
      Адаптивный, универсальный шаблон Fiji, Простая установка и настройка. Вы можете устанавливать любые модули на шаблон, с адаптацией под внешний вид помогаю.
      Шаблон не заменяет стандартных файлов, легко перенести товары и категории
      Шаблон Fiji - это универсальное решение для запуска вашего интернет-магазина, профессиональная техническая поддержка от разработчика, простота настройки и установки.
      С помощью этого шаблона вы с легкостью создадите свой бизнес в интернете, отличная конверсия.!!
      Адаптивная сетка шаблона построена на Bootstrap v4,1 Код чистый, проверить можно тут.
       
      Демо
      1. Главная страница
      2. Страница категории
      3. Страница товара
      4. Контакты
       
      Админ-панель (demo\demo)
       
      Комплектация:
      1. Шаблон (быстрый старт)
      2. Инструкция
      3. Адаптированные модули
      4. 5 цветов шаблона
       
      Преимущества:
      1. Отличная оптимизация
      2. Высокая конверсия
      3. Seo оптимизация 
       
      Большинство модулей легко устанавливается и работает, без дополнительных настроек.
      Модули идущие в комплекте модифицированы под шаблон.
       
      Быстрый просмотр. Модуль блога, с выводом рекомендуемых товаров к статье Модуль позиций на главной Отзывы о товарах Карусель для отзывов о товарах Избранные категории на главной 100% ширины контента Выбор кол-ва товара (+/-) Модуль обновления цены при выборе количества Модуль обновления цены при выборе опции Bootstrap адаптивный основной слайдер  Вывод количества товаров в корзине в шапке сайта Сообщение об успешном добавлении в корзину Модуль вы смотрели Модуль вкладки на главной (популярные\рекомендуемые\скидки\новинки) Модуль авто-рекомендуемые Модуль авто генерация seo ссылок при добавлении товара\категории\бренда\статьи Модуль выпадающего мега-меню (автоматически выводит все категории и основное изображение из раздела каталог\категории) NEW убраны лишние поля в процессе оформления покупки NEW добавлено отображение второго фото для товара, при просмотре главной\категории\итд. NEW Изменен внешний вид опций checkbox и radiobuton NEW Добавлена кнопка "купить сейчас" ( при клике, вас сразу отправит в корзину для оформления покупки) NEW Добавлен живой поиск.  






      Добавил Yurta Добавлено 21.11.2018 Категория Платные шаблоны Системные требования php 5.6 Метод активации Без активации Ioncube Loader Нет OpenCart 2.3 ocStore 2.3 OpenCart.Pro, ocShop Opencart.pro 2.3
      Не проверялось Обращение к серверу разработчика Нет Старая цена 0  
    • By MrNix21
      Здравствуйте. Есть ли модуль для вывода дополнительных изображений на странице карточки товара помимо стандартного? Т.е. кроме дополнительных изображений, которые есть в опенкарте, мне нужно еще в другом месте карточки выводить другие изображения (фото покупателей). Нужно чтобы они выводились каруселью (OWL) и при нажатии увеличивались.
      Искал, но ничего не нашел. Может кто-то сталкивался с такой задачей? Буду благодарен за любую помощь.
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.