웹마스터 팁

개요 : 기존의 getThumbnail 함수는 사이즈 픽셀값을 하나만 받아서 가로, 세로의 길이를 정하기 때문에 정사각형 모양만 만들어내게 되어 있는데 경우에 따라 가로, 세로의 길이가 다른 썸네일이 필요한 경우가 있으므로 가로, 세로의 픽셀값을 따로 받아 직사각형 모양의 썸네일을 생성할 수 있도록 수정한 것입니다.

참고 : 아래의 getThumbnail 함수는 zbxe/modules/document/document.item.php 에 위치합니다

===================================================================

        function getThumbnail($width = 80,$height = 80) {
            // 문서의 이미지 첨부파일 위치를 구함
            $document_path = sprintf('./files/attach/images/%d/%d/',$this->get('module_srl'), $this->get('document_srl'));
            if(!is_dir($document_path)) FileHandler::makeDir($document_path);

            // 썸네일 임시 파일명을 구함
            $thumbnail_file = sprintf('%sthumbnail_%d.jpg', $document_path, $width);

            // 썸네일이 있더라도 글의 수정시간과 비교해서 다르면 다시 생성함
            if(file_exists($thumbnail_file)) {
                $file_created_time = date("YmdHis",filemtime($thumbnail_file));
                $modified_time = $this->get('last_update');
                if($modified_time > $file_created_time) @unlink($thumbnail_file);
            }

            if(file_exists($thumbnail_file)&&filesize($thumbnail_file)<1) return;

            // 썸네일 파일이 있으면 url return
            if(file_exists($thumbnail_file)) return Context::getRequestUri().$thumbnail_file;
           
            // 생성 시작
            FileHandler::writeFile($thumbnail_file, '', 'w');

            // 첨부파일이 있는지 확인하고 있으면 썸네일 만듬
            $oFile = &getModel('file');
            $file_list = $oFile->getFiles($this->document_srl);
            if(count($file_list)) {
                foreach($file_list as $file) {
                    if($file->direct_download!='Y') continue;
                    if(!eregi("(jpg|png|jpeg|gif)$",$file->source_filename)) continue;

                    $filename = $file->uploaded_filename;
                    if(!file_exists($filename)) continue;

                    FileHandler::createImageFile($filename, $thumbnail_file, $width, $height, 'jpg');
                    if(file_exists($thumbnail_file)) return Context::getRequestUri().$thumbnail_file;
                }
            }

            // 첨부파일이 없으면 내용에서 추출
            $content = $this->get('content');

            preg_match_all("!http:\/\/([^ ^\"^']*?)\.(jpg|png|gif|jpeg)!is", $content, $matches, PREG_SET_ORDER);
            for($i=0;$i<count($matches);$i++) {
                $src = $matches[$i][0];
                if(strpos($src,"/common/tpl")!==false || strpos($src,"/modules")!==false) continue;
                break;
            }

            $tmp_file = sprintf('%sthumbnail_%d.tmp.jpg', $document_path, $width);

            if($src) FileHandler::getRemoteFile($src, $tmp_file);
            else {
                FileHandler::writeFile($thumbnail_file,'');
                return;
            }

            FileHandler::createImageFile($tmp_file, $thumbnail_file, $width, $height, '+ '+ 'jpg');
            @unlink($tmp_file);

            return Context::getRequestUri().$thumbnail_file;
        }


현재는 getThumbnail 함수를 통해 썸네일을 추출할 경우 모두 정사각형으로만 추출이 되도록 되어 있습니다.

제로님이 왜 이렇게 고정하셨는지는 알 수 없습니다만 때에 따라 직사각형 모양의 썸네일 추출도 필요한

경우가 있어 고심하다가 소스를 수정해서 사용하는 방법을 찾게 되었습니다.


* 위 소스의 파일 위치 와 이름 : ..zbxe/modules/document/codument.item.php


위의 소스 가운데 반전된 부분만 추가 또는 수정하신 후에 스킨 소스중 아래의 부분을

형식 : {$document->getThumbnail(<원하시는 가로 사이즈>)}

예제 : {$document->getThumbnail(100)} => 가로 100에 세로 100 사이즈 썸네일이 생성됩니다.

아래와 같이 원하시는 사이즈로 지정 후 사용하시면 됩니다.

형식 : {$document->getThumbnail(<원하시는 가로 사이즈>,<원하시는 세로 사이즈>)}

예제 : {$document->getThumbnail(100,85)} => 가로 100에 세로 85 사이즈 썸네일이 생성됩니다.


필요하셨던 분들은 한번 써보시구요. 단, 버전업 되면 위의 소스가 덮어써져 버리므로 그때마다
다시 수정을 해줘야 하는 불편함이 있습니다. 이점 유의하세요. 혹시라도 수정 후 문제가 생기신다면
다시 원래의 소스로 본 파일만 원복하시면 됩니다~

적용해보시고 궁금한 점이나 안되는 부분있으면 덧글로 남겨주세요~ 도움이 되시길 바랍니다.

주의사항 : 기존의 getThumbnail 함수는 기본적으로 인수값을 한개만 받도록 되어 있습니다. 따라서 위의 소스를 수정하시게 되면 기존의 인수값을 하나만 지정했을때 세로 길이가 80픽셀로 잡히게 됩니다. 위의 소스에서 $height값이 지정되지 않을 경우 80으로 잡히도록 해두었기 때문입니다. 따라서 위의 소스수정 이후에는 함수 인자값을 가로, 세로 두가지를 넘겨주시도록 수정하시는 것이 좋습니다. 이점 꼭 참고하세요.  


제목 글쓴이 날짜
(게시판) 목록에 확장 변수를 출력하기 [18] file Simulz 2007.09.08
메인 페이지 링크 www. 주소 표시, 로그인 링크 문제.... [5] 마덴나 2007.09.08
메뉴와 연결된 xe의 page에 iframe을 사용해서 제로보드4 게시판을 불러들였습니다 [2] 바람처럼.. 2007.09.14
2차,3차 메뉴가 좌측으로 일렬로 되어있어 구분이 잘 안됩니다,이럴 때~ [7] file *제트* 2007.09.16
정사각형 썸네일은 안녕~ 직사각형 썸네일을 만들어보자 [8] 매니안 2007.09.19
새 공지창 띄우기 [22] *제트* 2007.09.20
(포인트 모듈) 추가 정보 출력 [8] file Simulz 2007.09.20
공지창 소스 [2] 열린 공간 2007.09.21
<수정>사이트 메신저 회원 연동해서 사용하기.... [3] 녀석참 2007.09.22
제로보드 XE 설치후에 제대로 작동 안하는 원인은... 독도2005 2007.09.22
(모듈 설정) 모듈 목록을 추가하여 설정을 쉽고 빠르게 #2, 2007-09-28 [3] file Simulz 2007.09.23
로고에 플래시파일 사용하기 [2] 팔공산 2007.09.26
회원가입 약관 관련. [2] rickey 2007.09.28
페이지에 설문 조사 넣기 [2] 지허 2007.10.01
iframe사용시 세로길이 자동 조정되게 하기 [7] file 팔공산 2007.10.04
xe 폴더를 어딘가로 이전했을 때 로그인이 안되는 경우... [2] preware 2007.10.05
(회원 정보) 작성 글 수, 댓글 수를 보여주기 (#4, 2007-10-13) [7] file Simulz 2007.10.06
댓글 등록시 하드에 있는 이미지를 쉽게 웹에 링크시키는 프로그램 [6] file 팔공산 2007.10.07
"회원 추가" 를 "회원 가입" 으로 .. [9] file 디키스 2007.10.12
상단에 로그인 회원가입 등 메뉴 넣기 (id/pw찾기 추가) [7] mireu 2007.10.16