Jump to content
Sign in to follow this  
qqq64

[Решено?..] Размер изображений?

Recommended Posts

Господа подскажите, как автоматом добавить в код, к изображениям, их размеры?

Версия движка 1.5.6.4
Вот нашел код
Откройте следующий файл в текстовом редакторе:  System/Library/Response.php

Найдите следующую строку кода в файле:          if ($this->level) {
Затем добавьте следующий код просто прежде чем выше линии:

//Q: Add width/height tags to all images for Google Page Speed tip:
//http://code.google.com/speed/page-speed/docs/rendering.html#SpecifyImageDimensions
preg_match_all('/<img[^>]+>/i', $this->output, $result);

$img = array();
foreach($result[0] as $img_tag) {
preg_match_all('/(width|height|src)=("[^"]*")/i',$img_tag, $img[$img_tag]);
}

foreach ($img as $k => $info) {
if (count($info) == 3 && $info[1][0] == 'src') {
//if (curl_init(str_replace('"', '', $info[2][0]))) {
$imgfile = str_replace('"', '', $info[2][0]);
$imgfile = str_replace(HTTP_SERVER, DIR_IMAGE . '../', $imgfile);
$imgfile = str_replace(HTTPS_SERVER, DIR_IMAGE . '../', $imgfile);
if (file_exists($imgfile)) {
$image_info = getImageSize(str_replace('"', '', $imgfile));
$k = trim($k, '/>');
$k = trim($k, '>');
$this->output = str_replace($k, ($k . ' ' . $image_info[3]), $this->output);
}
}
}
//

Но он не работает, : ???    Выдает на всю страницу:

ache/vq2-system_library_response.php on line 97 }kƕs?iHF >~+KXYj"0-9~N8'I/sV%KK[ $f䳂&Yuνq<Ϛ^]<n8;s2ԭNf jMqyF;}tl˰my܂܂

Share this post


Link to post
Share on other sites

Повторюсь, нельзя так делать, особенно на адаптивных шаблонах типа Shoppica2.

 

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

 

Во вторых, замена всех image реплейсом из класса response - очень плохая идея, которая никак не сходится с архитектурой OpenCart, получается говнокод. Хотите сделать из магазина помойку, пожалуйста.

Самый правильный способ - указать размеры только для тех изображений, которым это необходимо. Как узнать каким изображениям это необходимо?

Во первых, это все изображения в шапке сайта т.е. чаще всего это только логотип. для этого необходимо открыть логотип, узнать его размер. Открыть файл catalog/view/theme/название-темы/common/header.tpl найти вывод логотипа и вручную указать высоту и ширину. Так же с остальными изображениями в шапке сайта.

 

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

Открываем файл шаблона категории, находим вывод изображения товара и добавляем ширину и высоту:

<div class="image">
<a href="<?php echo $product['href']; ?>">
<img src="<?php echo $product['thumb']; ?>" title="<?php echo $product['name']; ?>" width="<?php echo $this->config->get('config_image_product_width') ?>" height="<?php echo $this->config->get('config_image_product_height') ?>" alt="<?php echo $product['name']; ?>" />
</a>
</div>

Аналогично с файлами шаблонов модулей.

Share this post


Link to post
Share on other sites

А почему не вынимать еще из контроллера размеры? Ведь указываются они еще в админке, потом в контролере используются для изменения размеров изображений, шлепаем в переменные и вызывает вместе с путем каринки, профит. 

не знаю какой вариант лучше, мой или пользователя 

halfhope

Share this post


Link to post
Share on other sites

Повторюсь, нельзя так делать, особенно на адаптивных шаблонах типа Shoppica2.

 

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

 

Во вторых, замена всех image реплейсом из класса response - очень плохая идея, которая никак не сходится с архитектурой OpenCart, получается говнокод. Хотите сделать из магазина помойку, пожалуйста.

Самый правильный способ - указать размеры только для тех изображений, которым это необходимо. Как узнать каким изображениям это необходимо?

Во первых, это все изображения в шапке сайта т.е. чаще всего это только логотип. для этого необходимо открыть логотип, узнать его размер. Открыть файл catalog/view/theme/название-темы/common/header.tpl найти вывод логотипа и вручную указать высоту и ширину. Так же с остальными изображениями в шапке сайта.

 

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

В обоих случаях необходимо получить настройки (ширина/высота) изображений в контроллере и передать их в шаблон. Но чтобы ускорить процесс, можно получить и вставить ширину и высоту прямо в файле шаблона.

Открываем файл шаблона категории, находим вывод изображения товара и добавляем ширину и высоту:

<div class="image">
<a href="<?php echo $product['href']; ?>">
<img src="<?php echo $product['thumb']; ?>" title="<?php echo $product['name']; ?>" width="<?php echo $this->config->get('config_image_product_width') ?>" height="<?php echo $this->config->get('config_image_product_height') ?>" alt="<?php echo $product['name']; ?>" />
</a>
</div>
Аналогично с файлами шаблонов модулей.
 

В общем все работает, единственное непонятно; в некоторых картинках размер указан, а gtmetrix.com говорит что надо поставить???

Пробовал так и этак результат одинаковый:

<div id="logo"><a href="<?php echo $home; ?>"><img src="<?php echo $logo; ?>" title=" <?php echo $name; ?>" "width: 500px; height: 60px;" alt=" <?php echo $name; ?>" /></a></div>
<div id="logo"><a href="<?php echo $home; ?>"><img src="<?php echo $logo; ?>" title=" <?php echo $name; ?>" style= "width: 500px; height: 60px;" alt=" <?php echo $name; ?>" /></a></div>

Share this post


Link to post
Share on other sites

А почему не вынимать еще из контроллера размеры? Ведь указываются они еще в админке, потом в контролере используются для изменения размеров изображений, шлепаем в переменные и вызывает вместе с путем каринки, профит. 

не знаю какой вариант лучше, мой или пользователя 

halfhope

 

Можно и так, так даже правильней. Я просто чтобы пользователи не путались так сделал.

 

В общем все работает, единственное непонятно; в некоторых картинках размер указан, а gtmetrix.com говорит что надо поставить???

Пробовал так и этак результат одинаковый:

<div id="logo"><a href="<?php echo $home; ?>"><img src="<?php echo $logo; ?>" title=" <?php echo $name; ?>" "width: 500px; height: 60px;" alt=" <?php echo $name; ?>" /></a></div>
<div id="logo"><a href="<?php echo $home; ?>"><img src="<?php echo $logo; ?>" title=" <?php echo $name; ?>" style= "width: 500px; height: 60px;" alt=" <?php echo $name; ?>" /></a></div>
 

Вы неправильно указываете размеры!!! В формате HTML!!! Откуда Вы взяли "width: 500px; height: 60px;" и style= "width: 500px; height: 60px;" ?????

Нужно вот так

<img src="<?php echo $logo; ?>" title=" <?php echo $name; ?>" width="500" height="60" alt=" <?php echo $name; ?>" />

Share this post


Link to post
Share on other sites

Можно и так, так даже правильней. Я просто чтобы пользователи не путались так сделал.

 

 

Вы неправильно указываете размеры!!! В формате HTML!!! Откуда Вы взяли "width: 500px; height: 60px;" и style= "width: 500px; height: 60px;" ?????

Нужно вот так

<img src="<?php echo $logo; ?>" title=" <?php echo $name; ?>" width="500" height="60" alt=" <?php echo $name; ?>" />
Эфект тот же. Главное что, в исходном коде страницы  есть размеры, а gtmetrix.com по прежнему утверждает что нет.

 

когда использовал :

width="<?php echo $this->config->get('config_image_product_width') ?>" height="<?php echo $this->config->get('config_image_product_height') ?>"
gtmetrix.com сказл ОК!  а конкретные размеры не хочет???

Share this post


Link to post
Share on other sites

Gtmetrix кэширует результаты, либо, ессди сайт подкдючен к cloudflare стоит подождать обновления кода.

 

 

 

а конкретные размеры не хочет???

Это о чем?

Share this post


Link to post
Share on other sites

Имею ввиду те размеры, какие прописывал вручную, а не где подставлялось значение.

Все размеры есть, кроме логотипа в хедере - размеры указаны а gtmetrix.com утверждает что нет.

Рядом другая картинка стоит - так с ней все нормально, прописано одинаково, - мистика какая то ?

Пробовал загружать другие страницы в gtmetrix.com все равно упорно не видит.

К cloudflare не подключен.

Share this post


Link to post
Share on other sites

qqq64, дружище, ты проблему решаешь или "gtmetrix" рекламируешь?

А как реализовать мой вариант?)

в твоем варианте ты и так уже написал, как реализовать - передавай размеры из настроек в переменную и используй в шаблонах.

Share this post


Link to post
Share on other sites

А как реализовать мой вариант?)

 

Мой вариант идет в обход контроллера. Я получаю данные в шаблне сразу из настроек магазина, минуя присвоение в контроллере. Заметь, что хэндл приложения доступен в шаблоне т.е. в шаблоне можно использовать $this и все его плюшки минуя контроллер. Я именно так и сделал т.к. лень передавать данные из контроллера в шаблон.

Share this post


Link to post
Share on other sites

так по дефолту мы берем данные из контроллера в шаблон =\ как я понимаю, вся работаю заключается в одной строчке где берем оригинальную картинку, размеры из админки и все это заворачиваем в ... метод? О_О не знаю точного названия, пускай будет в функцию. Ну да, для каждого "шаблона" (каталог, карточка и т.д.) доделывать, но по сути копи паст =\ имхо. 

Share this post


Link to post
Share on other sites

Уважаемый, halfhope!

 

Нашел эту тему случайно. Модифицировал себе response.php как у топикстартера с getImageSize. На сервере вроде не тормозило. А вот на локальном сервере - тормоза очень приличные.

 

Удалил нафиг этот метод добавления размеров.

 

А что Вы скажете на такой способ решения проблемы с добавлением размеров изображений (нашел здесь: http://forum.opencart.com/viewtopic.php?f=121&t=20057):

 

 "Modifying the individual controllers and templates is the best method to implement width/height tags. For those who are lazy and don't mind some sloppy code they can just replace:

catalog/model/tool/image.php

if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
         return HTTPS_IMAGE . $new_image;
      } else {
         return HTTP_IMAGE . $new_image;
      }

with

  if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
         return HTTPS_IMAGE . $new_image . '" width="' . $width . '" height="' . $height;
      } else {
         return HTTP_IMAGE . $new_image . '" width="' . $width . '" height="' . $height;
      }

and that will automatically add it everywhere an image is generated. This won't work for any images which aren't resized."

 

И вот такая модификация этого кода:

if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
         return $this->config->get('config_ssl') . 'image/' . $new_image . '" width="' . $width . '" height="' . $height;
      } else {
         return $this->config->get('config_url') . 'image/' . $new_image . '" width="' . $width . '" height="' . $height;
      }   

Не знаю чем этот вариант отличается.

 

Спасибо за консультацию!

Edited by sadko

Share this post


Link to post
Share on other sites

Супер, в данном случае OpenCart уже знает размеры изображения и Вы просто выводите их. Это лучший вариант! Только скорей всего не прокатит со слайдерами и другими javascript модулями, им нужен чистый путь к изображению, без лишнего HTML.

Edited by afwollis

Share this post


Link to post
Share on other sites

а что особенного в этом варианте:

if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
         return $this->config->get('config_ssl') . 'image/' . $new_image . '" width="' . $width . '" height="' . $height;
      } else {
         return $this->config->get('config_url') . 'image/' . $new_image . '" width="' . $width . '" height="' . $height;
      }   

?

Share this post


Link to post
Share on other sites

Не используется getImageSize, используются заданные в OpenCart размеры и править необходимо всего в одном месте, а не в шаблоне/контроллере. Хотя с точки зрения MVC это не очень правильно. Зато очень быстро.

Share this post


Link to post
Share on other sites

Я имел ввиду чем отличаются между собой эти два варианта:

 if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
         return HTTPS_IMAGE . $new_image . '" width="' . $width . '" height="' . $height;
      } else {
         return HTTP_IMAGE . $new_image . '" width="' . $width . '" height="' . $height;
      }

и

if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
         return $this->config->get('config_ssl') . 'image/' . $new_image . '" width="' . $width . '" height="' . $height;
      } else {
         return $this->config->get('config_url') . 'image/' . $new_image . '" width="' . $width . '" height="' . $height;
      }   

тут строки по разному записаны:

return HTTPS_IMAGE . $new_image . '" width="' . $width . '" height="' . $height;

и эта же строка во 2-м варианте:

 return $this->config->get('config_ssl') . 'image/' . $new_image . '" width="' . $width . '" height="' . $height;

Share this post


Link to post
Share on other sites

Ничем, просто разные версии OpenCart

Share this post


Link to post
Share on other sites

Сделал себе на сайте. Работает. Есть небольшое НО, которое и было описано в исходнике - не ставит размеры на картинки, которым не делается resize. К примеру - логотип. На картинках которые в fancy-box увеличиваются на странице товара. Баннеры.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.