웹마스터 팁

개요 : 기존의 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으로 잡히도록 해두었기 때문입니다. 따라서 위의 소스수정 이후에는 함수 인자값을 가로, 세로 두가지를 넘겨주시도록 수정하시는 것이 좋습니다. 이점 꼭 참고하세요.  


제목 글쓴이 날짜
MRTG에서 네트워크및 CPU, 메모리점유율을 기록하기 ひりゅう. 2014.07.05
XE 알림센터 Lite 사용시에 쪽지나 호출에 대해서만 알림음을 적용하기 [17] SeungXE 2014.07.06
외부 페이지에서 회원 extra_vars 변수 가져오기 [1] Happyphp 2014.07.09
편리한 안드로이드 크로스 브라우징 테스트 Tip - 안드로이드 가상화 file AJKJ 2014.07.09
lang.xml 파일 다이어트 자동화 [5] file 산하2 2014.07.09
SocialXE 관련 사용팁 적용 수정 파일 [3] file 휘즈 2014.07.13
댓글등록에 단축키 사용하기 ひりゅう. 2014.07.15
모바일(또는 textarea형)에서 댓글 수정시 줄바꿈 유지되도록 수정 [2] sejin7940 2014.07.17
게시판 글 엑셀로 출력하기(확장변수 포함) [15] 한이73 2014.07.17
회원 비밀번호 수정시 자동으로 로그아웃 되게 하는 방법 [4] sejin7940 2014.07.18
Windows10 에서 IIS + mysql + PHP 설치 [10] file HSJI 2014.07.21
간단하게 외부 SMTP 로 인증메일 보내기. [1] file AJKJ 2014.07.22
php로 간단하게 신규쪽지(읽지않은쪽지) 표시해주기 [2] 졸라맨 2014.07.23
빈공간 더블 클릭시 상하 이동 스크립트 socialskyo 2014.07.23
[초보팁] .htaccess 파일을 이용하여 여러가지 주소 한 주소로 리다이렉트 하기 ( 주소 통합 ) [5] 태풍_님 2014.07.23
아이디 첫글자에 숫자 허용 [2] wooildang 2014.07.24
xe module, sample 생성기 [9] 천재ㅐ재 2014.07.24
CURL 등 리퀘스트가 느리다고 생각될때 [1] 銀童 2014.07.25
게시판 데이터 일괄 삽입 방법 [1] Happyphp 2014.07.26
/XE/떼어 내기 방법... 꿈섬 2014.07.27