Меню Закрыть

B sale fuser очистка

Содержание

Не менее интересный случай является продолжением ситуации изложенной в статье «Проблема очищения корзины неавторизированных пользователей»
При разработке интернет-магазина по продаже нематериальных товаров и услуг возникла проблема очищения корзины тех пользователей, которые уже зарегистрировались на сайте. Единственная настройка связанная с корзиной: Настройка «Сохранять корзину (дней):» применяется только для корзины незарегистрированных пользователей. На простой вопрос «как сделать, чтобы в корзине заказы авторизированных пользователей не сохранялись?», как оказалось нет ответа. С точки зрения Битрикс настроить не сохранение товаров в корзинах зарегистрированных пользователей в продукте — нельзя. Меня естественно это не устроило.

За основу взял решение в блоге sns-it.ru/blog/bitrix/bolshaya-tablitsa-b-sale-fuser-/ где рассматривалась проблема разбухания таблицы b_sale_fuser. В этой корзине хранятся корзины как авторизированных так и неавторизированных пользователей. После выполнения очистки по методу указанному в статье по ссылке в начале текста вид таблицы b_sale_fuser состоянием на 25 февраля (при сроке хранения 1 день) выглядел так:

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

Как видим все корзины старше 24 часов удалилось уже и у зарегистрированных пользователей. Но решить проблему полной очистки/не хранения корзины пока у меня не получилось, да еще так чтобы не удалить корзину у пользователя, который будет в этот момент оформлять покупку.

Суть метода:

Создаем агента. Идем в Настройки — Настройки продукта -Агенты

Ещё статьи:

02.01.2020 Редактор джумлы режет ссылки
Под супер пользователем с удивлением обнаружил, что джумла режет код вставляемых ссылок обычного тега а ID: 210

02.01.2020 Выбор версии РНР для битрикс
При выборе версии РНР для битрикс нужно учитывать ряд моментов:
1) Совместимость вашей версии Битрикс с заявленными версиями РНР ID: 209

18.12.2019 Поскреби новое ядро D7 найдешь старое
В обновлении элемента на D7 совсем не D7. При попытке использовать новое ядро выяснилось, что метод обновления остался старый. ID: 208

Читайте также:  Распечатать документы на цветном принтере

Новые статьи в блоге:

18.11.2019 404 ошибка для результатов фильтра
Интересная ошибка выявлена в работе smart.filter. Не работает фильтрация и кнопка купить если в адресе есть слова с спецсимволами. ID: 205

10.11.2019 Ресайз изображений в news.list
Часто вижу, что изображения анонса элемента уменьшают с помощью стилей, а фактический размер картинки остаётся большой. В итоге суммарная нагрузка на . ID: 203

01.11.2019 Вывести начальные значения цена от и до
В smart-filter битрикс вывести начальные значения цен ID: 201

Накатал на коленке скрипт для удаления старых корзин покупателей. В битриксе есть воркер для этой задачи, но он как правило не справляется со своей задачей.

Скрипт смотрит настройку «Сохранять корзину (дней)» модуля «Интернет магазин». Корзины больше этого количества дней будут удалены. Следить за тем, как идёт процесс можно в файле лога (проще всего в консоли сервера коммандой tail -f

clear_old_basket.log в папке запускаемого скрипта).

Похожие записи

1С-Битрикс. LazyLoad или ленивая загрузка контента при включенном кешировании

В этой заметке я хочу рассказать о технологии LazyLoad или в простонародье «ленивая загрузка» в Битриксе. Метод, описанный мной, будет точно работать в компонентах catalog.section и news.list.

1C-Битрикс. Кастомизация нового шаблона компонента sale.order.ajax

С выходом нового шаблона компонента sale.order.ajax на форумах битрикса разгораются возмущения и недомения. Мол, теперь код всего шаблона на JavaScript и как его кастомизировать непонятно. На самом деле да, код js-скрипта составляет почти семь тысяч строк. Сходу в таком количестве кода, даже хорошо написанного (к сожалению, битрикс этим не балует), соблюдая паттерны программирования, будет непросто.

В этой заметке я покажу способ, как можно кастомизировать основной скрипт логики шаблона оформления заказа (order_ajax.js), не прибегая к его правке. Что нам это даёт? Когда прилетят очередные обновления шаблона, мы просто заменим его и всё. Все наши кастомизации будут работать (в теории).

Читайте также:  Как проверить есть ли на телефоне вирус

1С-Битрикс. Защита от спама в регистрации без капчи

Не редкость, когда боты начинают регистрироваться на сайтах и захламлять списки пользователей своим присутствием. В «1С-Битрикс» можно включить капчу для защиты от спама. Но порой и капча не спасает, да и заставлять пользователей вводить код с капчи, я считаю, не гуманно. Воспользуемся другим трюком.

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

Проблема раздутия таблицы b_sale_fuser

В таблице хранятся брошенные корзины.
Хранятся по умолчанию 100 дней. Изменить срок хранения можно в модуле интернет магазина-вкладка Настройки-Сохранять корзину (дней)
За очистку ответственен агент. На агенте функция:
CSaleUser::DeleteOldAgent(100, 0);
Если ваш магазин довольно посещаем, то может случиться так, что агент не будет успевать очищать старые корзины и в итоге вы получите раздутую таблицу b_sale_fuser .

Удалять вручную записи таблицы не следует!

Как быстро очистить таблицу b_sale_fuser

Найдем функцию CSaleUser::DeleteOldAgent() в файле itrixmodulessalegeneralasket.php
Она в свою очередь является оберткой для функции CSaleUser::DeleteOld() в файле itrixmodulessalemysqlasket.php
Функция DeleteOld в исходниках:

Разобрав код, вы увидите, что данные этой таблицы используются в других таблицах системы. И для корректного удаления записей из таблицы b_sale_fuser нужно использовать 2 api функции битрикс:
CSaleBasket::DeleteAll();
CSaleUser::Delete();

Чтобы очистить таблицу b_sale_fuser быстрее, можно :

  • скопировать код функции DeleteOld;
  • изменить LIMIT 300 на LIMIT 1000 (либо еще больше, смотря как быстро вы хотите её очистить);
  • задать в начале значение переменной $nDays — допустимый срок хранения корзины;
  • скопированный код можно повесить на CRON.

Проблема раздутия таблицы b_sale_viewed_product

В данной таблице хранятся просмотренные товары пользователей.
В настройках модуля «Интернет магазин» есть возможность изменить «Время хранения просмотренных товаров (дней)» и «Максимальное количество просмотренных товаров пользователя».

Читайте также:  Как вписать в окружность правильный шестиугольник

За очистку этой таблицы ответсвенена функция на агенте CSaleViewedProduct::ClearViewed() , но она может не справлятся при большом количестве посетителей ИМ.

Как быстро очистить таблицу b_sale_viewed_product

Записи этой таблицы можно удалять sql запросом напрямую в бд.
Объясню почему мы можем это сделать.

Найдем в исходниках функцию CSaleViewedProduct::ClearViewed() , которая наследуется из родительского класса CAllSaleViewedProduct и находится в файле itrixmodulessalegeneralproduct.php
Эта функция является оберткой для CSaleViewedProduct::_ClearViewed()
Рассмотрим её код:

Как видим, идет прямой запрос в базу данных на удаление записей, т.е. данных, зависящих от записей этой таблицы, нет.

Проблема раздутия таблицы b_event

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

Очищает таблицу функция CEventLog::CleanUpAgent() на агенте.

Как быстро очистить таблицу b_event

Записи этой таблицы можно удалять sql запросом напрямую в бд.
Объясню почему мы можем это сделать.
Найдем в исходниках функцию CEventLog::CleanUpAgent() , она находится в файле itrixmodulesmainclassesgeneralevent_log.php
Рассмотрим её код:

Как видим, идет прямой запрос в базу данных на удаление записей, т.е. данных, зависящих от записей этой таблицы, нет.

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.