테스트 사이트 - 개발 중인 베타 버전입니다

게시판 카테고리 중복 체크 가능하게 하기

· 5년 전 · 7313 · 14

기존에 팁에 올라왔던게 있었는데

리스트에서는 어떻게 처리할지 고민하다가 제가 해결한 방법 올립니다.

 

ca_name 방식으로 불러오는것이 아닌 sca로 불러오도록 하였습니다.

 

991938377_1574728917.7518.jpg

 

 

1. 해당 게시판 스킨의 write.skin.php 파일 카테고리 부분을 아래와 같이 변경

[code]
<tr>

<th>카테고리</th>
<td>

<?php
    $arr = explode("|",$board['bo_category_list']);
    foreach($arr as $str) { ?>
        <input type="checkbox" name="chk_ca_name[]" value="<?php echo $str; ?>"> <?php echo $str; ?>
    <?php } ?>
      <script>
        var f = document.fwrite;
        var str=",<?php echo $write[ca_name]?>,";
        for (var i=0; i<f.length; i++) {
            if (f.elements[i].name == "chk_ca_name[]") {
                if (str.indexOf(','+f.elements[i].value+',')>=0) {
                    f.elements[i].checked = true;
                }
            }
        }
    </script>
</td>
</tr>

[/code]

 

 

2. write_update.head.skin.php 파일 생성

[code]
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

$ca_name='';

foreach($_POST[chk_ca_name] as $var) {

 $ca_name.=",$var";

}

if (strlen($ca_name)) $ca_name=substr($ca_name,1);

?>

[/code]

 

 

3. bbs/list.php에서 아래부분(11번째줄쯤)을

[code]
    if ($sca=='')

        $category_option .= ' id="bo_cate_on"'; 
[/code]

 

아래와 같이 변경 (&& stx==''추가)

[code]
    if ($sca=='' && $stx=='') 

        $category_option .= ' id="bo_cate_on"';

[/code]

 

 

 

4. bbs/list.php에서 아래부분(17~27번째줄쯤)을

[code]
for ($i=0; $i<count($categories); $i++) {

            $category = trim($categories[$i]);
            if ($category=='') continue;
            $category_option .= '<li><a href="'.($category_href."&amp;sca=".urlencode($category)).'"';
            $category_msg = '';
            if ($category==$sca) { // 현재 선택된 카테고리라면
                $category_option .= ' id="bo_cate_on"';
                $category_msg = '<span class="sound_only">열린 분류 </span>';
            }
            $category_option .= '>'.$category_msg.$category.'</a></li>';
        }
[/code]

 

아래 소스로 교체해주세요. 

[code]
 if ($bo_table == "게시판아이디") {


        for ($i=0; $i<count($categories); $i++) {
                $category = trim($categories[$i]);
                if ($category=='') continue;
                $category_option .= '<li><a href="'.($category_href."&amp;sfl=ca_name%2C1&amp;&stx=".urlencode($category)).'&amp;sop=or"'; 
                $category_msg = '';
                if ($category==$stx) {
                    $category_option .= ' id="bo_cate_on"';
                    $category_msg = '<span class="sound_only">열린 분류</span>';
                }
                $category_option .= '>'.$category_msg.$category.'</a></li>';
        }
      } else {
          /* original */
          for ($i=0; $i<count($categories); $i++) {
            $category = trim($categories[$i]);
            if ($category=='') continue;
            $category_option .= '<li><a href="'.($category_href."&amp;sca=".urlencode($category)).'"';
            $category_msg = '';
            if ($category==$sca) { // 현재 선택된 카테고리라면
                $category_option .= ' id="bo_cate_on"';
                $category_msg = '<span class="sound_only">열린 분류 </span>';
            }
            $category_option .= '>'.$category_msg.$category.'</a></li>';
        }
           /* original */
      }
[/code]

 

 

 

5. bbs/write_update.php 에서

if($board['bo_use_category']) { } 위아래를 if ($bo_table !== "게시판아이디") { }로 감싸주세요.

 

[code]

if ($bo_table !== "게시판아이디") {  //추가

 

        /* original */

        if($board['bo_use_category']) {
       
            $ca_name = trim($_POST['ca_name']);
            if(!$ca_name) {
                $msg[] = '<strong>분류</strong>를 선택하세요.';
            } else {
                $categories = array_map('trim', explode("|", $board['bo_category_list'].($is_admin ? '|공지' : '')));
                if(!empty($categories) && !in_array($ca_name, $categories))
                    $msg[] = '분류를 올바르게 입력하세요.';
       
                if(empty($categories))
                    $ca_name = '';
            }
       
        } else {
            $ca_name = '';
       
        }
       /* original */
   
}  //추가


[/code]

 

해당게시판에서만 분류 선택을 안하더라도 경고창 안뜨게 했습니다.

체크박스로 바꾸니 값이 없는것처럼 받아들여서 일단은 해당 스킨에서는 분류가 필수값이 아니도록 설정했는데 일반 회원들이 글을 쓰게 하는 게시판의 경우에는 조금 더 손을 보셔야할것 같습니다.

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 14개

5년 전
유용한 정보네요 공개해 주셔서 감사합니다.
5년 전
평소에 많이 궁금했는데 .
너무 감사합니다~~
한번 적용해서 사용해보겠습니다~~^^*
유용한 정보 감사합니다.
사전스킨 만들려고 적용시켜봤는데 잘 작동되네요.
정보 감사합니다. ^^
4년 전
검색까지 생각하면
lib/common.lib.php도 수정해야 합니다.
// 검색 구문을 얻는다.
function get_sql_search($search_ca_name, $search_field, $search_text, $search_operator='and')
{
global $g5;

$str = "";
if ($search_ca_name)
$str = " ca_name like '%{$search_ca_name}%' ";

완전한 방법은 아닙니다.
2개 이상의 카테고리 지정 방식은 set이나 bit 방식으로 하는 것을 추천합니다.
와우 찾고 있던 건데 너무 감사해요 ㅠㅠ!!!
3년 전
다중 분류선택 카테고리
2년 전
lib/common.lib.php에서

// 검색 구문을 얻는다.
function get_sql_search($search_ca_name, $search_field, $search_text, $search_operator='and')
{
global $g5;
global $bo_table;

$str = "";
if ($search_ca_name)
$str = " ca_name = '$search_ca_name' ";

if($search_ca_name && $bo_table == 'gallery') // bo_table 값에 쓰실 게시판주소bo_table값작성
{
$str = " ca_name LIKE '%$search_ca_name%' ";
}
1년 전

다 했고 글쓰기 까지 되고, 글 보기까지 잘 되는데요 카테고리를 누르면 

Not Found

The requested URL /loan_area&sfl=ca_name,1&&stx=인천&sop=or was not found on this server. 이 오류가 뜹니다 

1년 전

@그누초보다 저도 그 에러 났는데요. 원인은 설정화면에서 URL 줄이기 체크하셔서 그럽니다. 해제 하시면 잘 될거에요^^

게시글 목록

번호 제목
24318
24317
24315
24309
24294
24293
24277
24262
24260
24253
24251
24236
24233
24228
24226
24221
24214
24203
24201
24199
24196
24195
24194
24192
24191
24187
24185
24183
24172
24168