2단 카테고리 질문입니다. > 그누4 질문답변

그누4 질문답변

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

2단 카테고리 질문입니다. 정보

2단 카테고리 질문입니다.

본문

오류가 나는곳의 주소를 알려주시면 더 빠르고 정확하게 답변 받을 수 있습니다.

오류 주소 :

며칠전에 균이님이 답변을 주셨는데 아무리 해봐도 안되네요...(T.T)
글 수정만 들어가면 1단 카테고리는 정상인데요 2단 카테고리 내용이 날아가 버려서
다시 선택해줘야 하는 불편함이 있습니다. 운영자만 쓸거면 내버릴텐데...
사용자가 사용하는 페이지라 수정을 해줘야 합니다. T.T

write.skin.php 내용입니다.

// 최상단
include_once "$board_skin_path/skin.lib.php";
if ($is_category) {
    $nc_category_location  = "./board.php?bo_table=$bo_table&sca=$sca&sfl=wr_10&stx=";
    $nc_category_option    = get_nc_category_option($bo_table, $sca);
}

<script id="dynamic"></script>
<script language="javascript">
// 글자수 제한
var char_min = parseInt(<?=$write_min?>); // 최소
var char_max = parseInt(<?=$write_max?>); // 최대
function category_data(sel,target) {
if(sel=='update') sel= document.form.ca_name; //추가
var sca    = sel.options[sel.selectedIndex].value; // 첫번째 selectbox의 선택된 텍스트
var form    = sel.form.name;
dynamic.src = "<?=$board_skin_path?>/category.data.php?bo_table=<?=$bo_table?>&form=" + form + "&sca=" + sca + "&target=" + target;
}

<select name=ca_name required itemname="분류" onChange="category_data(this,'wr_10');">
<option value=''>제조회사
<?=$category_option?>
</select>
<select name="wr_10" required itemname='소분류'>
<option value=''>차량이름</option>
</select>


skin.lib.php 내용입니다.
function get_nc_category_option($bo_table, $sca="")
{
    global $g4, $board;
   
    $arr    = explode("|", $board[bo_category_list]);
    $arr1  = explode("|", $board[bo_10]);
    $key    = array_search($sca, $arr);
    $cate  = explode("^", $arr1[$key]);
   
    for ($i=0; $i<count($cate); $i++) {
        if (trim($cate[$i])) {
            $str .= "<option value='$cate[$i]'>$cate[$i]</option>\n";
        }
    }
   
    return $str;
}


그리고 category.data.php 내용입니다.
<?
$g4_path = "../../..";
include_once("$g4_path/common.php");

/*
//var sca    = sel.options[sel.selectedIndex].value;
//var form    = sel.form.name;
//dynamic.src = "<?=$board_skin_path?>/category.data.php?bo_table=<?=$bo_table?>&form=" + form + "&sca=" + data + "&target=" + target;
*/

header("Content-Type: application/x-javascript");

$arr    = explode("|", $board[bo_category_list]);
$arr1  = explode("|", $board[bo_10]);
$key    = array_search($sca, $arr);
$cate  = explode("^", $arr1[$key]);



if ($sca == "공지") {
    echo "document.forms['$form'].elements['$target'].length = 1;\n";
    echo "document.forms['$form'].elements['$target'].options[0].text  = '선택하세요';\n";
    echo "document.forms['$form'].elements['$target'].options[0].value = '';\n";
    exit;
} else {
    echo "document.forms['$form'].elements['$target'].length = ". (count($cate) + 1). ";\n";
    echo "document.forms['$form'].elements['$target'].options[0].text  = '선택하세요';\n";
    echo "document.forms['$form'].elements['$target'].options[0].value = '';\n";
   
    for ($i=0; $i<count($cate); $i++) {
        $k = $i + 1;
        echo "document.forms['$form'].elements['$target'].options[$k].text  = '$cate[$i]';\n";
        echo "document.forms['$form'].elements['$target'].options[$k].value = '$cate[$i]';\n";
    }
}
?>


/////////////////////////////////

코드 보시면 아시겠지만 여분필드 wr_10 의 텍스트가 2단 카테고리 내용입니다.

부탁드리겠습니다.

비슷한 구성을 하는 스킨 3개를 모두 뜯어봐서 실험해봤는데
하나같이 글 수정 들어갔을때 2단 카테고리 값이 잡히질 않더군요...
  • 복사

댓글 전체

ㅎㅎ 아직 해결되지 않았군요
1. 수정시 1차 분류 항목 선택 코드 부분을 보고싶군요
2. 2차분류 항목들 출력 부분 까지는 잘 되는가요?
3. 2차분류 선택된 값은 wr_10 필드에 저장 된다는 건가요?
4. get_nc_category_option() 함수 및 $nc_category_option 변수는 어디에서 사용 되는가요?
----------------------------------------------------
2차 분류 항목들이 출력 된다면
select 폼 뒤쪽 자바스크립트 부분에 1차분류 처럼 이것만 추가해 주면 되겠는데요?
그런데 form 이름이 form이 맞는 건가요?

if (document.form.w.value == "u")
  document.form.wr_10.value = "<?=$write[wr_10]?>";
균이님 또 답변 주셔서 감사합니다.

1. 링크로 걸어야 하나요?
http://itsjeju.co.kr/test.phps

2. 출력 부분들은 모두 정상입니다.

3. 2차 분류 셀렉트된 값은 wr_10에 저장됩니다.

4. $nc_category_option    = get_nc_category_option($bo_table, $sca);
와 같이 skin.lib.php 함수를 갖고 와여...

제가 해결되면 담배값이라도 꼭 드리겠습니다.
관심 주셔서 감사합니다.
이렇게 해도 되겠네요
category.data.php 소스를 보니 답은 나와있네요

dynamic.src = "<?=$board_skin_path?>/category.data.php?bo_table=<?=$bo_table?>&form=" + form + "&sca=" + sca + "&target=" + target+"&sca2="+"<?=$write[wr_10]?>"; 
이렇게 해주고

category.data.php 마지막에 추가
if( $sca2 )
 echo "document.forms['$form'].elements['$target'].value = "$sca2";
-----------------------------------
저번에 얘기 했던 것처럼 1차 분류 항목 선택 스크립트 다음에 아래 코드 추가
category_data('update', 'wr_10')
if (typeof(wr_6) != "undefined")
        if (w.value == "u")
            wr_6.value = "<?=$write[wr_6]?>";

category_data('update', 'wr_10'); ////////////////////여기에 추가
if (document.fwrite.w.value == "u")
  document.fwrite.wr_10.value = "<?=$write[wr_10]?>";
}
-------------------
form 이름은 원래대로 fwrite군요..그렇다면
if(sel=='update') sel= document.fwrite.ca_name; //추가 <---------폼이름 수정

맨위 답글에서도 수정 해야할 부분
if (document.fwrite.w.value == "u")
  document.fwrite.wr_10.value = "<?=$write[wr_10]?>";
---------------------------------------------
2차 분류 항목들을 출력하도록 해주는 부분이 보이지 않는데 항목들이 어떤 방법으로
나타나게 하는지 궁금하군요
어쨌던 2차분류 항목이 나타난다면
category_data('update', 'wr_10'); ////////////////////여기에 추가<---이건 필요 없네요
---------------------------------------------
4. $nc_category_option    = get_nc_category_option($bo_table, $sca);
와 같이 skin.lib.php 함수를 갖고 와여... <----이게 쓰이는 곳이 안보인다는 말입니다
--------------------------------
if (typeof(wr_6) != "undefined")
        if (w.value == "u")
            wr_6.value = "<?=$write[wr_6]?>";

wr_6 이 사용되는 곳이 없으니 이것도 필요없는 부분같군요
아..답변 정말 고맙습니다. 현재 수정 했는데요..

write.skin.php (추가 한 겁니다.)
category_data('update', 'wr_10'); ////////////////////여기에 추가
if (document.fwrite.w.value == "u")
  document.fwrite.wr_10.value = "<?=$write[wr_10]?>";
}

고쳤구요.. 상단에
function category_data(sel,target) {
if(sel=='update') sel= document.fwrite.ca_name; //추가
var sca    = sel.options[sel.selectedIndex].value; // 첫번째 selectbox의 선택된 텍스트
var form    = sel.form.name;
dynamic.src = "<?=$board_skin_path?>/category.data.php?bo_table=<?=$bo_table?>&form=" + form + "&sca=" + sca + "&target=" + target+"&sca2="+"<?=$write[wr_10]?>";
}
위와 같이 했습니다.

여기 까지 하고 봤더니 전보다 나아(??) 졌어요... 근데 아직도 2단 카테고리 값이 제대로 되질 않습니다. 스크립트 오류는 안 뜨구요...

맨 마지막에 쓰신

category.data.php 를 수정하시라는 말씀중에
if( $sca2 )
 echo "document.forms['$form'].elements['$target'].value = "$sca2";
맨 마지막에 넣으라고 했는데...

어떻게 넣어야 하나요?

참.. 나아졌다는 말은...
전에는 (수정전) 글 수정 들어가면 카테고리 1단 선택 다시 해야 2단 카테고리 리스트가 나왔는데
지금은 1단 선택 할 필요없이 2단 카테고리 목록을 선택할 수 있습니다.

답변 귀찮을텐데 계속 도와주셔서 정말 감사합니다.
그렇지요? 2차분류 항목이 나타날 수가 없는데 출력이 모두 정상이라기에 이상하다 했어요
if (document.fwrite.w.value == "u")
  document.fwrite.wr_10.value = "<?=$write[wr_10]?>";
이 부분은 삭제 하세요
----------------------------------------
대신 category.data.php 수정
마지막 } 와 ?> 사이 행에 아래 코드를 추가하면 됩니다

if( $sca2 )
 echo "document.forms['$form'].elements['$target'].value = "$sca2";
====================================
지금 보니
function get_nc_category_option() 이 함수는 category.data.php와 같은 용도로
사용하려고 만들었다가 사용하지않고 category.data.php 을 사용하는 것 같군요

저렇게 category.data.php 를 서버에서 불러오지않고
그냥 자바스크립트 함수로 만들어 버리면 속도면에서도 훨씬 낫겠지만
이미 그렇게 사용하고 있으니 그대로 사용해야겠군요
<?
$g4_path = "../../..";
include_once("$g4_path/common.php");

/*
//var sca    = sel.options[sel.selectedIndex].value;
//var form    = sel.form.name;
//dynamic.src = "<?=$board_skin_path?>/category.data.php?bo_table=<?=$bo_table?>&form=" + form + "&sca=" + data + "&target=" + target;
*/

header("Content-Type: application/x-javascript");

$arr    = explode("|", $board[bo_category_list]);
$arr1  = explode("|", $board[bo_10]);
$key    = array_search($sca, $arr);
$cate  = explode("^", $arr1[$key]);


if ($sca == "공지") {
echo "document.forms['$form'].elements['$target'].length = 1;\n";
echo "document.forms['$form'].elements['$target'].options[0].text  = '선택하세요';\n";
echo "document.forms['$form'].elements['$target'].options[0].value = '';\n";
exit;
} else {
echo "document.forms['$form'].elements['$target'].length = ". (count($cate) + 1). ";\n";
echo "document.forms['$form'].elements['$target'].options[0].text  = '선택하세요';\n";
echo "document.forms['$form'].elements['$target'].options[0].value = '';\n";
for ($i=0; $i<count($cate); $i++) {
$k = $i + 1;
echo "document.forms['$form'].elements['$target'].options[$k].text  = '$cate[$i]';\n";
echo "document.forms['$form'].elements['$target'].options[$k].value = '$cate[$i]';\n";
}
}
if( $sca2 )
echo "document.forms['$form'].elements['$target'].value = "$sca2";
?>


다 했는데 이번엔 오히려 구문에러가 터지네요 ^^;.... 앜 답변 고맙습니다.
© SIRSOFT
현재 페이지 제일 처음으로