하나의 게시판에서 내가 작성한 글만 목록에 뜨게하기
본문
1:1문의 게시판과 같은개념인데 어떻게 적용해야 할 지 모르겠네요
관리자는 모든 게시글목록을 볼 수 있고 사용자는 자기가 올린 게시물만 뜨게끔 하려면
해당 게시판 스킨의 list.skin.php 파일을 수정해야 하나요?
소스 한번 올려봅니다! 도와주세요
<?php
// 선택옵션으로 인해 셀합치기가 가변적으로 변함
$colspan = 5;
if ($is_checkbox) $colspan++;
if ($is_good) $colspan++;
if ($is_nogood) $colspan++;
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);
?>
<!-- 게시판 목록 시작 { -->
<div id="bo_list" style="width:<?php echo $width; ?>">
<!-- 게시판 카테고리 시작 { -->
<?php if ($is_category) { ?>
<nav id="bo_cate">
<h2><?php echo $board['bo_subject'] ?> 카테고리</h2>
<ul id="bo_cate_ul">
<?php echo $category_option ?>
</ul>
</nav>
<?php } ?>
<!-- } 게시판 카테고리 끝 -->
<form name="fboardlist" id="fboardlist" action="./board_list_update.php" onsubmit="return fboardlist_submit(this);" method="post">
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
<input type="hidden" name="stx" value="<?php echo $stx ?>">
<input type="hidden" name="spt" value="<?php echo $spt ?>">
<input type="hidden" name="sca" value="<?php echo $sca ?>">
<input type="hidden" name="page" value="<?php echo $page ?>">
<input type="hidden" name="sw" value="">
<div class="tbl_head01 tbl_wrap">
<table>
<caption><?php echo $board['bo_subject'] ?> LIST</caption>
<thead>
<tr>
<?php //제목이 없고 출력 순서가 있는 경우
if($board['bo_16_subj'] != "") {
$board['bo_16_subj'] = preg_replace("/\s+/", "", $board['bo_16_subj']);
$field_display = explode("|", $board['bo_16_subj']);
for($j = 0; $j < count($field_display); $j++) {
if($field_display[$j] != "이름" && $field_display[$j] != "날짜" ) { // 숫자
$bo_field = $field_display[$j] + 10;
$field_value_exp = explode("#!", $board['bo_'.$bo_field]); //순서 숫자에 해당하는 제목 추출
?>
<th scope="col" style="text-align:center;width:<?php echo $field_value_exp[7] ?>px;"><?php echo $field_value_exp[0] ?></th>
<?php }
if($field_display[$j] == "이름") { // ?>
<th class="td_name">AG</th>
<?php }
if($field_display[$j] == "날짜") { // ?>
<th class="td_date">DATE</th>
<?php } ?>
<?php } ?>
<?php } ?>
<?php //모두 출력
if($board['bo_17_subj'] == "" && $board['bo_16_subj'] == "") {
for($j = 11; $j <= $board['bo_29_subj'] + 10; $j++) {
$field_value_exp = explode("#!", $board['bo_'.$j]);
//echo $board['bo_'.$j];
if($board['bo_'.$j] != "") { // 여분 필드만큼 출력?>
<th class="td_form" style="width:<?php echo $field_value_exp[7] ?>px;"><?php echo $field_value_exp[0] ?></th>
<?php } ?>
<?php } ?>
<th class="td_form">AG</th>
<th class="td_form">DATE</th>
<?php } ?>
</tr>
</thead>
<tbody>
<?php
for ($i=0; $i<count($list); $i++) {
?>
<tr class="<?php if ($list[$i]['is_notice']) echo "bo_notice"; ?>">
<? if($board['bo_17_subj'] != "") { ?>
<td class="td_form"> <a href="<?php echo $list[$i]['href'] ?>"><?php echo $board['bo_17_subj'] ?> </a></td>
<td class="td_name"> <?php echo $list[$i]['name'] ?></td>
<td class="td_date"><?php echo $list[$i]['datetime2'] ?></td>
<?php } ?>
<?php //제목이 없고 출력 순서가 있는 경우
if($board['bo_17_subj'] == "" && $board['bo_16_subj'] != "") {
$board['bo_16_subj'] = preg_replace("/\s+/", "", $board['bo_16_subj']);
$field_value = $board["bo_".$j];
$field_value_exp = explode("#!", $field_value);
$field_display = explode("|", $board['bo_16_subj']);
if($field_value_exp[8] != " ") $unit = $field_value_exp[8];
for($j = 0; $j < count($field_display); $j++) {
$bo_field = $field_display[$j] + 10;
if($field_display[$j] != "이름" && $field_display[$j] != "날짜" ) { // 숫자 ?>
<td class="td_form"><? $m = $bo_field; if($j == 0) { ?> <a href="<?php echo $list[$i]['href'] ?>"> <? } ?> <?php echo $list[$i]['wr_'.$m] ?><? if($j == 0) echo "</a>"; ?><? echo $unit ?></td>
<?php }
if($field_display[$j] == "이름") { // ?>
<td class="td_form"><? if($j == 0) { ?> <a href="<?php echo $list[$i]['href'] ?>"> <? } ?> <?php echo $list[$i]['name'] ?><? if($j == 0) echo "</a>"; ?></td>
<?php }
if($field_display[$j] == "날짜") { // ?>
<td class="td_form"><? if($j == 0) { ?> <a href="<?php echo $list[$i]['href'] ?>"> <? } ?> <?php echo $list[$i]['datetime2'] ?><? if($j == 0) echo "</a>"; ?></td>
<?php } ?>
<?php } ?>
<?php } ?>
<?php //모두 출력
if($board['bo_17_subj'] == "" && $board['bo_16_subj'] == "") {
for($j = 11; $j <= $board['bo_29_subj'] + 10; $j++) {
$field_value = $board["bo_".$j];
$field_value_exp = explode("#!", $field_value);
if($field_value_exp[8] != " ") $unit = $field_value_exp[8];
if($list[$i]['wr_'.$j] != "") { // 여분 필드만큼 출력?>
<td class="td_form"><? if($j == 11) { ?> <a href="<?php echo $list[$i]['href'] ?>"> <? } ?><?php echo $list[$i]['wr_'.$j] ?><? if($j == 11) echo "</a>"; ?><? if($field_value_exp[1] != "math") echo $unit ?></td>
<?php } ?>
<?php } ?>
<td class="td_name"> <?php echo $list[$i]['name'] ?></td>
<td class="td_date"><?php echo $list[$i]['datetime2'] ?></td>
<?php } ?>
</tr>
<?php } ?>
<?php if (count($list) == 0) { echo '<tr><td colspan="'.$colspan.'" class="empty_table">NO BOOKING</td></tr>'; } ?>
</tbody>
</table>
</div>
<?php if ($list_href || $is_checkbox || $write_href) { ?>
<div class="bo_fx">
<?php if ($list_href || $write_href) { ?>
<ul class="btn_bo_user">
<?php if ($list_href) { ?><li><a href="<?php echo $list_href ?>" class="btn_b01">BOOKING LIST</a></li><?php } ?>
<?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b02">NEW BOOKING<?php echo $board['bo_10_subj'] ?></a></li><?php } ?>
</ul>
<?php } ?>
</div>
<?php } ?>
</form>
</div>
<!-- 게시판 검색 시작 { -->
<fieldset id="bo_sch">
<legend>게시물 검색</legend>
<form name="fsearch" method="get">
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
<input type="hidden" name="sca" value="<?php echo $sca ?>">
<input type="hidden" name="sop" value="and">
<label for="sfl" class="sound_only">검색대상</label>
<select name="sfl" id="sfl">
<?php //제목이 없고 출력 순서가 있는 경우
for($j = 11; $j <= $board['bo_29_subj'] + 10; $j++) {
$field_value = $board["bo_".$j];
$field_value_exp = explode("#!", $field_value);
if($field_value_exp[4] != 2 && $board["bo_".$j] != "") { // 검색 항목이 체크되어 있다면 ?>
<option value="<? echo "wr_".$j?>,1"<?php echo get_selected($sfl, 'wr_$j,1'); ?>><? echo $field_value_exp[0]?></option>
<?php } ?>
<?php } ?>
<option value="mb_id,1"<?php echo get_selected($sfl, 'mb_id,1'); ?>>AG</option>
</select>
<label for="stx" class="sound_only">검색어<strong class="sound_only"> 필수</strong></label>
<input type="text" name="stx" value="<?php echo stripslashes($stx) ?>" required id="stx" class="frm_input required" size="15" maxlength="15">
<input type="submit" value="SEARCH" class="btn_submit">
</form>
</fieldset>
<!-- } 게시판 검색 끝 -->
<?php if($is_checkbox) { ?>
<noscript>
<p>자바스크립트를 사용하지 않는 경우<br>별도의 확인 절차 없이 바로 선택삭제 처리하므로 주의하시기 바랍니다.</p>
</noscript>
<?php } ?>
<!-- 페이지 -->
<?php echo $write_pages; ?>
<?php if ($is_checkbox) { ?>
<script>
function all_checked(sw) {
var f = document.fboardlist;
for (var i=0; i<f.length; i++) {
if (f.elements[i].name == "chk_wr_id[]")
f.elements[i].checked = sw;
}
}
function fboardlist_submit(f) {
var chk_count = 0;
for (var i=0; i<f.length; i++) {
if (f.elements[i].name == "chk_wr_id[]" && f.elements[i].checked)
chk_count++;
}
if (!chk_count) {
alert(document.pressed + "할 게시물을 하나 이상 선택하세요.");
return false;
}
if(document.pressed == "선택복사") {
select_copy("copy");
return;
}
if(document.pressed == "선택이동") {
select_copy("move");
return;
}
if(document.pressed == "선택삭제") {
if (!confirm("선택한 게시물을 정말 삭제하시겠습니까?\n\n한번 삭제한 자료는 복구할 수 없습니다\n\n답변글이 있는 게시글을 선택하신 경우\n답변글도 선택하셔야 게시글이 삭제됩니다."))
return false;
f.removeAttribute("target");
f.action = "./board_list_update.php";
}
return true;
}
// 선택한 게시물 복사 및 이동
function select_copy(sw) {
var f = document.fboardlist;
if (sw == "copy")
str = "복사";
else
str = "이동";
var sub_win = window.open("", "move", "left=50, top=50, width=500, height=550, scrollbars=1");
f.sw.value = sw;
f.target = "move";
f.action = "./move.php";
f.submit();
}
</script>
<?php } ?>
<!-- } 게시판 목록 끝 -->
답변 1
스킨에서만 처리하기엔.. 목록을 다시 얻어와 페이징까지 다시 가져오지 않으면 꼬이기 쉽상입니다.
bbs/list.php 에서 list.head.skin.php 를 상반부에서 불러와서 해당 조건을 원래의 sql 조건문으로 추가해주는 처리를 해주고 그 조건문을 list.head.skin.php에서 특정게시판일때(bo_table==boardid)만 적용하라는 식으로 해두면 나중에도 관리하기가 쉽긴 합니다만..
복잡하다면 그냥 list.php에 직접 넣어주는게 좋겠죠.
어느쪽이던 수정해야 하는곳은 여러군데가 되겠네요.
$sop = strtolower($sop);if ($sop != "and" && $sop != "or")
$sop = "and";
이 라인 아래에 추가해줄 조건문을 넣어줍니다.
$sql_where = $sql_where1 = $sql_where2 = '';
if($bo_table=='해당게시판ID' && !$is_admin) $sql_where = ' mb_id="'.$member['mb_id'].'" ';
if($sql_where) {
$sql_where1 = ' where '.$sql_where;
$sql_where2 = ' and '.$sql_where;
}
$sql_where는 사용되지 않는 변수라 택해봤습니다.
그리고 그 아래에 나오는 sql문에 조건문을 추가해 수정해줍니다.
(비교하시라고 원본은 주석처리로 남겨두었습니다.)
// 가장 작은 번호를 얻어서 변수에 저장 (하단의 페이징에서 사용)
//$sql = " select MIN(wr_num) as min_wr_num from $write_table ";
$sql = " select MIN(wr_num) as min_wr_num from $write_table ".$sql_where1);
그 바로 아래의 sql문도 수정합니다.
// 원글만 얻는다. (코멘트의 내용도 검색하기 위함)
//$sql = " select distinct wr_parent from $write_table where $sql_search ";
$sql = " select distinct wr_parent from $write_table where $sql_search ".$sql_where2);
그리고 조금 내려가서 아래코드를 찾으세요.
if ($sst)
$sql_order = " order by $sst $sod ";
찾으셨으면 그 바로 아래에 나오는 sql문을 수정해줍니다.
if ($sca || $stx)
{
//$sql = " select distinct wr_parent from $write_table where $sql_search $sql_order limit $from_record, $board[bo_page_rows] ";
$sql = " select distinct wr_parent from $write_table where $sql_search ".$sql_where2." $sql_order limit $from_record, $board[bo_page_rows] ";
}
else
{
//$sql = " select * from $write_table where wr_is_comment = 0 $sql_order limit $from_record, $board[bo_page_rows] ";
$sql = " select * from $write_table where wr_is_comment = 0 ".$sql_where1." $sql_order limit $from_record, $board[bo_page_rows] ";
}
검증은 못해본지라 버그가 있을수는 있겠습니다만 이런식으로 하면 좋지 않을까 합니다.
초반에 언급한대로 list.head.skin.php을 사용하게 하려면 첫번째 추가한 특정게시판일때 조건문 만들어주는 부분에 include 넣으시고 추가했던 내용을 list.head.skin.php에 넣어주면 되겠지요.
!-->!-->!-->!-->!-->!-->