Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

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


 Поделиться

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

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

Версия движка 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 и все его плюшки минуя контроллер. Я именно так и сделал т.к. лень передавать данные из контроллера в шаблон.

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

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

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


  • 7 месяцев спустя...

Уважаемый, 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;
Ссылка на комментарий
Поделиться на других сайтах


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

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


Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

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

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