게시판명 > 분류명 일 경우 분류 당 게시 글 갯수 제한 방법 문의 드립니다. 채택완료

안녕하세요..고수님들

 

게시판을 생성해서 등록할 수 있는 갯수를 제한하느라고 write.skin.php에 아래와 같은 코드로 사용 중인데요.

Copy
if ($w != 'u'){
  if($board['bo_count_write'] >=3 ) {
  alert('본 게시판은 3개까지만 등록할 수 있습니다.');
  }
}

 

이 것을 게시판이 아닌 분류(ca_name) 별로 제한 하려고 합니다. 위의 코드 대신 어떻게 만들어야 하는지 도움 주시면 고맙겠습니다.

답변 3개

채택된 답변
+20 포인트

extend/user.config.php

Copy
function hook_write_update_before($board, $wr_id, $w, $qstr) {
    global $g5, $ca_name;

 

    if(empty($w) == false || $board['bo_use_category'] != '1') {
        return true;
    }

 

    $cnt = 3;

 

    $tbl = $g5['write_prefix'] . $board['bo_table'];
    $sql = " select count(1) cnt from ${tbl} where wr_is_comment = 0 and ca_name = '{$ca_name}' ";
    $data = sql_fetch($sql);

 

    if ($data['cnt'] >= $cnt) {
        alert('Request Unavailable (limit count reached: ' . $cnt . ')');

        return false;
    }

 

    return true;
}

 

add_event('write_update_before', 'hook_write_update_before', 10, 4);
로그인 후 평가할 수 있습니다

답변에 대한 댓글 5개

늦은 밤에 감사합니다.
상기처럼 적용할 경우 해당 테이블 명은 어디에 넣어야 하는지요?? 너무 몰라 미안한 질문을 하게 됩니다.
테이블 명은 동작시점의 환경에 맞춰 자동으로 인식됩니다.
사이트에 게시판이 여러 개인데요.. 특정한 게시판만 제어를 하려고 합니다.
말씀하신 extend에 적용하면 모든 게시판에 영향을 주는 것은 아닌지요?? 한 개의 게시판만 특정하여 적용하려 해도 위에 코드로 되는 것인지 궁금합니다..
모든 게시판에 영향을 주는것이 맞고
free (g5_write_free) 인 경우만 허용하려면 다음처럼 수정해볼수 있습니다.
[code]
if(empty($w) == false || $board['bo_use_category'] != '1' || $board['bo_table'] != 'free') {
return true;
}
[/code]
늦은 시간까지 친절하게 답해주셔서 너무 고맙습니다.
적용해 보고 의문점이 생기면 댓글 남겨 놓겠습니다.^^

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

분류리스트에서 3회 이상인 분류를 제거하고 남은 분류만 선택 가능 하게 하면 됩니다

 

1. write.skin.php 상단 php부분에 넣기

$caStr = $board['bo_category_list'];
$qq =sql_query("SELECT ca_name, count(*) as cnt FROM $write_table group by ca_name", true);
while($row=sql_fetch_array($qq) ){    
  if($row['cnt'] >=3) $caStr = str_replace($row['ca_name'],'', $caStr);  //3회 이상은 제거   
}

 

2. 하단 자바스크립트 부분에 넣기

 

castr="<?php echo $caStr;?>";
$(function(){
        $('#ca_name').change( function(){ caname = $(this).val();       
        if( castr.indexOf(caname) <0) {alert("등록 횟수를 초과한 분류"); $(this).val(''); }
     });
});

 

 

로그인 후 평가할 수 있습니다

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

Copy
if($ca_name) {

    $sql = "SELECT count(*) as cnt FROM {$write_table} where ca_name='$ca_name' ";

    $result = sql_query($sql);

    while($row = sql_fetch_array($result)) {

        if($row['cnt'] >= 3) {

            alert($ca_name.'분류는 3개까지만 등록할 수 있습니다.');

        }

    }

}
로그인 후 평가할 수 있습니다

답변에 대한 댓글 8개

늦은 밤에 감사합니다.
알려 주신 코드가 각각의 분류 별로 3개 까지만 등록이 가능한 것을 의미하는 것인가요?

예를 들면 free라는 게시판에 자유/행복/기쁨 이라는 3개의 분류를 사용한다면 글 쓸 때 자유라는 카테고리에 3 개까지만 글을 등록할 수 있고 마찬가지로 행복이라는 카테고리에도 4번째 글을 등록할 수 없게 하는 것인지요??
넵.. 맞습니다.
각 분류별 3개까지만 등록.
안녕하세요.
오늘 출근해서 적용해 보니 글쓰기는 제한없이 계속 되었고 게시글을 수정하려고 하니
'분류는 3개까지만 등록할 수 있습니다.' 라는 메세지가 뜨고 수정도 안 되는 상황이 되네요.
어디가 문제였을까요??

감사합니다.
write_update.head.skin.php 파일을 생성해서
아래 소스를 추가한 후 업로드 해보세요.

if($w == '' && $ca_name) {
$sql = "SELECT count(*) as cnt FROM {$write_table} where ca_name='$ca_name' ";
$result = sql_query($sql);
while($row = sql_fetch_array($result)) {
if($row['cnt'] >= 3) {
alert($ca_name.'분류는 3개까지만 등록할 수 있습니다.');
}
}
}
신경 써주셔서 너무 감사합니다.
추가로 업로드 하니 원하는 결과를 얻었습니다. 다만, 앞에 말씀드린 것처럼 수정이 안 되고
'분류는 3개까지만 등록할 수 있습니다.' 라는 경고 문구만 나옵니다..
게시 글이 2개 일 때는 수정이 가능하네요..
$w == '' 이 조건이 새글쓰기 일때만 체크하는 건데요??
평소 여러 사람에게 도움 주시는 거 잘 알고.. 감사하게 생각하고 있습니다.
말씀하신 위에 내용은 이해는 하는데요.. 수정이라는 것이 새 글을 쓴다는 의미로 판독이 되는 것은 아닐까요??
무지해서 무식한 말 해 봅니다..ㅎ
다시 적용해 보니 잘 됩니다.
다른 코드들이 남아있어서 영향을 준 것으로 보입니다. 번거롭게 해드려 죄송합니다...
그리고 감사합니다..

처음 알려주신 코드도 삭제하고

write_update.head.skin.php 파일을 생성해서
아래 소스를 추가한 후 업로드 해보세요.

if($w == '' && $ca_name) {
$sql = "SELECT count(*) as cnt FROM {$write_table} where ca_name='$ca_name' ";
$result = sql_query($sql);
while($row = sql_fetch_array($result)) {
if($row['cnt'] >= 3) {
alert($ca_name.'분류는 3개까지만 등록할 수 있습니다.');
}
}
}

이 것만 적용하니 제대로 됩니다.

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

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고