Jump to content

subarufor

Members
  • Posts

    20
  • Joined

  • Last visited

subarufor's Achievements

Newbie

Newbie (1/14)

1

Reputation

  1. Я все-таки решил довести эту идею до ума. Вот что получилось. У меня PrestaShop 1.4.7.3 1. В файл admin/tabs/AdminStatsConf.php в функцию добавил 2 константы: public function postProcess() { if (Tools::getValue('submitSettings')) { // Константы для периодической очистки таблиц статистики Configuration::updateValue('PS_STATSDATA_NEW_YEAR', date('Y')); Configuration::updateValue('PS_STATSDATA_NEW_MONTH', date('m')); if ($this->tabAccess['edit'] === '1') $this->_postConfig($this->_fieldsSettings); else $this->_errors[] = Tools::displayError('You do not have permission to edit here.'); } } 2. В класс classes/Connection.php добавил новую функцию: public static function cleanStatisticsDatas() { $period_year = Configuration::get('PS_STATSDATA_NEW_YEAR'); $period_month = Configuration::get('PS_STATSDATA_NEW_MONTH'); if ($period_year != date('Y')) { Configuration::updateValue('PS_STATSDATA_NEW_YEAR', date('Y')); Configuration::updateValue('PS_STATSDATA_NEW_MONTH', date('m')); // Полная очистка таблиц статистики за прошлый год (делается автоматически в начале года) Db::getInstance()->execute('TRUNCATE `'._DB_PREFIX_.'connections`'); Db::getInstance()->execute('TRUNCATE `'._DB_PREFIX_.'connections_page`'); Db::getInstance()->execute('TRUNCATE `'._DB_PREFIX_.'connections_source`'); Db::getInstance()->execute('TRUNCATE `'._DB_PREFIX_.'guest`'); Db::getInstance()->execute('TRUNCATE `'._DB_PREFIX_.'pagenotfound`'); Db::getInstance()->execute('TRUNCATE `'._DB_PREFIX_.'sekeyword`'); Db::getInstance()->execute('TRUNCATE `'._DB_PREFIX_.'statssearch`'); return; } if ($period_month != date('m')) { // Будут удаляться записи из таблиц за ПОЗАПРОШЛЫЙ месяц $interval_m = '2 MONTH' // Если дата 2014-11-01 00:02:32, то будут удалены записи ранее, чем 2014-10-01 00:00:00 // Если необходимо удалять записи за ПРОШЛЫЙ месяц, то лучше использовать TRUNCATE или $interval_m = '1 MONTH' // Если очень много посетителей в месяц, то лучше использовать TRUNCATE (иначе процесс займет много времени) $interval_m = '2 MONTH'; $interval_d = '1 DAY'; Configuration::updateValue('PS_STATSDATA_NEW_MONTH', date('m')); // Получем массов индексов 'id_guest', которые будут удалены $result = Db::getInstance()->ExecuteS(' SELECT `id_guest` FROM `'._DB_PREFIX_.'connections` WHERE date_add < DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL '.$interval_m.')), INTERVAL '.$interval_d.')'); // Удаляем записи таблиц статистики за ПОЗАПРОШЛЫЙ месяц Db::getInstance()->execute(' DELETE FROM `'._DB_PREFIX_.'connections` WHERE date_add < DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL '.$interval_m.')), INTERVAL '.$interval_d.')'); Db::getInstance()->execute(' DELETE FROM `'._DB_PREFIX_.'connections_page` WHERE date_add < DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL '.$interval_m.')), INTERVAL '.$interval_d.')'); Db::getInstance()->execute(' DELETE FROM `'._DB_PREFIX_.'connections_source` WHERE date_add < DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL '.$interval_m.')), INTERVAL '.$interval_d.')'); Db::getInstance()->execute(' DELETE FROM `'._DB_PREFIX_.'pagenotfound` WHERE date_add < DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL '.$interval_m.')), INTERVAL '.$interval_d.')'); Db::getInstance()->execute(' DELETE FROM `'._DB_PREFIX_.'sekeyword` WHERE date_add < DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL '.$interval_m.')), INTERVAL '.$interval_d.')'); Db::getInstance()->execute(' DELETE FROM `'._DB_PREFIX_.'statssearch` WHERE date_add < DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL '.$interval_m.')), INTERVAL '.$interval_d.')'); // Занимает дополнительно время около 5 - 20 сек (в зависимости от числа посетителей за месяц) foreach ($result as $elem) { // Удаление записей в таблице ps_guest Db::getInstance()->execute(' DELETE FROM `'._DB_PREFIX_.'guest` WHERE (id_guest = '.$elem['id_guest'].')'); } return; } } Затем в этом же классе в функцию public static function setNewConnection($cookie) после строк: Connection::cleanConnectionsPages(); добавил вызов новой функции: Connection::cleanStatisticsDatas(); 3. Затем в Админ панели: Статистика --> Настройки --> Сохранить (чтобы прописались константы). В итоге получаем автоматическое ежемесячное удаление записей в таблицах статистики. И ежегодную полную очистку этих таблиц.
  2. Идея, конечно хорошая. Но каждый раз при записи нового соединения, т.е. при записи в таблицу _connections будут выполняться все эти запросы на удаление. Мне кажется, что это не очень хорошо. Я вижу 2 варианта: 1. Повесить скрипт на CRON (допустим, 1 раз в месяц или год в зависимости от посетителей) 2. Сделать это вручную (тоже 1 раз в месяц или год в зависимости от посетителей) Кстати, таблицу _guest можно чистить следующим образом (для Вашего варианта): После выполнения Ваших запросов находим в таблице _connections минимальное значение в столбце `id_guest`,например 341379 и затем удаляем из таблицы _guest все записи по условию: DELETE FROM `_guest` WHERE ( `id_guest` < 341379 ). Спасибо за идею!
  3. Kerm, спасибо за советы. Капчу уже подключил. По поводу geoip тоже думал. Тем более в стандартной поставке PrestaShop имеется такая функциональность. Кстати, домогаются в основном из Нидерландов и Германии (в обоих случаях провайдер LeaseWeb ...). Очевидно, что это какая-то помойка. А вообще может есть другие варианты реализации ?
  4. Разумеется, кроме Яндекса и Гугла и некоторых других, которые учитывают директивы в robots.txt. Бороться собираюсь с теми ботами, которые за 30-60 мин полностью выкачивают сайт с 2000шт товаров. Пользы при этом от них нет никакой. При этом создают лишнюю нагрузку да спамят.
  5. Может кто-нибудь имел опыт по борьбе с роботами-ботами, которые спамят и выкачивают сайт, создавая при этом значительную нагрузку? Просто не очень эффективно периодически заносить их по IP и User-Agent в .htaccess, т.к. они меняют IP адреса и свои названия. Хотелось бы это делать автоматически и получать уведомления по E-mail о внесенных в запретный список ботах.
  6. Абсолютно с Вами согласен. Но я только сообщил то, что заметил. Помимо Яндекс метрики я еще использую статистику AWStats - она неплохо себя зарекомендовала.
  7. При тестировании версии 1.6.0.6 заметил, что модуль статистики statsequipment, отображающий браузеры и операционные системы гостей, неверно определяет Internet Explorer версий с 8 по 11. Проблема оказалась в классе .../classes/Guest.php в строке 111 'IE 11' => 'Trident', Из-за этого браузеры с IE8 по IE10, имеющие такую же строку 'Trident...' в User-Agent определялись как IE11. Можно условие для IE11 изменить следующим образом: 'IE 11' => 'Trident/7', P.S. Но вообще, обработка User-Agent для браузеров написана слабовато, видимо не стояла цель для точной идентификации.
  8. Рекомендую Beget.ru Сам сижу на нем около 3-х лет. До этого попробовал 3 или 4 других.
  9. Вот скрины анализа 1-ой страницы Вашего сайта. Вообще не плохо, но можно включить ККК сжатие в Настройки --> Производительность. Включите все, кроме Опасное HTML сжатие.
  10. Тоже очень интересует, как это сделать.
  11. Если Вы имеете в виду сделать через создание зон, то этот способ не делает AJAX рассчет при выборе оформления заказа на одной странице. При стандартном способе за 5 шагов все работает нормально. По крайней мере у меня в 1.4.7.3.
  12. Полностью поддерживаю. Beget.ru - правильный выбор. Я тоже попробовал 4 - 5 хостингов.
  13. Выкладываю модификатор gsitemap для PrestaPress. Дополнительно и для plblog. Модификацию делали Presto-Changeo. gsitemap_with_prestapress_and_plblog.zip
  14. А у меня 1.5.0.17 встала нормально, а при чистой установке 1.5.1 возникает ошибка (пробовал на Firefox15 и IE9) Подобное возникало на разных стадиях установки и с некоторыми версиями 1.4.х.х Пока ищу решение.
×
×
  • Create New...