게시판 관리자에게만 게시판 노출하기 채택완료
한 게시판에 여러명의 관리자를 두기 위해 common.lib.php 에 아래와 같은 소스를 추가했습니다.
</p>
<p>$board_admin = explode(",",$board['bo_admin']);
foreach($board_admin as $admin_id){
if ($admin_id == $mb_id){
$board['bo_admin'] = $admin_id;
return 'board';
}
}</p>
<p>
그런데 게시판 목록을 불러올 때 관리자가 여러명 지정된 게시판은 불러오지 못하네요ㅠ
테스트게시판-관리자 test1, test2 이렇게 지정한 경우는
test1아이디로 접속 시 보이지 않고 test2로 접속 시에도 보이지 않습니다. (최고관리자로 접속할 땐 다 잘 보입니다.)
for문에서 continue 조건을 변경하면 될 것 같은데.. 잘 안되네요.. ㅠ
현재는 아래처럼 설정되어 있습니다.
</p>
<p>
<!-- 최신글 시작 { -->
<?php
// 최신글
$sql = " select *
from `{$g5['board_table']}` a left join `{$g5['group_table']}` b on (a.gr_id=b.gr_id)
where a.bo_device <> 'mobile' ";</p>
<p>if(!$is_admin)
$sql .= " and a.bo_use_cert = '' ";
$sql .= " order by b.gr_order, a.bo_order ";
$result = sql_query($sql);// 반복문 - 게시글을 반복해서 불러와라
for ($i=0; $row=sql_fetch_array($result); $i++) {
if ($i%2==1) $lt_style = "margin-left:20px"; // nth-child(2n+1) 과 동일한 계산
else $lt_style = "";
if ($row['bo_list_level'] > $member['mb_level']) // 회원 레벨보다 게시판 레벨이 높으면 보여주지 마!
continue; //조건이 맞지 않는 행은 continue를 사용하여 배열에 넣는것을 막는 경우
if ((!$row['bo_admin'] || ($row['bo_admin'] && $row['bo_admin'] != $member['mb_id'])) && $is_admin != 'super')
//게시판 관리자 값이 비어있거나 || 게시판 관리자인데 게시판 관리자가 지정한 회원이 아닌 경우 + 최고관리자가 아닐경우
// ! = not,
// $a != $b 변수a값과 변수b값이 같지 않으면 true (두 변수의 값을 비교할 때 쓰입니다)
// !$a 변수a값이 없거나 flase값을 갖거나 값이 0이거나 하면 true (하나의 변수 값을 조사할 때 쓰입니다)
continue;
?>
<div class="index_item">
<a class="main-board" href="<?php echo G5_BBS_URL ?>/board.php?bo_table=<?php echo $row['bo_table']; ?>">
<?php
// 이 함수가 바로 최신글을 추출하는 역할을 합니다.
// 사용방법 : latest(스킨, 게시판아이디, 출력라인, 글자수);
// 테마의 스킨을 사용하려면 theme/basic 과 같이 지정
//echo latest('theme/basic', $row['bo_table'], 5, 25);
echo $row['bo_subject'];
?>
</a>
</div>
<?php
}
?>
<!-- } 최신글 끝 --></p>
<p>
if ((!$row['bo_admin'] || ($row['bo_admin'] && $row['bo_admin'] != $member['mb_id'])) && $is_admin != 'super')
이 부분을 바꿔야 할 것 같은데.. 아무리 바꿔봐도 모르겠어요ㅠㅠ 도와주세요..
답변 2개
조건이 잘못된 것 같습니다.
$row['bo_admin'] 이건 어디서 오는건지 모르지만
일단 게시판관리에 넣었던 관리자는 여러명이므로 $row['bo_admin']은 누구인지 모를 가능성이 있습니다.
검색을 하려면 strstr()로 검색해야 하지 않을까요?
현재 로그인한 사람이 관리자인지 보려면
$is_admin == 'board' 라고 해야 게시판 관리자로 넣은 사람이 맞는지가 확인 될 것 같습니다.
해당 아이디로 로그인한 페이지 상단에서
echo $is_admin을 찍어보시면 관리자 지정된 사람은 board가 떠야 하니까요.
그리고 관리자 검사는
</p>
<p>$board_admin = explode(",",$board['bo_admin']);
if(in_array($mb_id, $board_admin)) {
return 'board';
}</p>
<p>
이렇게 하시면 간단하겠네요.
답변에 대한 댓글 3개
즉
test test3 test4 test5 tester
모두다 test라고 검색하면 걸리는 겁니다.
차라리 이부분을
$categoryName = $row['bo_admin'];
$searchName = $member['mb_id'];
$searchadmin = strpos($categoryName, $searchName) !== false;
$categoryName = explode(',', $row['bo_admin']);
$searchName = $member['mb_id'];
$searchadmin = in_array($searchName, $categoryName, true);
이러한 형태로 수정을 해보십시오.
말씀하신대로 적용했더니 제가 원하는대로 정말 잘 구동됩니다.
정말 감사합니다 (_ _)
댓글을 작성하려면 로그인이 필요합니다.
답변에 대한 댓글 1개
function is_admin($mb_id)
{
global $config, $group, $board;
if (!$mb_id) return;
if ($config['cf_admin'] == $mb_id) return 'super';
if (isset($group['gr_admin']) && ($group['gr_admin'] == $mb_id)) return 'group';
$board_admin = explode(",",$board['bo_admin']);
foreach($board_admin as $admin_id){
if ($admin_id == $mb_id){
$board['bo_admin'] = $admin_id;
return 'board';
}
}
return '';
}
[/code]
말씀하신 common.lib.php is_admin() 부분은 위와 같이 추가 한 상태입니다.ㅠㅠ
그런데 index.php 부분에 for 반복문 아래 조건을 달려니
if ((!$row['bo_admin'] || ($row['bo_admin'] && $row['bo_admin'] != $member['mb_id'])) && $is_admin != 'super')
위와 같이 되어 있는데
$is_admin != 'board'로 지정하면 아무것도 안뜨네용..ㅠ
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
답변주신 내용에서 힌트를 얻어 일단은 해 내긴 했는데요..
다른 문제가 생겼습니다.
for문 안쪽으로 아래와 같은 변수를 정의 한 후 if 문을 사용했습니다
말씀주신대로 관리자로 지정된 id값과 현재 로그인 아이디값을 비교하면 되는건데
test3 안에 test 라는 아이디가 포함될경우도 그대로 노출되버리네요... 이걸 우째ㅠㅠㅠ
[code]
global $board, $member, $is_admin;
// 반복문 - 게시글을 반복해서 불러와라
for ($i=0; $row=sql_fetch_array($result); $i++) {
$categoryName = $row['bo_admin'];
$searchName = $member['mb_id'];
$searchadmin = strpos($categoryName, $searchName) !== false;
if ($i%2==1) $lt_style = "margin-left:20px";
else $lt_style = "";
if ($row['bo_list_level'] > $member['mb_level'])
continue; //조건이 맞지 않는 행은 continue를 사용하여 배열에 넣는것을 막는 경우
if ((!$row['bo_admin'] || $searchadmin != true ) && $is_admin != 'super')
continue;
?>
<div class="index_item">
<a class="main-board" href="<?php echo G5_BBS_URL ?>/board.php?bo_table=<?php echo $row['bo_table']; ?>">
<?php
// 이 함수가 바로 최신글을 추출하는 역할을 합니다.
// 사용방법 : latest(스킨, 게시판아이디, 출력라인, 글자수);
// 테마의 스킨을 사용하려면 theme/basic 과 같이 지정
//echo latest('theme/basic', $row['bo_table'], 5, 25);
echo $row['bo_subject'];
?>
</a>
</div>
<?php
}
?>
[/code]