Перейти к содержанию
qqq64

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

Рекомендуемые сообщения

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

Версия движка 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܂܂

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Повторюсь, нельзя так делать, особенно на адаптивных шаблонах типа 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>

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

halfhope

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Повторюсь, нельзя так делать, особенно на адаптивных шаблонах типа 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>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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; ?>" />

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

Вы неправильно указываете размеры!!! В формате 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 сказл ОК!  а конкретные размеры не хочет???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

 

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

Это о чем?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемый, 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;
      }   

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

 

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

Изменено пользователем sadko

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Изменено пользователем afwollis

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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;
      }   

?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.