Перейти к содержанию

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

Когда-то в версии 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

Изменено пользователем excalibur

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


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

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

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


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

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

Изменено пользователем L0ky

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


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

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

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


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

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

        $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  записей не делается.

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

Изменено пользователем lilianz

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


Ссылка на сообщение
Поделиться на другие сайты
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 минуты бездействия - вопрос. Использовать костыль с пингом сервера не хочется, ибо это актуально будет только для включенного компьютера с запущенным браузером...

 

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

Изменено пользователем excalibur
  • +1 2

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


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

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

Теперь 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 на нужное мне время.

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

Изменено пользователем excalibur
  • +1 2

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


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

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

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

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

 

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

 

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

 

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


Ссылка на сообщение
Поделиться на другие сайты
В 28.08.2017 в 01:52, excalibur сказал:

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


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

Изменено пользователем PaltonB

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


Ссылка на сообщение
Поделиться на другие сайты
10 часов назад, PaltonB сказал:


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

 

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

Изменено пользователем excalibur

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


Ссылка на сообщение
Поделиться на другие сайты
6 часов назад, excalibur сказал:

 

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


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

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

Изменено пользователем PaltonB

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


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

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

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


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

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

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

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

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

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

Войти

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

Войти

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

    • От alex62
      Добрый день.Открыл файл sitemap.xml и обнаружил, что там нет новых страниц сайта. Подскажите что нужно чтобы он автоматически обновлялся?
    • От drewwwnya
      Всем привет!
      случилась такая фигня, описание не сохраняется. Ни в summernote (недавно ставил TinyMCE , но с ним все работало), ни во втором редакторе.
      в это же время для англ версии все нормально. в логах тоже чисто
      было у кого такое? куда копать?
    • От Landistore
      1 400.00 руб
      Скачать/Купить дополнение


      eMarket - адаптивный и универсальный шаблон
      eMarket - универсальный шаблон который был построен на базе стандартной темы Opencart. Аккуратность, минимализм и удобство использования - это то, что выделяет этот шаблон среди сотни других
       
      Демонстрация
      Магазин: Смотреть демо магазина
      Админка: Смотреть демо админки, доступ: demo / demo
       
      Совместимость
      Opencart 2.3 / OcStore 2.3
       
      Основой для данного шаблона послужила стандартная тема default и большое желание сделать хорошую основу для быстрого и успешного старта вашего интернет-магазина. 

      Что вы получаете вместе с шаблоном
      Архив с актуальной версией шаблона и файлами дополнительных модулей.  Бесплатные обновления, которые формируются на основе ваших отзывов и предложений по улучшению  Подробную документацию по установке и настройке шаблона в которой разберется практически каждый человек. Набор баннеров для магазина одежды Стили для модуля ocFilter 4.7.5
      Особенности шаблона:
      Простая установка Адаптивная вёрстка Поддержка мультиязычности Три вида отображения товаров: список, список цен, сетка Добавлен вывод СЕО текста Наличие HTML баннеров (не картинка) Стильные иконки от Stroke icons 7 Современные шрифты Установлена последняя версия Owl Carousel Заменен Magnific Popup на LightBox Удобное меню в мобильной версии (сайдбар) Реализовано дополнительное меню в моб. версии для быстрого доступа к корзине, товарам в сравнении, закладках Модуль “Стена категорий” Модуль “Хиты продаж (Вертикальные)” Модуль “Последние (Вертикальные)” Модуль “Рекомендуем (Вертикальные)” Реализован блок со способами оплаты (редактируется через footer.tpl) Реализован блок "Сервис" (редактируется через footer.tpl) Реализована смена изображений товара при наведении Реализован вывод изображений дочерних категорий реализован вывод ссылки "Товары в сравнении" в шапке Добавлен вывод процента скидки товара Реализован вывод номера телефона в шапке и подвале Реализован вывод email в шапке и подвале Реализован вывод времени работы магазина Добавлены ссылки на социальные сети в подвале (менять через код) Добавлено окно “cookies” Добавлены кнопки “Плюс/Минус” на странице товара Добавлена кнопка “Вверх” Пересобрана страница с производителями Пересобран личный кабинет покупателя Оптимизированный и структурированный код Поддержка разных браузеров (Chrome, Firefox, Safari, Opera, Edge) Набор красивых и живых баннеров  
      Дополнительные услуги: 
      Установка и настройка шаблона - 400руб. Настройка хостинга и домена для вашего магазина - 400руб. Внедрение микроразметки (без модуля, вручную) - 1000руб. Оптимизация загрузки сайта - 700руб. Установка различных счетчиков и скриптов (Google Analytics, Yandex Metrika, JivoSite и т.д.) - 400руб.  
      В шаблоне присутствует модуль фильтра товаров “OCFilter”. Он не входит в стоимость шаблона. Купить можно тут 
       
       
      ВАЖНО!
      Шаблон изменяет стандартный common.js. Но это не значит, что у вас возникнут проблемы с установкой сторонних модулей. Все модули устанавливаются и работают 
       
       
      Лицензия:
      Шаблон можно использовать только на одном, основном домене (тестовые без ограничений). Любая перепродажа, выкладывание в публичный доступ и прочие действия подобного характера запрещены и являются нарушением авторских прав.
      Добавил Landistore Добавлено 06.01.2019 Категория Платные шаблоны Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 2.3 ocStore 2.3 OpenCart.Pro, ocShop  
    • От Landistore
      1 400.00 руб
      Скачать/Купить дополнение


      NetStore - адаптивный шаблон интернет магазина электроники
      NetStore - яркий Opencart шаблон для магазина электроники. Продуманная структура и яркое цветовое решение позволяют использовать данный шаблон в различных тематиках
       
      Демонстрация
      Магазин: Смотреть демо магазина
      Админка: Смотреть демо админки, доступ: demo / demo
       
      Совместимость
      Opencart 2.3 / OcStore 2.3
       
      Основой для данного шаблона послужила стандартная тема default и большое желание сделать хорошую основу для быстрого и успешного старта вашего интернет-магазина. 

      Что вы получаете вместе с шаблоном
      Архив с актуальной версией шаблона и файлами дополнительных модулей.  Бесплатные обновления, которые формируются на основе ваших отзывов и предложений по улучшению  Подробную документацию по установке и настройке шаблона в которой разберется практически каждый человек. Набор баннеров для магазина одежды Стили для модуля ocFilter 4.7.5
      Особенности шаблона:
      Простая установка Адаптивная вёрстка Поддержка мультиязычности Три вида отображения товаров: список, список цен, сетка Добавлен вывод СЕО текста Наличие HTML баннеров (не картинка) Добавлено несколько вариаций "Сервиса" Стильные иконки от Stroke icons 7 Современные шрифты Установлена последняя версия Owl Carousel Заменен Magnific Popup на LightBox Удобное меню в мобильной версии (сайдбар) Реализовано дополнительное меню в моб. версии для быстрого доступа к корзине, товарам в сравнении, закладках Модуль “Стена категорий” Модуль “Хиты продаж (Вертикальные)” Модуль “Последние (Вертикальные)” Модуль “Рекомендуем (Вертикальные)” Реализован блок со способами оплаты (редактируется через footer.tpl) Реализована смена изображений товара при наведении Реализован вывод изображений дочерних категорий реализован вывод ссылки "Товары в сравнении" в шапке Добавлен вывод процента скидки товара Реализован вывод номера телефона в шапке и подвале Реализован вывод email в шапке и подвале Реализован вывод времени работы магазина Добавлены ссылки на социальные сети в подвале (менять через код) Добавлено окно “cookies” Добавлены кнопки “Плюс/Минус” на странице товара Добавлена кнопка “Вверх” Пересобрана страница с производителями Пересобран личный кабинет покупателя Оптимизированный и структурированный код Поддержка разных браузеров (Chrome, Firefox, Safari, Opera, Edge) Набор красивых и живых баннеров  
      Дополнительные услуги: 
      Установка и настройка шаблона - 400руб. Настройка хостинга и домена для вашего магазина - 400руб. Внедрение микроразметки (без модуля, вручную) - 1000руб. Оптимизация загрузки сайта - 700руб. Установка различных счетчиков и скриптов (Google Analytics, Yandex Metrika, JivoSite и т.д.) - 400руб.  
      В шаблоне присутствует модуль фильтра товаров “OCFilter”. Он не входит в стоимость шаблона. Купить можно тут 
       
       
      ВАЖНО!
      Шаблон изменяет стандартный common.js. Но это не значит, что у вас возникнут проблемы с установкой сторонних модулей. Все модули устанавливаются и работают 
       
       
      Лицензия:
      Шаблон можно использовать только на одном, основном домене (тестовые без ограничений). Любая перепродажа, выкладывание в публичный доступ и прочие действия подобного характера запрещены и являются нарушением авторских прав.
      Добавил Landistore Добавлено 06.01.2019 Категория Платные шаблоны Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 2.3 ocStore 2.3 OpenCart.Pro, ocShop  
  • Последние посетители   0 пользователей онлайн

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

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.