Изменение размера изображения в карточке товара Virtuemart 1.1.9 вне зависимости от размера thumbnail

Размер маленького изображения (thumbnail) установили, например, в 200 пикселей. Залили картинки, а они в карточке товара в AdditionalImages выстроились в колонку и не уменьшаются телепатически. Это, конечно, можно решить всякими плагинами и прочими интересностями, я решил так, как решил (не нужны они мне были, эти плагины).

Открываем нам понядобятся два файла:

components/com_virtuemart/show_image_in_imgtag.php

и

components/com_virtuemart/themes/default/theme.php

В первом файле генерятся сами картинки. Строки 58-59

$newxsize = (int)@$_REQUEST['newxsize'] == 0 ? PSHOP_IMG_WIDTH : (int)@$_REQUEST['newxsize'];
$newysize = (int)@$_REQUEST['newysize'] == 0 ? PSHOP_IMG_WIDTH : (int)@$_REQUEST['newysize'];

и меняем их на

$newxsize = (int)@$_REQUEST['newxsize'] == 0 ? PSHOP_IMG_WIDTH : (int)@$_REQUEST['newxsize'] /3;
$newysize = (int)@$_REQUEST['newysize'] == 0 ? PSHOP_IMG_WIDTH : (int)@$_REQUEST['newysize'] /3;

То есть, мы поделили размеры на 3. Можно больше, можно меньше — кому как больше нравится.

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

Вот тут нам пригодится второй файл, именно тут эти картинки и масштабируются. Открываем и в районе строки 118 меняем функцию vmlistAdditionalImages с оригинальной:

function vmlistAdditionalImages( $product_id, $images, $title='', $limit=1000 ) {
  global $sess;
  $html = '';
  $i = 0;
  foreach( $images as $image ) {
    $thumbtag = ps_product::image_tag( $image->file_name, 'class="browseProductImage"', 1, 'product', $image->file_image_thumb_width, $image->file_image_thumb_height );
    $fulladdress = $sess->url( 'index2.php?page=shop.view_images&image_id='.$image->file_id.'&product_id='.$product_id.'&pop=1' );

    if( $this->get_cfg('useLightBoxImages', 1 )) {
      $html .= vmCommonHTML::getLightboxImageLink( $image->file_url, $thumbtag, $title ? $title : stripslashes(htmlentities($image->file_title,ENT_QUOTES,$encoding = 'UTF-8')), 'product'.$product_id );
    }
    else {
      $html .= vmPopupLink( $fulladdress, $thumbtag, 640, 550 );
    }
  $html .= ' ';
  if( ++$i > $limit ) break;
  }
  return $html;
}

На эту

function vmlistAdditionalImages( $product_id, $images, $title='', $limit=1000 ) {
  global $sess;
  $html = '';
  $i = 0;
  foreach( $images as $image ) {

    /* Чтобы картинки в товаре были как задумано в ресайзе в админке
    $width = $image->file_image_thumb_width;
    $height = $image->file_image_thumb_height;
    */
    $width = (int)$image->file_image_thumb_width /3;
    $height = (int)$image->file_image_thumb_height /3;

    $thumbtag = ps_product::image_tag( $image->file_name, 'class="browseProductImage"', 1, 'product', $width, $height );
    $fulladdress = $sess->url( 'index2.php?page=shop.view_images&image_id='.$image->file_id.'&product_id='.$product_id.'&pop=1' );

    if( $this->get_cfg('useLightBoxImages', 1 )) {
      $html .= vmCommonHTML::getLightboxImageLink( $image->file_url, $thumbtag, $title ? $title : stripslashes(htmlentities($image->file_title,ENT_QUOTES,$encoding = 'UTF-8')), 'product'.$product_id );
    }
    else {
      $html .= vmPopupLink( $fulladdress, $thumbtag, 640, 550 );
    }
    $html .= ' ';
    if( ++$i > $limit ) break;
  }
  return $html;
}

В строках 128-131 в измененной функции что мы видим — мы также поделили на 3 ширину и высоту картинки и сделали из этого добра целые числа (int). Ну, и оформили это в виде переменных для удобства.

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

0

Изменение размера изображения в карточке товара Virtuemart 1.1.9 вне зависимости от размера thumbnail: 6 комментариев

  1. merinovkv Автор записи

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

  2. merinovkv Автор записи

    в данном случае, можно переменным $newxsize и $newysize в первом файле и $width и $height во втором присвоить фиксированные значения, но это:
    1) костыль;
    2) очень неудобно будет в случае чего менять размеры;
    3) если картинки разные по размеру, то будет косячно смотреться.
    Поэтому, я думаю, лучше будет загнать их в слой фиксированной ширины или высоты (в зависимости от того, как требуется вывести)

Добавить комментарий