Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

halfhope

Користувачі
  
  • Публікації

    1 750
  • З нами

  • Відвідування

Повідомлення, опубліковані користувачем halfhope

  1. Еще столкнулся с проблемой, когда файл кэша удаляется в промежуток между проверкой и получением данных) Эта проблема так же наблюдается в коробочном классе кэширования.

  2. Приветствую. Этот вариант я тоже рассматривал. Но, например, при обновлении цены у товара нужно удалить все файлы, к которых содержится старая цена, например в фильтре или других модулях. Проще сделать это по маске файла $this->cache->delete('filterpro*'), $this->cache->delete('latest*'). Нежели флушить весь memcached сервер. Механизма получения списка ключей в нем нет. Поэтому по маске удалить нельзя, да, и полного названия ключа в файлам кэша у нас тоже нет, поэтому вариант с memcached был отвергнут.

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

     

    Да, я тоже заметил, это из-за js, уже работаю над этим. 

  4. Была поставлена задача - переписать систему кэширования OpenCart без использования функции glob, т.к. при 15 тыс файлов в кэше она тормозит (даже при 20 вызовах $this->cache->get) .

    post-27725-0-44457200-1430706630_thumb.png

    Условия:

    • Кэширование на основе файлов:
    • Функционал не урезается, удаление файлов из кэша по маске файла так же остается доступным.
    • Все изменения в пределах одного файла.

    Было принято решение спрятать expire вместе с сериализованными данными чтобы при получении файла можно было использовать любую функцию, а не только glob. И собственно, заменить glob в функции get т.к. она вызывается чаще всего. У оставшейся в классе функции glob добавлен флаг GLOB_NOSORT(хоть это и должно значить, что файлы не должны быть отсортированы, они все же сортируются функцией sort, с этим флагом они не будут сортированы функцией uasort, которая медленней).



     

    <?php
    
    class Cache {
    	private $expire = 3600;
    	public function get($key) {
    		
    		$file = DIR_CACHE . $key . '.cache';
    		
    		if (is_file($file)) {
    			
    			$data = unserialize(file_get_contents($file));
    
    			if ($data['time'] < time()) {
    				if (file_exists($file)) {
    					@unlink($file);
    				}
    				return false;
    			}
    		
    			return $data['data'];
    		}
    	}
    
    	public function set($key, $value) {
    		$this->delete($key);
    		
    		$data = array(
    			'time' => time() + $this->expire,
    			'data' => $value
    		);
    		
    		$file = DIR_CACHE . $key . '.cache';
    
    		$handle = fopen($file, 'w');
    
    		fwrite($handle, serialize($data));
    
    		fclose($handle);
    	}
    
    	public function delete($key) {
    		$files = glob(DIR_CACHE . $key . '.cache', GLOB_NOSORT );
    
    		if ($files) {
    			foreach ($files as $file) {
    				if (file_exists($file)) {
    					@unlink($file);
    				}
    			}
    		}
    	}
    	
    	public function check(){
    		$files = glob(DIR_CACHE . '*.cache', GLOB_NOSORT );
    
    		if ($files) {
    			foreach ($files as $file) {
    				if (file_exists($file)) {
    					$data = unserialize(file_get_contents($file)); 
    					$time = $data['time'];
    					if ($time < time()) {
    						@unlink($file);
    					}
    				}
    			}
    		}
    	}
    	
    	function __destruct() {
    		if (mt_rand(0, 300) == 15) {
    			$this->check();
    		}
    	}
    
    }
    ?> 
  5. согласен, это очень много. но какие варианты ?)

     

    Тормоза из-за подзапросов из таблиц product_special и product_discount 90% времени уходит на создание временных таблиц для выполнения этих подзапросов. 

    SELECT count(*) AS total,
           p2a.attribute_id,
           trim(p2a.text) AS 'text'
    FROM product p
    /*
    LEFT JOIN
      (SELECT product_id,
              price,
              customer_group_id,
              date_start,
              date_end
       FROM product_special
       WHERE customer_group_id = '1'
         AND (date_start = '0000-00-00'
              OR date_start < '2015-05-03 16:03:00')
         AND (date_end = '0000-00-00'
              OR date_end > '2015-05-03 16:03:00')
       GROUP BY product_id) ps ON (ps.product_id = p.product_id)
    LEFT JOIN
      (SELECT product_id,
              price
       FROM product_discount
       WHERE customer_group_id = '1'
         AND quantity = '1'
         AND (date_start = '0000-00-00'
              OR date_start < '2015-05-03 16:03:00')
         AND (date_end = '0000-00-00'
              OR date_end > '2015-05-03 16:03:00')
       GROUP BY product_id) pd2 ON (pd2.product_id = p.product_id)
    */
    LEFT JOIN product_to_store p2s ON(p.product_id=p2s.product_id)
    LEFT JOIN product_attribute p2a ON (p2a.product_id=p.product_id)
    INNER JOIN
      (SELECT category_id,
              product_id
       FROM product_to_category
       WHERE category_id = '60') p2c ON(p.product_id=p2c.product_id)
    WHERE p.status = '1'
      AND p.date_available <= '2015-05-03 16:03:00'
      AND p2s.store_id =0
      AND p2a.language_id='2'
      AND COALESCE(/* pd2.price,  ps.price ,*/ p.price) >=105781
      AND COALESCE(/* pd2.price,  ps.price ,*/ p.price) <=1039600
    GROUP BY p2a.attribute_id,
             trim(p2a.text)
    

    Если их убрать, то время выполнения запроса будет в среднем 0.3-0.7сек, что хорошо. 

    Сейчас тормозит если оставить подзапрос из таблицы product_special т.к. в ней 1,785 записей, а в product_discount всего 4.

  6. 2015-05-02 16:12:59 - 16.16093 |     1 | /home/verdit.ru/data/www/energo-magazin.ru/vqmod/vqcache/vq2-catalog_controller_module_filterpro.php(529)
    2015-05-02 16:12:59 - 19.81317 |    43 | /index.php?route=module/filterpro/getproducts 

    Как-то можно это ускорить? 120 тыс. товаров.

     

     

    Присоединяюсь (модком), в среднем время запроса списка аттрибутов в соответствии с входными данными 17 сек. Запрос хороший, все что нужно берет и потом в добавок кэшируется, но первичная загрузка 16 сек - это много. 

    2.png

    особенно Using temporary; Using filesort не доставляет

  7. А можно поинтересоваться. В этом случаи кеш когда очиститься?

    или файлы будут бесконечно "размножаться" ?

     

    Кэш удалится как только будет устаревшим, т.е. через час (за время жизни отвечает переменная expire в файле system/library/cache.php). В кэше файлы бесконечно не размножаются, никогда. Если они там есть, то они нужны. Если у Вас размножаются, то что-то пошло не так.

    1. Вызывать метод админки из витрины можно, но только с костылями, это неправильно. Хотя, если этим методом будет пользоваться только администратор магазина, то можно. Т.к. при обращении к административному разделу проверяется текущая сессия пользователя и параметр token, передаваемый в url [GET]. 
    2. Если же метод доступен всем пользователям, то правильнее будет скопировать метод в код модуля (в витрину).
    3. Если код независим от OpenCart, то можно переместить метод в свой класс, а точнее в библиотеку или, лучше в хелпер. Тогда он будет доступен и в админке и в витрине.

    Еще в догонку публикации с моего блога:

  8. Опенсорс. Антивирусная утилита, которая собирает структурированную информацию о сайте. Собранные данные можно отправить специалисту или проанализировать самостоятельно, чтобы получить лечащий скрипт. Разработан совместно с revisium.com (айболит). 

     

    От себя:

     

    Состоит из двух частей, сканер (активная часть для работы с сервером) и анализатор логов (пассивная, только работа с логами. есть оффлайн и онлайн версия). Т.е. сначала сканируйте с помощью сканера, затем отправляйте файлы на анализ в анализатор. После выбора необходимых действий в нем же создается файл для лечения. Затем этот файл заливается обратно в сканер и инструкции по лечению выполняются. Оценить функционал скрипта мне так и не удалось, т.к. у меня на сервере какая-то очередная трабла с include_path -> require_once.

     

    Инструкция от яндекса:

    • Загрузите Manul в корневую директорию сайта через FTP/SFTP и распакуйте архив.
    • Для запуска введите в адресную строку браузераадрес_вашего_сайта/manul/index.php.
    • Создайте пароль, чтобы никто, кроме вас, не смог воспользоваться утилитой.
    • Запустите сканирование. После окончания отчёт будет сохранён в формате .xml.
    • Загрузите отчёт в Анализатор или отправьте его специалисту.
    • Откройте Manul и перейдите во вкладку Executor. Скопируйте полученный после анализа лечащий скрипт в специальное поле и нажмите «Выполнить».
    • После окончания работы удалите папку /manul с сервера.

    Новость на хабре:

    Промо страница:

    Репозиторий:

    Другое:

    • PHP Shell Detector [php, Python] [сайтрепо] (автор говорит по-русски)
    • Айболит
     [сайт]
    Прямые руки
  9. А подскажите, вот у меня в папке gownload тоже около 10 файлов с кракозяблами в названии. Мне их удалить? А как восстановить htaccess? У меня таких файла три штуки в разных папках. Что с ними сделать надо?

     

    В файле catalog/controller/product/product.php удалите функцию upload. Загрузки файлов со стороны витрины сразу прекратятся.

  10. Схемы да. Но схема (насколько я в курсе) не позволит администрировать какую фотогалерею в каком магазине отображать.

    -> фотогалерея №1 будет отображаться и там и там

     

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

  11. для оксторе 1.5.4 подойдет ?

     

    Да. Но если нет технических знаний, то настроить не получится.

     

    Здравствуйте. Можно ли для CSS тоже сделать настройку как у JavaScript - "Вставлять все скрипты перед:" чтобы можно было указать перед каким тегом вставить стили. Хочу главные стили вставить в шапку инлайн, а все остальные стили объединить и засунуть в footer. Или подскажите где в коде поправить чтобы сжатый css из шапки перенести в подвал.

     

    Добрый день. Нет, вставка CSS происходит в том месте, где находится первый стиль на странице. Если CSS уже находится в подвале, то можно его там и оставить. Для этого в списке "Список позиционных стилей" укажите путь к файлу. После этого файл будет находится в коде страницы на том же месте, что и был ранее.

     

    Поставил на демку http://luxmassage.kz/mcj/ Google Page Speed выдает 98-100 из 100. https://developers.google.com/speed/pagespeed/insights/?url=http%3A%2F%2Fluxmassage.kz%2Fmcj%2F&tab=desktop

    Ругается лишь на скорость ответа сервера. При отключенном модуле не ругается. Видимо как раз эти доли секунды плюсуются к обычному ответу сервера и по мнению Гугла превышают рекомендуемое значение. 

    Хотя если мелкие картинки зажать в спрайт, стили и скрипты объединить - то возможно скорость ответа увеличится. и будет 100 из 100  :-) 

    Спасибо за модуль!

     

    Уберите галочку "Отдавать уже сжатые CSS/JS файлы" (точное название не помню) она находится на вкладке "Общие". Возможно, что проблема из-за нее.

  12. Здравствуйте! поставил модуль, все нормально, немогу настроить работу в мультимагазине. Прошу подсказать как настроить?

     

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

  13. Здравствуйте! поставил модуль, все нормально, немогу настроить работу в мультимагазине. Прошу подсказать как настроить?

     

    Добрый день. 

     

    Пока что в модуль не встроено средство размещения модулей в мультимагазинах. Сейчас посмотрю что можно сделать и отпишусь.

  14. Здравствуйте. С помощью модуля можно выводить скрипты до закрывающих тегов </body> и </html>? Посмотрел на демке - там скрипты дописываются после закрывающих тегов. Не критично конечно, но валидатор скорее всего будет ругаться.

     

    Вы правы, он вставляет скрипты только после. Если хотите перед, то без правки файла не обойтись. Для этого в файле system/library/mcj.class.php (~372 строка) найдите:

    $gen_scripts = $gen_scripts.$script_matches_content.$matches[0]; 
    

    Замените на:

    $gen_scripts = $matches[0].$gen_scripts.$script_matches_content; 					
    
  15. Тема закрыта) Душевное спасибо за помощь Baco!

    Дествительно модуль https://opencartforum.com/files/file/459-filter-pro/ прятал мои корявые попытки вывести артикул и модель)) а прятал из потому что в настроках модуля есть возможность выводить артикул и модель по умолчанию юез правок...но она была отключена))

    кстати модуль отличный, быстрый и воопщще..

     

    Еще индексы в БД добавьте, вообще летать будет.

     

     

    Тема давно умерла, но проблемы остались(

     

    Столкнулся с такой проблемой, когда переходишь на страницу в категориях товара или выбираешь другой фильтр сортировки, то значение sku пропадает — покапался в файлах, а проблему так и не получилось решить. Где я мог ошибится?

     

     

    Возможно проблема в JavaScript коде, который выводит сетку/список.

  16. Если отредактировать в этом контроллере, то придется и модель переписывать т.к. выборка товаров изначально и при фильтрации происходит относительно валюты, которую выбрал пользователь. Обратитесь к автору модуля. 

  17.  

    После включения Обрабатывать js файлы белый экран и ошибки в логе:

    2015-04-15 21:56:33 - PHP Warning:  preg_match(): Unknown modifier 'h' in /home/hem/www/system/library/mcj/mcj.class.php on line 371
    2015-04-15 21:56:33 - PHP Notice:  Undefined offset: 0 in /home/hem/www/system/library/mcj/mcj.class.php on line 372
    2015-04-15 21:56:33 - PHP Warning:  preg_replace(): Unknown modifier 'h' in /home/hem/www/system/library/mcj/mcj.class.php on line 373
    2015-04-15 21:56:33 - PHP Notice:  Undefined offset: 0 in /home/hem/www/system/library/mcj/mcj.class.php on line 484

     

    В пункте "позиция вставки JS" укажите "/\<\/head\>/" (без кавычек), либо прочтите справочный раздел.

  18.  

    Я вам помогать не буду, сами разбирайтесь.

     

    Тогда ищите какой-нибудь настраиваемый модуль категорий, готов поспорить, что он есть. Есть и более простое решение, в контроллере модуля категорий можно сделать проверку и выводить только нужные Вам категории. 

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.