갤러리에서 분류셀렉트박스를 풀려면.. > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

갤러리에서 분류셀렉트박스를 풀려면.. 정보

갤러리에서 분류셀렉트박스를 풀려면..

본문

짤방갤러리 스킨을 사용하고 있습니다.

list 상단에 분류가 셀렉트 박스를 사용하고 있자나요.

해당 부분이

<table width="100%" cellspacing="0" cellpadding="0">
<tr height="25">
    <? if ($is_category) { ?>
<form name="fcategory" method="get">
<td width="50%">
<select name=sca onchange="location='<?=$category_location?>'+this.value;">
<option value=''>전체</option>
<?=$category_option?>
</select>
</td>
</form>
<? } ?>

    <td align="right">
        게시물 <?=number_format($total_count)?>건
        <? if ($rss_href) { ?><a href='<?=$rss_href?>'><img src='<?=$board_skin_path?>/img/btn_rss.gif' border=0 align=absmiddle></a><?}?>
        <? if ($admin_href) { ?><a href="<?=$admin_href?>"><img src="<?=$board_skin_path?>/img/admin_button.gif" title="관리자" width="63" height="22" border="0" align="absmiddle"></a><?}?></td>
</tr>
<tr><td height=5></td></tr>
</table>

인것 같습니다.

이대로 하면 셀렉트 박스로 분류가 나오자나요.

이것을 풀려고 합니다.

전체 | a | b | c|  모 이런식으로요...

나름 열심히 고쳐 밨는데...계속 에러가 나네요..
  • 복사

댓글 전체

아래쪽에 보시면..

<script language="JavaScript">
if ("<?=$sca?>") document.fcategory.sca.value = "<?=$sca?>";
if ("<?=$stx?>") {
    document.fsearch.sfl.value = "<?=$sfl?>";
    document.fsearch.sop.value = "<?=$sop?>";
}
</script>
이런 소스가 있을겁니다. 셀렉트 박스형식의 폼 관련 자바스크립트로..
가로 카테고리로 처리시 필요 없어집니다.
삭제 또는 주석 처리하시면 됩니다.

그나저나, '에러가 나옵니다.' 라고만 하시면 다른분들은 어떤 에러가 나오는지 알 수 없으므로 제대로 된 답변을 드릴 수 없습니다.
팝업으로 에러정보가 뜨지 않으면..익스 하단에 오류표시인 노란느낌표를 더블클릭하면.. 오류정보가 뜹니다.
그 오류를 작성해주시면 50%정도는 원인파악이 쉽게 되니 빠른 답변을 얻으실 수 있을겁니다.
답변 감사드립니다. 질문이 좀 에매습니다.
이것저것 계속 고치느라고.. 걍 원본만 올리고 질문했습니다. 죄송..

알려주신대로 , 하단의 스크립트는 주석처리 했고요.

<tr height="25">
    <? if ($is_category) { ?>
<form name="fcategory" method="get">
<td colspan="2"><input type="hidden" name="sca" value="<?=$category_option?>">
<a href="<?=$list_href?>">전체</a>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;<?=$category_option?>

</td>
</form>
<? } ?>

상단의 셀렉트 부분을 이처럼 고쳤는데요..

전체를 누르면 Forbidden 이 나오구요.. 나머지들은 분류는 표시 되는데 링크가 안나와여..
이번에는
이렇게 고쳐밨는데요...

    <form name="fcategory" method="get">
      <? if ($is_category) { ?>
  <tr height="25">
  <input type="hidden" name="sca" value="<?=$category_option?>">&nbsp;&nbsp;&nbsp;
<a href="<?=$list_href?>">전체</a>
&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;<a href="<?=$list_href?>"><?=$category_option?></a></td>

</tr>
<? } ?>
</form>

역시 forbidden 에러 나와요.. ㅜ.ㅜ
음...
어디부터 알려드려야 할지
일단 bbs/list.php 를 열어봅니다.
$category_option = get_category_option($bo_table); // SELECT OPTION 태그로 넘겨받음
라는 부분이 있을겁니다. 아하 분류명이 옵션태그로 구현받아서 넘어돈다는걸 알 수 있습니다.
그럼  get_category_option 은 어디에 있을까요. 제일 의심가는 lib/common.lib.php를 열어봅시다.

function get_category_option($bo_table='')
{
    global $g4, $board;

    $arr = explode("|", $board[bo_category_list]); // 구분자가 , 로 되어 있음
    $str = "";
    for ($i=0; $i<count($arr); $i++)
        if (trim($arr[$i]))
            $str .= "<option value='$arr[$i]'>$arr[$i]</option>\n";

    return $str;
}
라고 되어있군요.
위상태에서는 $bo_table을 넘기는게 무의미 하겠네요.

일단 우리는 옵션태그를 원하는게 아니고 링크를 원합니다.

저 함수에서
$arr = explode("|", $board[bo_category_list]); // 구분자가 , 로 되어 있음
부분을 유심히 보시면
$board[bo_category_list] 라는곳에 분류명들이 "|" 를 구분자로 하는 문자열로 저장되어 있는것을 알수 있습니다.
주석에는 구분자가 , 로 되어있음 이렇게 되어있는데 실은 | 로 되어있군요 (뭥미)

explode라는 함수는 앞의 문자(열)을 중심으로 뒤의 문자열을 분리하여 배열로 저장하라는 것입니다.
비슷한 함수로는 split 가 있구요, split는 좀 더 광범위하게 자를 수 있지만, explode가 기능은 좀 떨어지되 속도면에서 빠릅니다.
즉 $board[bo_category_list] 에 "개|고양이|오리|돼지|이구아나" 이렇게 되어있다면
위의 명령은
$arr[0]="개",$arr[1]=고양이,$arr[2]=오리...
이런식으로 쪼개서 저장해달라는 말이 되겠습니다.

그럼 쪼개봅시다.
$cat_list = explode("|",$board['bo_category_list']);
(여담이지만, 연관배열을 쓰실때 $board[bo_category_list] 보다 $board['bo_category_list'] 가 더 빠릅니다. 단 " " 안에 들어갈때 쓰시면 에러납니다. 헷갈리시면 그냥 작은따옴표 빼서 쓰세요.)

그럼 분류명들이 $cat_list[숫자] 에 차례대로 배열로 들어갔겠네요.
이걸 뿌려줘 봅시다. for 문으로 반복해서 뿌려주면 되겠지요? 근데 어디까지 반복을 해야할까요?
일단 $cat_list[] 의 크기를 알아야 겠네요.
배열의 크기를 아는 함수는 size_of 와 count가 있습니다. 여기서도 배열의 경우는 count가 더빠르겠습니다.

for($ii=0;$ii<count($cat_list);$ii++){
}
이렇게 반복하면 되겠습니다만, 반복할때마다 count 함수를 호출하게 되므로 별로 좋지 않습니다.
까짓꺼 하나 저장해 놉시다.
$cat_list_size = count($cat_list);
또한 php만의 특성으로 $ii++ 보다 ++$ii 가 몇배정도 빠릅니다. 다른언어는 똑같은데 php만 빠릅니다.
for($ii=0;$ii<$cat_list_size;$++ii) 가 좋겠군요.

또 알아야 할 것이 있습니다. 분류를 적용하는 파라메터 인데요.
이건 분류를 변경할때 보시면 주소줄에 sca=분류명 이렇게 추가되는걸 보셨을껍니다.
아하 sca로 분류명을 넘기면 되겠군요...

이제 준비는 다 됐습니다. 그럼 짜볼까요.
$cat_list = explode("|",$board['bo_category_list']);  //분류를 분리하고
$cat_list_size = count($cat_list); // 몇개인지 계산해서 저장합니다.
for($ii=0;$ii<$cat_list_size;$++ii){//그 숫자만큼 반복하겠지요?
  echo "<a href='$g4[bbs_path]/board.php?bo_table=$bo_table&sca=$cat_list[$ii]'>$cat_list[$ii]</a>"; //sca로 카테고리 이름을 넘기는 링크를 출력합니다.
}

완성입니다. 단 카테고리 이름이 붙어서 주르륵 나와버리겠군요.
예쁘게 가공하는건 마님의집사님 몫으로 남겨드리겠습니다.
감사합니다. 100% 아니지만 이해됬습니다. 이해 한거랑, 소스 적용하는거랑은
차이가 있네요...이해는 했는데 쉽게 안나오는걸 보면요..

 for($ii=0;$ii<$cat_list_size;$++ii){//그 숫자만큼 반복하겠지요?

이부분에서(이것이 52번 )

Parse error: parse error, expecting `T_VARIABLE' or `'$'' in c:\apm_setup\htdocs\gnuboard4\skin\board\zzalbang\list.skin.php on line 52
게 에러가 나와요..

<? if ($is_category) {
<? $cat_list = explode("|",$board['bo_category_list']);  //분류를 분리하고
    $cat_list_size = count($cat_list); // 몇개인지 계산해서 저장합니다.
    for($ii=0;$ii<$cat_list_size;$++ii){//그 숫자만큼 반복하겠지요?
    echo "<a href='$g4[bbs_path]/board.php?bo_table=$bo_table&sca=$cat_list[$ii]'>$cat_list[$ii]</a>"; //sca로 카테고리 이름을 넘기는 링크를 출력합니다.
    }

 }

이렇게 넣었습니다.
?>
아이고 무슨 말씀을 제가 더 감사하지요...

알려주신대로 소스를 이렇게 수정했더니..
아주 잘됩니다. 검색창을 아주 손쉽게 푸는 방법인듯 합니다.


<? if ($is_category) {
    $cat_list = explode("|",$board['bo_category_list']);  //분류를 분리하고
    $cat_list_size = count($cat_list); // 몇개인지 계산해서 저장합니다.
    for($ii=0;$ii<$cat_list_size;++$ii){//그 숫자만큼 반복하겠지요?
    echo "<a href='$g4[bbs_path]/board.php?bo_table=$bo_table&sca=$cat_list[$ii]'>$cat_list[$ii]</a>"; //sca로 카테고리 이름을 넘기는 링크를 출력합니다.
    }

 }

?>
엑스엠엘님 답변 감사합니다.

알려주신 링크의 자료가 맞습니다.

거기서 알려준대로 하면 되긴 됩니다.

근데, 기능은 이상없이 잘되는데...하단 완료 표시되는 곳에
분류를 선택하여 가면 순간적으로 오류가 있다 모 이렇게 표시되고
다시 없어져요.. 이것만 없음 아주 좋은데..ㅎㅎ

전 그래서 스킨을 다른것으로 바꾸고 스킨자료실에 있던데요..
ag_category 이 스킨으로 바꿨고요...

이소스의

<!-- 분류 셀렉트 박스, 게시물 몇건, 관리자화면 링크 -->
<table width="100%" cellspacing="0" cellpadding="0">
<? $list_href = "./board.php?bo_table=$bo_table"; ?>
<tr><td height=4></td></tr>
<form name="fcategory" method="get">
<? if ($is_category) { ?>
<tr height="25">
<td colspan="2"><input type="hidden" name="sca" value="<?=$category_option?>">&nbsp;&nbsp;&nbsp;<a href="<?=$list_href?>">전체</a>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;<?=$category_option?></td>
</tr>
<? } ?>
</form>
<tr height="25">
    <td align="right">
        게시물 <?=number_format($total_count)?>건
        <? if ($rss_href) { ?><a href='<?=$rss_href?>'><img src='<?=$board_skin_path?>/img/btn_rss.gif' border=0 align=absmiddle></a><?}?>
        <? if ($admin_href) { ?><a href="<?=$admin_href?>"><img src="<?=$board_skin_path?>/img/admin_button.gif" title="관리자" width="63" height="22" border="0" align="absmiddle"></a><?}?></td>
</tr>
<tr><td height=2 ></td></tr>
</table>

요 해당 부분을 위처럼 바꿨더니...정상적으로 표시됩니다...

답변감사했고요...그치만 짤방스킨에서 왜 안됬는지 이유를 잘 모르겠어요...
짤방스킨에서 <? $list_href = "./board.php?bo_table=$bo_table"; ?>
부분이 정의가 없어서 그런거 같아서 상단에 이 구문도 추가 했었는데...

전체는 되는데, 나머지가 안되더라구요.. 쩝...
© SIRSOFT
현재 페이지 제일 처음으로