다중 카테고리에 대해 질문해요. 정보
다중 카테고리에 대해 질문해요.
본문
다중 카테고리를 쓰려고 하는데요.
카테고리 aaa,bbb,ccc,ddd 에서 aaa,ccc,ddd 식으로 중복으로 선택가능한 다중카테고리를 사용하고자 합니다.
글 쓰기 화면에서는
체크 박스로 선택 가능하게 만들었습니다만..
./board.php?bo_table=site&sca=aaa 라고 선택하면 나오도록 수정했습니다만..
검색기능이 제대로 작동하지 않네요..;;
어찌된건지.. 모르겠습니다.
플록님의 다중선택갤러리 소스를 이용하였습니다.
write.skin.php에서..
<?
$key = explode("|", $board['bo_category_list']);
foreach( $key as $ctg){
$arr = explode(",", $write['ca_name']);
$str = "";
for ($j=0; $j<count($arr); $j++){
if (trim($arr[$j]))
$str .= ($ctg == $arr[$j])?"checked":" ";
}
?><input type='checkbox' value='<?=$ctg?>' name='multi_ctg[]' id='<?=$ctg?>' <?=$str?>><label for='<?=$ctg?>' style="cursor:pointer"><?=$ctg?></label> <?
}
?>
$key = explode("|", $board['bo_category_list']);
foreach( $key as $ctg){
$arr = explode(",", $write['ca_name']);
$str = "";
for ($j=0; $j<count($arr); $j++){
if (trim($arr[$j]))
$str .= ($ctg == $arr[$j])?"checked":" ";
}
?><input type='checkbox' value='<?=$ctg?>' name='multi_ctg[]' id='<?=$ctg?>' <?=$str?>><label for='<?=$ctg?>' style="cursor:pointer"><?=$ctg?></label> <?
}
?>
이 소스를 적용했구요.
list.skin.php
//############################## 목록 및 내부검색 제어 - list.php참고 플록
//분류 선택 또는 검색어가 있다면
if ($sca || $stx){
$sql_search = "";
$sql_search = get_sql_search($sca, $sfl, $stx, $sop);
// 가장 작은 번호를 얻어서 변수에 저장 (하단의 페이징에서 사용)
$sql = " select MIN(wr_num) as min_wr_num from $write_table ";
$row = sql_fetch($sql);
$min_spt = $row[min_wr_num];
//분류 선택 또는 검색어가 있다면
if ($sca || $stx){
$sql_search = "";
$sql_search = get_sql_search($sca, $sfl, $stx, $sop);
// 가장 작은 번호를 얻어서 변수에 저장 (하단의 페이징에서 사용)
$sql = " select MIN(wr_num) as min_wr_num from $write_table ";
$row = sql_fetch($sql);
$min_spt = $row[min_wr_num];
if (!$spt) $spt = $min_spt;
//분류정렬
$spos = "";
$spos = (isset($sca))?" or instr( ca_name, '," . $sca . ",')":" ";//$sca 변수 있다면 ca_name 필드검색
$sql_search .= " " . $spos . " and (wr_num between '" . $spt . "' and '" . ($spt + $config[cf_search_part]) . "') ";
//$sca는 이미 있으므로 or ca_name like '%" . $sca . "%' 또는 or instr( ca_name, '" . $sca . "') 사용
//ca_name 필드속성 및 속도관련 체크 필요
$spos = "";
$spos = (isset($sca))?" or instr( ca_name, '," . $sca . ",')":" ";//$sca 변수 있다면 ca_name 필드검색
$sql_search .= " " . $spos . " and (wr_num between '" . $spt . "' and '" . ($spt + $config[cf_search_part]) . "') ";
//$sca는 이미 있으므로 or ca_name like '%" . $sca . "%' 또는 or instr( ca_name, '" . $sca . "') 사용
//ca_name 필드속성 및 속도관련 체크 필요
// 원글만 얻는다. (코멘트의 내용도 검색하기 위함)
$sql = " select distinct wr_parent from $write_table where $sql_search ";
$result = sql_query($sql);
$total_count = mysql_num_rows($result);
}
else{
$sql_search = "";
$total_count = $board[bo_count_write];
}
$sql = " select distinct wr_parent from $write_table where $sql_search ";
$result = sql_query($sql);
$total_count = mysql_num_rows($result);
}
else{
$sql_search = "";
$total_count = $board[bo_count_write];
}
$total_page = ceil($total_count / $board[bo_page_rows]); // 전체 페이지 계산
if (!$page){
$page = 1;
} // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $board[bo_page_rows]; // 시작 열을 구함
if (!$page){
$page = 1;
} // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $board[bo_page_rows]; // 시작 열을 구함
if ($board[bo_gallery_cols])
$td_width = (int)(100 / $board[bo_gallery_cols]);
$td_width = (int)(100 / $board[bo_gallery_cols]);
// 정렬
if (!$sst){
if ($board[bo_sort_field])
$sst = $board[bo_sort_field];
else
$sst = "wr_num, wr_reply";
$sod = "";
}
$sql_order = " order by $sst $sod ";
if (!$sst){
if ($board[bo_sort_field])
$sst = $board[bo_sort_field];
else
$sst = "wr_num, wr_reply";
$sod = "";
}
$sql_order = " order by $sst $sod ";
if ($sca || $stx){
$sql = " select distinct wr_parent from $write_table where $sql_search $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] ";
}
$result = sql_query($sql);
$sql = " select distinct wr_parent from $write_table where $sql_search $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] ";
}
$result = sql_query($sql);
$list = array();
$i = 0;
$i = 0;
if (!$sca && !$stx){
$arr_notice = split("\n", trim($board[bo_notice]));
for ($k=0; $k<count($arr_notice); $k++){
$row = sql_fetch(" select * from $write_table where wr_id = '$arr_notice[$k]' ");
if (!$row[wr_id])
continue;
$arr_notice = split("\n", trim($board[bo_notice]));
for ($k=0; $k<count($arr_notice); $k++){
$row = sql_fetch(" select * from $write_table where wr_id = '$arr_notice[$k]' ");
if (!$row[wr_id])
continue;
$list[$i] = get_list($row, $board, $board_skin_path, $board[bo_subject_len]);
$list[$i][is_notice] = true;
$list[$i][is_notice] = true;
$i++;
}
}
}
}
$k = 0;
while ($row = sql_fetch_array($result)){
// 검색일 경우 wr_id만 얻었으므로 다시 한행을 얻는다
if ($sca || $stx)
$row = sql_fetch(" select * from $write_table where wr_id = '$row[wr_parent]' ");
// 검색일 경우 wr_id만 얻었으므로 다시 한행을 얻는다
if ($sca || $stx)
$row = sql_fetch(" select * from $write_table where wr_id = '$row[wr_parent]' ");
$list[$i] = get_list($row, $board, $board_skin_path, $board[bo_subject_len]);
if (strstr($sfl, "subject"))
$list[$i][subject] = search_font($stx, $list[$i][subject]);
$list[$i][is_notice] = false;
$list[$i][num] = $total_count - ($page - 1) * $board[bo_page_rows] - $k;
if (strstr($sfl, "subject"))
$list[$i][subject] = search_font($stx, $list[$i][subject]);
$list[$i][is_notice] = false;
$list[$i][num] = $total_count - ($page - 1) * $board[bo_page_rows] - $k;
$i++;
$k++;
}
$k++;
}
$write_pages = get_paging($config[cf_write_pages], $page, $total_page, "./board.php?bo_table=$bo_table" . $qstr . "&page=");
//############################## 목록 및 내부검색 제어 끝 - 2006년 9월 1일 금요일 플록
//############################## 목록 및 내부검색 제어 끝 - 2006년 9월 1일 금요일 플록
//분류내 재정렬시 분류유지
$qstr2= str_replace("bo_table=$bo_table","bo_table=$bo_table&sca=$sca&page=$page",$qstr2);
?>
$qstr2= str_replace("bo_table=$bo_table","bo_table=$bo_table&sca=$sca&page=$page",$qstr2);
?>
위 소스를 적용했습니다.
전체 게시물에서는 아무 이상없이 검색이 됩니다만..
./board.php?bo_table=site&sca=aaa 여기에서는 어떠한 검색어를 넣든 카테고리에 포함된 리스트가 전부 뜨네요.
list.skin.php를 어찌 수정해야할까요?
도움의 손길좀~~ ㅠㅁㅠ
사이트 주소가 필요하시면 댓글이나 쪽지 주세요.
댓글 전체
./board.php?bo_table=site&sca=aaa 여기에서는 어떠한 검색어를 넣든 카테고리에 포함된 리스트가 전부 뜨네요.
-->> sca 가 존재한 상태에서 검색을 하시면 안되구요.. 약간의 list.php 를 수정하셔야 해요.
g4/bbs/list.php 에서 약간의 편법을 써야 합니다.
20줄에...
-----------------------------------
// 분류 선택 또는 검색어가 있다면
if ($sca || $stx)
{
//추가
if($bo_table == 'test' and $stx)
$sca = ''; // test 테이블에서 검색어를 입력한 경우 $sca 는 무시한다..
}
----------------------------------
즉... 그누보드는 sca 값이 있는 상태에서 검색어를 입력하면 해당 sca 내에서만 검색을 합니다. sca 내에서 검색을 할경우는 sca 를 초기화........
-->> sca 가 존재한 상태에서 검색을 하시면 안되구요.. 약간의 list.php 를 수정하셔야 해요.
g4/bbs/list.php 에서 약간의 편법을 써야 합니다.
20줄에...
-----------------------------------
// 분류 선택 또는 검색어가 있다면
if ($sca || $stx)
{
//추가
if($bo_table == 'test' and $stx)
$sca = ''; // test 테이블에서 검색어를 입력한 경우 $sca 는 무시한다..
}
----------------------------------
즉... 그누보드는 sca 값이 있는 상태에서 검색어를 입력하면 해당 sca 내에서만 검색을 합니다. sca 내에서 검색을 할경우는 sca 를 초기화........

뮤죤님 답변 감사합니다.
허나..
./board.php?bo_table=site&sca=aaa 여기에서는 어떠한 검색어를 넣든 카테고리에 포함된 리스트가 전부 뜨네요.
이말은 그누보드 기능인 카테고리내 검색기능이 안된다는 말이었습니다.
어떠한 검색어를 넣든 aaa에 포함된 모든 리스트가 뜨거든요. 즉, 검색자체가 되지 않아요...;
sca를 초기화 시켜버리면.. 원하는 결과와는 다른 결과가 나와버리네요.. ㅠㅁㅠ
허나..
./board.php?bo_table=site&sca=aaa 여기에서는 어떠한 검색어를 넣든 카테고리에 포함된 리스트가 전부 뜨네요.
이말은 그누보드 기능인 카테고리내 검색기능이 안된다는 말이었습니다.
어떠한 검색어를 넣든 aaa에 포함된 모든 리스트가 뜨거든요. 즉, 검색자체가 되지 않아요...;
sca를 초기화 시켜버리면.. 원하는 결과와는 다른 결과가 나와버리네요.. ㅠㅁㅠ