-
Публикаций
13 -
Зарегистрирован
-
Посещение
О emelkay
- День рождения 16.06.1991
Техническая поддержка
-
Рабочие дни
Пн
Вт
Ср
Чт
Пт
Сб
Вс -
Выходные дни
Пн
-
Рабочее время
11:00-23:00
-
Текущий статус
Работаю
Информация
-
Пол
Мужчина
-
Город:
Київ
-
Интересы
minimal-techno, php, js, активний відпочинок з друзями та сім'єю
Посетители профиля
Блок последних посетителей выключен и не отображается другим пользователям.
Достижения emelkay
-
LIQPAY | 405 Method Not Allowed
emelkay ответил в теме пользователя zhizherinv в Opencart 2.x: Общие вопросы
дякую БРО! -
# SEO URL Settings RewriteEngine On # If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/ RewriteBase / RewriteRule ^admin/(.*)?$ admin/index.php?_route_=$1 [L,QSA] RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L] RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L] RewriteRule ^system/download/(.*) index.php?route=error/not_found [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^/catalog/?$ RewriteRule ^(.*)$ index.php?_route_=common/home [L]
-
дякую шановний то напевно в мене був кеш
-
приветствую может кто подскажет, на сайте сканируются все страницы нормально а запрос купить кроссовки, вообще не в какую. https://sport-mood.com/
-
Жутко тормозит сайт после наполнения товарами
emelkay ответил в теме пользователя webintercargo в Opencart 3.x: Настройка и оптимизация
ты лучший 👍👍👍 -
Приветствую помогите докрутить сортировку: сортировка по умолчанию по цене от меньшей к большей работает. Но при этом не учитывается сортировка заданая в товаре. В контроллере поменял if (isset($this->request->get['sort'])) { $sort = $this->request->get['sort']; } else { $sort = 'p.price'; } if (isset($this->request->get['order'])) { $order = $this->request->get['order']; } else { $order = 'ASC'; } Остальсь в моделе поменять или?
-
Сортировка товаров по цене по умолчанию
emelkay ответил в теме пользователя Ingamail в Opencart 3.x: Настройка и оптимизация
Но при такой сортировке не работает сортировка которая задается в товаре. Тоесть если сортировка по умолчанию = то если в товаре задаем сортировку для товара. У всем товарам 9999 А некоторым товарам 1, 2, 3 ,4 и тд.. чтобы были первыми. При сортировке по цене как выше написано = сортировка указаня в товаре не учитывается. Может кто поделится решением.. -
emelkay изменил свой аватар
-
emelkay подписался на убрать opacity в модуле watermark
-
Добрый день может кто знает как в этом модуле полностью отклюяить прозранчоть картинки? Если в настройках модуля ставим прозрачность 1.0 то применятся фильтр и цвета становятся индексированными.. https://www.opencart.com/index.php?route=marketplace/extension/info&extension_id=24779&filter_search=Watermark&filter_license=0 <?php /* Files /module/featured.php + /module/bestseller.php + /module/ebay_listing.php + /module/carousel.php + /module/latest.php + /module/special.php + /module/slideshow.php + /module/banner.php + /feed/google_sitemap.php + /feed/google_base.php + /product/product.php + /product/special.php + /product/manufacturer.php + /product/search.php + /product/compare.php + /product/category.php + /common/cart.php + /account/wishlist.php + /payment/pp_express.php + /checkout/cart.php + Type for images category_image product_thumb product_popup product_list product_additional product_related product_in_compare product_in_wish_list product_in_cart */ class ImageWatermark { private $file; private $image; private $width; private $height; private $bits; private $mime; public function __construct($file) { if (file_exists($file)) { $this->file = $file; $info = getimagesize($file); $this->width = $info[0]; $this->height = $info[1]; $this->bits = isset($info['bits']) ? $info['bits'] : ''; $this->mime = isset($info['mime']) ? $info['mime'] : ''; if ($this->mime == 'image/gif') { $this->image = imagecreatefromgif($file); } elseif ($this->mime == 'image/png') { $this->image = imagecreatefrompng($file); } elseif ($this->mime == 'image/jpeg') { $this->image = imagecreatefromjpeg($file); } } else { exit('Error: Could not load image ' . $file . '!'); } } public function getFile() { return $this->file; } public function getImage() { return $this->image; } public function getWidth() { return $this->width; } public function getHeight() { return $this->height; } public function getBits() { return $this->bits; } public function getMime() { return $this->mime; } public function save($file, $quality = 90) { $info = pathinfo($file); $extension = strtolower($info['extension']); if (is_resource($this->image)) { if ($extension == 'jpeg' || $extension == 'jpg') { imagejpeg($this->image, $file, $quality); } elseif ($extension == 'png') { imagepng($this->image, $file); } elseif ($extension == 'gif') { imagegif($this->image, $file); } imagedestroy($this->image); } } public function resize($width = 0, $height = 0, $default = '') { if (!$this->width || !$this->height) { return; } $xpos = 0; $ypos = 0; $scale = 1; $scale_w = $width / $this->width; $scale_h = $height / $this->height; if ($default == 'w') { $scale = $scale_w; } elseif ($default == 'h') { $scale = $scale_h; } else { $scale = min($scale_w, $scale_h); } if ($scale == 1 && $scale_h == $scale_w && $this->mime != 'image/png') { return; } $new_width = (int)($this->width * $scale); $new_height = (int)($this->height * $scale); $xpos = (int)(($width - $new_width) / 2); $ypos = (int)(($height - $new_height) / 2); $image_old = $this->image; $this->image = imagecreatetruecolor($width, $height); if ($this->mime == 'image/png') { imagealphablending($this->image, false); imagesavealpha($this->image, true); $background = imagecolorallocatealpha($this->image, 255, 255, 255, 127); imagecolortransparent($this->image, $background); } else { $background = imagecolorallocate($this->image, 255, 255, 255); } imagefilledrectangle($this->image, 0, 0, $width, $height, $background); imagecopyresampled($this->image, $image_old, $xpos, $ypos, 0, 0, $new_width, $new_height, $this->width, $this->height); imagedestroy($image_old); $this->width = $width; $this->height = $height; } public function watermark($config) { $file = DIR_IMAGE . $config['image']; $info = getimagesize($file); $width = $info[0]; $height = $info[1]; $bits = isset($info['bits']) ? $info['bits'] : ''; $mime = isset($info['mime']) ? $info['mime'] : ''; if ($mime == 'image/gif') { $watermark = imagecreatefromgif($file); } elseif ($mime == 'image/png') { $watermark = imagecreatefrompng($file); } elseif ($mime == 'image/jpeg') { $watermark = imagecreatefromjpeg($file); } if((float)$config['zoom'] != 1) { $new_width = (int)($width * (float)$config['zoom']); $new_height = (int)($height * (float)$config['zoom']); $image_old = $watermark; $watermark = imagecreatetruecolor($new_width, $new_height); if ($mime == 'image/png') { imagealphablending($watermark, false); imagesavealpha($watermark, true); $background = imagecolorallocatealpha($watermark, 255, 255, 255, 0); imagecolortransparent($watermark, $background); } else { $background = imagecolorallocate($this->image, 255, 255, 255); } imagefilledrectangle($watermark, 0, 0, $width, $height, $background); imagecopyresampled($watermark, $image_old, 0, 0, 0, 0, $new_width, $new_height, $width, $height); imagedestroy($image_old); $width = $new_width; $height = $new_height; } $watermark_pos_x = 10; $watermark_pos_y = 10; if((int)$config['pos_x_center'] == 1) { $watermark_pos_x = (int)($this->width/2 - $width/2); } elseif((int)$config['pos_x'] < 0) { $watermark_pos_x = $this->width - $width + (int)$config['pos_x']; } else { $watermark_pos_x = (int)$config['pos_x']; } if((int)$config['pos_y_center'] == 1) { $watermark_pos_y = (int)($this->height/2 - $height/2); } elseif((int)$config['pos_y'] < 0) { $watermark_pos_y = $this->height - $height + (int)$config['pos_y']; } else { $watermark_pos_x = (int)$config['pos_y']; } $watermark_width = $width; $watermark_height = $height; $opacity = (int)((float)$config['opacity'] * 127); $this->imagecopymergealpha($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, $watermark_width, $watermark_height,$opacity); imagedestroy($watermark); } public static function imagecopymergealpha(&$destImg, &$srcImg, $destX, $destY, $srcX, $srcY, $srcW, $srcH, $pct = 0) { $destX = (int) $destX; $destY = (int) $destY; $srcX = (int) $srcX; $srcY = (int) $srcY; $srcW = (int) $srcW; $srcH = (int) $srcH; $pct = (int) $pct; $destW = imageSX($destImg); $destH = imageSY($destImg); for ($y = 0; $y < $srcH + $srcY; $y++) { for ($x = 0; $x < $srcW + $srcX; $x++) { if ($x + $destX >= 0 && $x + $destX < $destW && $x + $srcX >= 0 && $x + $srcX < $srcW && $y + $destY >= 0 && $y + $destY < $destH && $y + $srcY >= 0 && $y + $srcY < $srcH) { $destPixel = imageColorsForIndex($destImg, imageColorat($destImg, $x + $destX, $y + $destY)); $srcImgColorat = imageColorat($srcImg, $x + $srcX, $y + $srcY); if ($srcImgColorat >= 0) { $srcPixel = imageColorsForIndex($srcImg, $srcImgColorat); $srcAlpha = 1 - ($srcPixel['alpha'] / 127); $destAlpha = 1 - ($destPixel['alpha'] / 127); $opacity = $srcAlpha * $pct / 100; if ($destAlpha >= $opacity) { $alpha = $destAlpha; } if ($destAlpha < $opacity) { $alpha = $opacity; } if ($alpha > 1) { $alpha = 1; } if ($opacity > 0) { $destRed = round((($destPixel['red'] * $destAlpha * (1 - $opacity)))); $destGreen = round((($destPixel['green'] * $destAlpha * (1 - $opacity)))); $destBlue = round((($destPixel['blue'] * $destAlpha * (1 - $opacity)))); $srcRed = round((($srcPixel['red'] * $opacity))); $srcGreen = round((($srcPixel['green'] * $opacity))); $srcBlue = round((($srcPixel['blue'] * $opacity))); $red = round(($destRed + $srcRed ) / ($destAlpha * (1 - $opacity) + $opacity)); $green = round(($destGreen + $srcGreen) / ($destAlpha * (1 - $opacity) + $opacity)); $blue = round(($destBlue + $srcBlue ) / ($destAlpha * (1 - $opacity) + $opacity)); if ($red > 255) { $red = 255; } if ($green > 255) { $green = 255; } if ($blue > 255) { $blue = 255; } $alpha = round((1 - $alpha) * 127); $color = imageColorAllocateAlpha($destImg, $red, $green, $blue, $alpha); imageSetPixel($destImg, $x + $destX, $y + $destY, $color); } } } } } } public function crop($top_x, $top_y, $bottom_x, $bottom_y) { $image_old = $this->image; $this->image = imagecreatetruecolor($bottom_x - $top_x, $bottom_y - $top_y); imagecopy($this->image, $image_old, 0, 0, $top_x, $top_y, $this->width, $this->height); imagedestroy($image_old); $this->width = $bottom_x - $top_x; $this->height = $bottom_y - $top_y; } public function rotate($degree, $color = 'FFFFFF') { $rgb = $this->html2rgb($color); $this->image = imagerotate($this->image, $degree, imagecolorallocate($this->image, $rgb[0], $rgb[1], $rgb[2])); $this->width = imagesx($this->image); $this->height = imagesy($this->image); } private function filter() { $args = func_get_args(); call_user_func_array('imagefilter', $args); } private function text($text, $x = 0, $y = 0, $size = 5, $color = '000000') { $rgb = $this->html2rgb($color); imagestring($this->image, $size, $x, $y, $text, imagecolorallocate($this->image, $rgb[0], $rgb[1], $rgb[2])); } private function merge($merge, $x = 0, $y = 0, $opacity = 100) { imagecopymerge($this->image, $merge->getImage(), $x, $y, 0, 0, $merge->getWidth(), $merge->getHeight(), $opacity); } private function html2rgb($color) { if ($color[0] == '#') { $color = substr($color, 1); } if (strlen($color) == 6) { list($r, $g, $b) = array($color[0] . $color[1], $color[2] . $color[3], $color[4] . $color[5]); } elseif (strlen($color) == 3) { list($r, $g, $b) = array($color[0] . $color[0], $color[1] . $color[1], $color[2] . $color[2]); } else { return false; } $r = hexdec($r); $g = hexdec($g); $b = hexdec($b); return array($r, $g, $b); } } class ModelToolImage extends Model { public $conf = false; public function resize($filename, $width, $height, $type = false) { if (!is_file(DIR_IMAGE . $filename)) { return; } $types = array( 'category_image' => 'category_image', 'product_thumb' => 'product_thumb', 'product_popup' => 'product_popup', 'product_list' => 'product_list', 'product_additional' => 'product_additional', 'product_related' => 'product_related', 'product_in_compare' => 'product_in_compare', 'product_in_wish_list' => 'product_in_wish_list', 'product_in_cart' => 'product_in_cart', ); // Load options if(!$this->conf) { $this->conf = $this->getOptions(); } if(in_array($type, $types) && $this->conf[$type] == 1 && $this->conf['active'] == 1) { $extension = pathinfo($filename, PATHINFO_EXTENSION); $old_image = $filename; $new_image = 'cache/' . utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . $width . 'x' . $height . '-' . $type . '.' . $extension; if (!is_file(DIR_IMAGE . $new_image) || (filectime(DIR_IMAGE . $old_image) > filectime(DIR_IMAGE . $new_image))) { $path = ''; $directories = explode('/', dirname(str_replace('../', '', $new_image))); foreach ($directories as $directory) { $path = $path . '/' . $directory; if (!is_dir(DIR_IMAGE . $path)) { @mkdir(DIR_IMAGE . $path, 0777); } } list($width_orig, $height_orig) = getimagesize(DIR_IMAGE . $old_image); $image = new ImageWatermark(DIR_IMAGE . $old_image); $image->resize($width, $height); $image->watermark($this->conf); $image->save(DIR_IMAGE . $new_image); } if ($this->request->server['HTTPS']) { return $this->config->get('config_ssl') . 'image/' . $new_image; } else { return $this->config->get('config_url') . 'image/' . $new_image; } } else { $extension = pathinfo($filename, PATHINFO_EXTENSION); $old_image = $filename; $new_image = 'cache/' . utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . $width . 'x' . $height . '.' . $extension; if (!is_file(DIR_IMAGE . $new_image) || (filectime(DIR_IMAGE . $old_image) > filectime(DIR_IMAGE . $new_image))) { $path = ''; $directories = explode('/', dirname(str_replace('../', '', $new_image))); foreach ($directories as $directory) { $path = $path . '/' . $directory; if (!is_dir(DIR_IMAGE . $path)) { @mkdir(DIR_IMAGE . $path, 0777); } } list($width_orig, $height_orig) = getimagesize(DIR_IMAGE . $old_image); if ($width_orig != $width || $height_orig != $height) { $image = new Image(DIR_IMAGE . $old_image); $image->resize($width, $height); $image->save(DIR_IMAGE . $new_image); } else { copy(DIR_IMAGE . $old_image, DIR_IMAGE . $new_image); } } if ($this->request->server['HTTPS']) { return $this->config->get('config_ssl') . 'image/' . $new_image; } else { return $this->config->get('config_url') . 'image/' . $new_image; } } } public function getOptions() { $rows = $this->db->query(" SELECT `key`, `value` FROM `" . DB_PREFIX . "watermark_settings` WHERE 1 ")->rows; $options = array(); foreach ($rows as $key => $value) { $options[$value['key']] = $value['value']; } return $options; } }
-
Спс Бро!
- 22 ответа
-
- закладки без регистрации
- избранное
- (і ще 2)
-
-
OpenCart Lightning: кешування, оптимізація, покращення SEO та Google PageSpeed
emelkay оставил отзыв к файл пользователя MaxD в Кешування, стиснення, прискорення
всем привет, модуль своё дело нормально вопросов нету. в демке что угодно будет работать. купил лицензию поставил всё толково. вопросы: Поставил его на очень загруженный магазин где куча js + react бла бла. минификация и кеширует он классно моментально включается выключается классно сделано ! 1. Как быть не со стандартными шрифтами? мои действия: 1. я подгружаю их через preload 2. в css @ import подключаю шрифт. 3. назначаю его например для body. если это делать для обычного html лендинга варриант рабочий. тут же плагин кешурет preload проблему не решат. ковырнуть плагин возможности нету.( ЧТО ДЕЛАТЬ АВТОР, ребята помогите.. продавать модуль за 100$ можно роскошелится и написать сраный мануал или для всех чтобы не дёргали..!!! а то как скидку не прописите так написал. а как помочь так идите лесом! ВОПРОС 2: На страницу товара поставил плагин галереи работает чисто на js. когда включаю оптимальный режим минификации галлерея перестаёт работать. 1. как исключи определённые файлы чтобы модуль их вообще не трогал ? 2. или как отключить например его работу на всех товарах? Спасибо!-
- оптимизация
- скорость
- (і ще 5)