이전에 썸네일러 애드온을 수정하면서 작성한 글입니다.

개인적으로 기록해 둔 것이라 반말체인 점 양해바랍니다.

 

해당 자료는 https://xe1.xpressengine.com/index.php?mid=download&package_id=22753532 여기서 받으실 수 있습니다.

 

 

 

 

개인적으로 사이트를 운영하고 있는데

 

내가 지정한 이미지를 기준으로 썸네일을 생성하고 싶어졌다.

 

원본이미지를 그대로 뿌리니 생각보다 사이트도 느려지고 트래픽도 좋지 않았기 때문.

(사실 방문자가 많지 않아 그닥 부담되진 않는다.)

 

그래서 document 모듈에 있는 getThumbnail() 함수를 보았다.

 

기본적으로 문서를 기준으로 호출하기 때문에 이걸 가지고서는 사용할 수 없는 것을 깨달은 나는

 

애드온으로 개발을 시작한다.

 

일단, 문서번호에 종속되던 부분을 날려버리고 주소 기준으로 될 수 있는 것들만 남겨둔다.

따라서 파일모듈에서 이미지를 찾는 부분은 필요가 없기 때문에 지운다.

 

아무튼 기본적인 함수가 완성되고 머리속에서는 분명 될거라 생각한 것이 실제로 되는지 확인한다.

 

그건 바로 내가 임의로 만든 함수를 스킨파일이나 xe 전반적으로 쓸 수 있는 지 확인하는 작업이다.

 

확인결과 문제 없이 잘되는 걸로 ..! 특별한 꼼수는 없었다.

 

그저 클래스를 선언해주고 그걸 xe 템플릿에서 사용할 수 있도록

 

Context::set() 을 이용해 저장해주는 것 뿐!

 

 

 

그리고 최근 버전업을 하면서 변경된 부분이 있는데,

 

대단한 부분이 바뀐 건 아니고...

 

기존에는 캐시폴더에 저장되어 캐시재생성시 생성된 모든 썸네일을 지울 수 있었다.

 

하지만, 그 썸네일이 많다면 불필요하고 지우고 재생성하는 일이 발생하는 것..!

 

또, XE 사용자라면 알겠지만 캐시 재생성을 해야하는 경우가 의외로 많이 발생한다.(XE코어업뎃이라던지..)

 

따라서 이를 분리하는 작업을 진행했다.

 

분리 자체는 간단하기 때문에 사실 언급할 필요조차 없다.

 

하지만 캐시재생성처럼 쉽게 생성된 썸네일을 지우는 옵션을 제공해줘야 한다는 생각이 있었기 때문에.

 

이 부분이 어쩌면 업데이트의 핵심이다.

 

 

가장 좋은 방법은 애드온 설정화면에서 초기화 버튼을 삽입하는 것..!

 

하지만 내가 알기론 버튼 타입을 제공하지 않을 뿐더러 그 버튼을 클릭 액션을 설정할 수 없는 걸로 알고 있다..

(아니라면 엄청난 뻘짓은 한거다.)

 

그렇지만 이전 애드온링커라는 애드온을 개발하면서 관리자화면 또한 애드온으로 컨트롤이 가능하다는 사실을 알고 있었기에,

 

아주 간단하지만 꼼수를 부려보기로 한다.

 

그건 바로 사실상 쓸 필요 없는 사용자 정의를 삽입한 후 그걸 애드온에서 캐치해서 button으로 변환시키는 것.

 

여기엔 그냥 패턴 볼 거 없이 str_replace()를 사용하였다.

 

그리고 실제 버튼을 클릭할 시 삭제 작업을 진행할 페이지는

 

뒤에 파라메터로 thuxdelete 값을 'true' 던져 주어

 

그것을 모듈이 실행되기 전에 체크하고 true가 맞다면

 

폴더 삭제 함수를 실행하도록 하였다.

 

폴더 삭제 함수는 인터넷 검색 신공을 하여 아래와 같은 코드가 사용되었다.

 

function removeAllData($URL)
{
    if(is_dir($URL))
    {
         
        if($dh = opendir($URL))
        {
            while(($file = readdir($dh)) !== false)
            {
                if($file == '.' || $file == "..") continue;
                if(filetype( $URL.$file ) == "dir") $this->removeAllData( $URL.$file.'/' );
                else @unlink( $URL.$file ); // 파일 삭제 
            }
            @rmdir( $URL );// 폴더 삭제 
            closedir( $dh );
        }
    }
}

 

아무튼 테스트 해보니 아무런 문제 없이 잘된다.

 

하지만 보안(?)측면과 의도치않는 중복 실행을 방지하기 위해(새로고침등)

 

약간의 코드를 곁들인다.

 

회원가입일과 최근접속일을 md5로 세션으로 저장하여 인증키를 생성하고,

 

그리고 thuxdelete=ture와 thuxDeletekey=인증키번호를 함께 넘겨준다.

 

그럼 삭제를 진행하는 부분에서

 

먼저 thuxdelete가 'true'인지 체크를 하고

관리자인지 확인한 후 파라메터로 받은 thuxDeletekey 와 세션에 저장된 키 값이 동일한지 체크한다.

 

이 모든 것이 문제가 없다면 위의 입력한 썸네일 폴더를 일괄삭제하는 작업을 진행한다.

 

작업이 진행되면, 세션에 할당한 인증키는 삭제한다. 이로써 새로고침을 해도 중복 삭제가 실행되지 않게 된다.

 

모든 작업이 완료되었다만 삭제 완료 메시지와 함께 thuxdelete와 thuxDeletekey 파라메터를 지운 후 페이지를 갱신한다.

 

 

아무튼 개인적으로는 애드온 설정 페이지에 아쉬움이 있었는데 그것조차도 애드온으로 컨트롤이 되니

 

신기방기하다. 나 자신이 레벨 업한 기분이랄까..?

 

이상으로 썸네일러 애드온 개발 일지를 마친다.

하늘희

profile
てててててて