영카트 상품 외부 이미지 노출되게 했는데 대표이미지가 마지막이미지로..
본문
영카트 상품 이미지를 외부 이미지 노출되도록 코드를 수정했습니다. DB에 http가 들어가있으면 외부 이미지라고 판정하여 img 태그에 url 그대로 입력되도록 하고, 내부 이미지인 경우에는 else로 원래 프로세스를 이어가도록 하였습니다.
이렇게하니 무리없이 표시되긴하는데.. 이해가 안되는점이 메인페이지에서 외부 이미지 노출되는 상품들대표 이미지가 마지막 이미지로 나옵니다.
예로들어 1번,2번,3번 이미지가 있으면 원래라면 상품 대표이미지는 1번이어야하는데 대표이미지가 마지막 이미지로 나옵니다. 코드를 아무리 봐도 이해가 안됩니다. 그런데 내부 이미지로 로드된거보면 1번이미지가 제대로 표시된거보면.. 제가 작성한 코드에서 뭔가 문제가 있는것같은데.. 어디가 문제일까요??
수정된 부분은 shop.lib.php 파일내의 get_it_image 함수를 수정하였습니다. 썸네일 쪽 코드도 약간 수정된게 있긴한데 이부분이랑은 별로 영향이 없는것같구요..
// 상품 이미지를 얻는다
function get_it_image($it_id, $width, $height=0, $anchor=false, $img_id='', $img_alt='', $is_crop=false)
{
global $g5;
if(!$it_id || !$width)
return '';
$row = get_shop_item($it_id, true);
if(!$row['it_id'])
return '';
$filename = $thumb = $img = '';
$img_width = 0;
for($i=1;$i<=10; $i++) {
/* 외부 이미지 일 때 */
if(substr($row['it_img'.$i], 0, 4) === 'http') {
$filename = $row['it_img'.$i];
// alert($filename);
} else {
$file = G5_DATA_PATH.'/item/'.$row['it_img'.$i];
if(is_file($file) && $row['it_img'.$i]) {
$size = @getimagesize($file);
if(! isset($size[2]) || $size[2] < 1 || $size[2] > 3)
continue;
$filename = basename($file);
$filepath = dirname($file);
$img_width = $size[0];
$img_height = $size[1];
break;
}
}
}
if($img_width && !$height) {
$height = round(($width * $img_height) / $img_width);
}
if($filename) {
//thumbnail($filename, $source_path, $target_path, $thumb_width, $thumb_height, $is_create, $is_crop=false, $crop_mode='center', $is_sharpen=true, $um_value='80/0.5/3')
if(substr($filename, 0, 4) === 'http'){
// alert('hi');
$thumb = $filename;
// alert($thumb);
} else {
$thumb = thumbnail($filename, $filepath, $filepath, $width, $height, false, $is_crop, 'center', false, $um_value='80/0.5/3');
}
}
/* 수정<1> START */
if($thumb) {
if(substr($thumb, 0, 4) === 'http') {
$file_url = $thumb;
$img = '<img src="'.$file_url.'" alt="'.$img_alt.'"';
} else {
$file_url = str_replace(G5_PATH, G5_URL, $filepath.'/'.$thumb);
$img = '<img src="'.$file_url.'" width="'.$width.'" height="'.$height.'" alt="'.$img_alt.'"';
}
} else {
$img = '<img src="'.G5_SHOP_URL.'/img/no_image.gif" width="'.$width.'"';
if($height)
$img .= ' height="'.$height.'"';
$img .= ' alt="'.$img_alt.'"';
}
// if($thumb) {
// $file_url = str_replace(G5_PATH, G5_URL, $filepath.'/'.$thumb);
// $img = '<img src="'.$file_url.'" width="'.$width.'" height="'.$height.'" alt="'.$img_alt.'"';
// } else {
// $img = '<img src="'.G5_SHOP_URL.'/img/no_image.gif" width="'.$width.'"';
// if($height)
// $img .= ' height="'.$height.'"';
// $img .= ' alt="'.$img_alt.'"';
// }
/* 수정 <1> END */
if($img_id)
$img .= ' id="'.$img_id.'"';
$img .= '>';
if($anchor)
$img = $img = '<a href="'.shop_item_url($it_id).'">'.$img.'</a>';
return run_replace('get_it_image_tag', $img, $thumb, $it_id, $width, $height, $anchor, $img_id, $img_alt, $is_crop);
}
답변 2
자문자답입니다. 아래 코드 부분에 break; 가 없어서 continue 하다보니 끝번호까지 가서 발생한 문제인가봅니다. else 에서 처럼 break; 하나 넣어줬더니 정상적으로 작동하네요
if(substr($row['it_img'.$i], 0, 4) === 'http') {
$filename = $row['it_img'.$i];
// alert($filename);
종흔 정보
답변을 작성하시기 전에 로그인 해주세요.