본문 바로가기
셈틀 Com/제로보드

공지내용 자르기

by 길목 2003. 11. 19.
일반적으로 lib.php 파일속에서 마지막부분에 문자열 끊기 함수가 나옵니다.
근데 그건 주로 제목을 자르죠.. 즉, 원하는 글수 이상이면 " ... " 으로 나타내주죠.
제목을 자를때는 적합한데.. 저처럼 공지사항 또는 팁 내용의 일부를 보여주고자 할때
글을 300자쯤에서 끊고 싶은데 300자에서 짤리고는 "..." 이라고 나타나면
좀 썰렁하다고 해야할까.. 그렇더라구요.. 그래서 " ... line more (total 몇 lines) 이렇게
나타내봤습니다. 뭐.. 이 기능이 필요한 분은 그리 많지는 않을듯 싶습니다.

우선 lib.php 파일을 연후 거의 마지막 부분에 보시면

// 문자열 끊기 (이상의 길이일때는 ... 로 표시)

이런 주석을 발견하실수 있을겁니다.
그러면 문자열 끊기 함수 밑에 또 하나의 문자열 끊기 함수를 더 만들어주세요.
내용은 다음과 같습니다.

// 내용 끊기 (이상의 길이일때 ... line more (total 몇 lines)라고 나타내기

function cut_str2($msg,$cut_size) {
       if($cut_size<=0) return $msg;
       if(ereg("\[re\]",$msg)) $cut_size=$cut_size+4;
       for($i=0;$i<$cut_size;$i++) if(ord($msg[$i])>127) $han++; else $eng++;
       $cut_size=$cut_size+(int)$han*0.6;
       $tmpData = explode("\n",stripslashes($msg));
       $totalCommentLineNum = count($tmpData);
       $point=1;
       for ($i=0;$i<strlen($msg);$i++) {
       if ($point>$cut_size) return $pointtmp." ... lines more (total : $totalCommentLineNum lines)";
       if (ord($msg[$i])<=127) {
       $pointtmp.= $msg[$i];
       if ($point%$cut_size==0) return $pointtmp." ... lines more (total : $totalCommentLineNum lines)";
       } else {
       if ($point%$cut_size==0) return $pointtmp." ... lines more (total : $totalCommentLineNum lines)";
       $pointtmp.=$msg[$i].$msg[++$i];
       $point++;
       }
       $point++;
     }
  return $pointtmp;
}

이렇게 해주시면 일단 함수는 만들어졌습니다.
반드시 함수를 만들때 cut_str2라고 해주세요.
앞에서 문자열 끊기 cut_str 라는 함수가 이미 있기때문에 같은 함수를 사용해선 안됩니다.
이렇게 한다음에 이걸 응용하는 방법은 여러가지가 있겠지만..
최근게시물에서 주로 사용할거라고 생각하기에 outlogin.php 파일에서 설정하는 법을
보도록 하죠.

보통 제목을 자를때는 $subject = cut_str(stripslashes($data[subject]),$textlen) 이렇게 사용하죠.
내용도 비슷합니다.

$memo = cut_str2(nl2br($memo), 300);

이렇게 넣어주시면 됩니다. 뒤에 300이라는 숫자는 300자 까지만 보여주고 나머지는
자르겠다는 표시구요.. stripslashes가 아닌 nl2br 을 사용한건.. 사용하시는 분들에 따라서
다 틀리겠지만.. 저는 이렇게 하는게 보기 좋더라구요.

stripslashes 는 슬러쉬 제거하는거고.. nl2br은 글내용 작성시 엔터치는 부분을 <br> 태그로
바꿔주게 하는거죠. 그래서 저는 nl2br 함수를 사용했습니다.

원래는 // 공지사항 형식을 만들때 사용 이란 주석 바로 밑에 보면

if($data[use_html]<2) $memo = nl2br($memo);
else $memo = strip_tags($memo);

이렇게 되어있습니다. 근데 저는 이걸 그냥
$memo = stripslashes($data[memo]); 이렇게 바꿨습니다.
그리고 밑에 $subject = cut_str(stripslashes($data[subject]),$textlen)."</font></b>"; 이부분 밑에
$memo = cut_str2(nl2br($memo), 300); 라고 붙여주는거죠.

그러면 밑에 [notice_memo] 약속어 설정하면서 자동으로 내용을 잘라주죠.

이렇게 하시면 공지글을.. 전부 출력이 되는게 아니라 원하는 만큼 자른후
나머지 부분은 line more.. 이렇게 나오게 됩니다.

이상입니다.. ^^









more보여주기  ////////////////////////////////////////////////////////////////////////////////////

more...  를 글 끝에 보여주고 해당글이 있는 게시판내용보기로 이동하는 소스는
outlogin.php파일보면 240줄(원본일경우-물론 위소스를 적용한 다음이면 밀려서 달라지겠지만...)
$header = str_replace("[notice_memo]",$memo,$header);  를 수정하면 됩니다....

아래처럼...

$header = str_replace("[notice_memo]",$memo." <a href='".$_zb_url.$target."&no=$data[no]' onfocus=blur()><font color=red><b>MORE...</b></font></a>",$header);

고치시면 됩니다...

MORE...   라는 글이 RED의 칼라와 굵은 글씨체로 표시가 됩니다...
원하시는 글과 표시형식을 적용하면 되겠죠....


*참고로 내용자르기 소스를 적용시킬때... lib.php파일에 적용하는 소스중
... lines more (total : $totalCommentLineNum lines)   부분은 남은 모두의 라인수를 보여주는 건데...
삭제한다면 " more..." 라는 부분만 나타나겠죠...(제가 그리 쓰고 있슴다...)

댓글