Размер маленького изображения (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). Ну, и оформили это в виде переменных для удобства.
Вроде все. Вообще, можно, конечно, в админку добавить поле и туда писать размеры, которые мы хотим видеть.
спасибо! может подскажете как выстроить все картинки в ряд включая основную превьюшку?
Попробуйте сделать ширину картинок (если они располагаются вертикально) в размер слоя (или ячейки таблицы). Или, как вариант, отделить главное изображение от остальных превьюшек также слоями и опять же шириной или высотой их загонять в столбик или ряд
Спасибо , очень помог ваш комментарий.
в данном случае, можно переменным $newxsize и $newysize в первом файле и $width и $height во втором присвоить фиксированные значения, но это:
1) костыль;
2) очень неудобно будет в случае чего менять размеры;
3) если картинки разные по размеру, то будет косячно смотреться.
Поэтому, я думаю, лучше будет загнать их в слой фиксированной ширины или высоты (в зависимости от того, как требуется вывести)
благодарю! сделал в таблице, в разные столбцы вставил основную превью и доп изображения и ограничил таблицу по высоте
Не за что, обращайтесь 🙂