네비게이션 4차 노출방법
본문
/theme/basic/shop/basic/navigation.skin.php
<?php
$navi_datas = $ca_ids = array();
$is_item_view = (isset($it_id) && isset($it) && isset($it['it_id']) && $it_id === $it['it_id']) ? true : false;
if( !$is_item_view && $ca_id ){
$navi_datas = get_shop_navigation_data(true, $ca_id);
$ca_ids = array(
'ca_id' => substr($ca_id,0,2),
'ca_id2' => substr($ca_id,0,4),
'ca_id3' => substr($ca_id,0,6),
'ca_id4' => substr($ca_id,0,8)
);
} else if( $is_item_view && isset($it) && is_array($it) ) {
$navi_datas = get_shop_navigation_data(true, $it['ca_id']);
$ca_ids = array(
'ca_id' => substr($it['ca_id'],0,2),
'ca_id2' => substr($it['ca_id'],0,4),
'ca_id3' => substr($it['ca_id'],0,6),
'ca_id4' => substr($it['ca_id'],0,8)
);
}
?>
<?php if ( is_array($navi_datas) && $navi_datas ){ ?>
<?php if( isset($navi_datas[0]) && $navi_datas[0] ){ ?>
<select class="shop_hover_selectbox category1">
<?php foreach((array) $navi_datas[0] as $data ){ ?>
<option value="<?php echo $data['ca_id']; ?>" data-url="<?php echo $data['url']; ?>" <?php if($ca_ids['ca_id'] === $data['ca_id']) echo 'selected'; ?>><?php echo $data['ca_name']; ?></option>
<?php } ?>
</select>
<?php } ?>
<?php if( isset($navi_datas[1]) && $navi_datas[1] ){ ?>
<!-- <i class="dividing-line fa fa-angle-right" aria-hidden="true"></i> -->
<i class="dividing-line xi-angle-right-thin" aria-hidden="true"></i>
<select class="shop_hover_selectbox category2">
<?php foreach((array) $navi_datas[1] as $data ){ ?>
<option value="<?php echo $data['ca_id']; ?>" data-url="<?php echo $data['url']; ?>" <?php if($ca_ids['ca_id2'] === $data['ca_id']) echo 'selected'; ?>><?php echo $data['ca_name']; ?></option>
<?php } ?>
</select>
<?php } ?>
<?php if( isset($navi_datas[2]) && $navi_datas[2] ){ ?>
<!-- <i class="dividing-line fa fa-angle-right" aria-hidden="true"></i> -->
<i class="dividing-line xi-angle-right-thin" aria-hidden="true"></i>
<select class="shop_hover_selectbox category3">
<?php foreach((array) $navi_datas[2] as $data ){ ?>
<option value="<?php echo $data['ca_id']; ?>" data-url="<?php echo $data['url']; ?>" <?php if($ca_ids['ca_id3'] === $data['ca_id']) echo 'selected'; ?>><?php echo $data['ca_name']; ?></option>
<?php } ?>
</select>
<?php } ?>
<?php if( isset($navi_datas[3]) && $navi_datas[3] ){ ?>
<!-- <i class="dividing-line fa fa-angle-right" aria-hidden="true"></i> -->
<i class="dividing-line xi-angle-right-thin" aria-hidden="true"></i>
<select class="shop_hover_selectbox category4">
<?php foreach((array) $navi_datas[3] as $data ){ ?>
<option value="<?php echo $data['ca_id']; ?>" data-url="<?php echo $data['url']; ?>" <?php if($ca_ids['ca_id4'] === $data['ca_id']) echo 'selected'; ?>><?php echo $data['ca_name']; ?></option>
<?php } ?>
</select>
<?php } ?>
<?php } ?>
/lib/shop.data.lib.php
<?php
function get_shop_navigation_data($is_cache, $ca_id, $ca_id2='', $ca_id3='', $ca_id4=''){
$all_categories = get_shop_category_array($is_cache);
$datas = array();
if( strlen($ca_id) >= 2 && $all_categories ){
foreach((array) $all_categories as $category1 ){
$datas[0][] = $category1['text'];
}
}
$select_ca_id = $ca_id2 ? $ca_id2 : $ca_id;
$item_categories2 = $select_ca_id ? get_shop_category_by($is_cache, 'ca_id', $select_ca_id) : array();
if( strlen($select_ca_id) >= 4 && $item_categories2 ){
foreach((array) $item_categories2 as $key=>$category2 ){
if( $key === 'text' ) continue;
$datas[1][] = $category2['text'];
}
}
$select_ca_id = $ca_id3 ? $ca_id3 : $ca_id;
$item_categories3 = $select_ca_id ? get_shop_category_by($is_cache, 'ca_id', $select_ca_id) : array();
if( strlen($select_ca_id) >= 6 && $item_categories3 && isset($item_categories3[substr($select_ca_id,0,4)]) ){
$sub_categories = $item_categories3[substr($select_ca_id,0,4)];
foreach((array) $sub_categories as $key=>$category3 ){
if( $key === 'text' ) continue;
$datas[2][] = $category3['text'];
}
}
$select_ca_id = $ca_id4 ? $ca_id4 : $ca_id;
$item_categories4 = $select_ca_id ? get_shop_category_by($is_cache, 'ca_id', $select_ca_id) : array();
if( strlen($select_ca_id) >= 8 && $item_categories4 && isset($item_categories4[substr($select_ca_id,0,6)]) ){
$sub_categories = $item_categories4[substr($select_ca_id,0,6)];
foreach((array) $sub_categories as $key=>$category4 ){
if( $key === 'text' ) continue;
$datas[3][] = $category4['text'];
}
}
return $datas;
}
function get_shop_category_array($is_cache=false){
static $categories = array();
$categories = run_replace('get_shop_category_array', $categories, $is_cache);
if( $is_cache && !empty($categories) ){
return $categories;
}
$result = sql_query(get_shop_category_sql('', 2));
for($i=0; $row=sql_fetch_array($result); $i++) {
$row['url'] = shop_category_url($row['ca_id']);
$categories[$row['ca_id']]['text'] = $row;
if( $row['ca_id'] ){
$result2 = sql_query(get_shop_category_sql($row['ca_id'], 4));
for($j=0; $row2=sql_fetch_array($result2); $j++) {
$row2['url'] = shop_category_url($row2['ca_id']);
$categories[$row['ca_id']][$row2['ca_id']]['text'] = $row2;
if( $row2['ca_id'] ){
$result3 = sql_query(get_shop_category_sql($row2['ca_id'], 6));
for($k=0; $row3=sql_fetch_array($result3); $k++) {
$row3['url'] = shop_category_url($row3['ca_id']);
$categories[$row['ca_id']][$row2['ca_id']][$row3['ca_id']]['text'] = $row3;
if( $row3['ca_id'] ){
$result4 = sql_query(get_shop_category_sql($row3['ca_id'], 8));
for($m=0; $row4=sql_fetch_array($result4); $m++) {
$row4['url'] = shop_category_url($row4['ca_id']);
$categories[$row['ca_id']][$row2['ca_id']][$row3['ca_id']][$row4['ca_id']]['text'] = $row4;
}
} //end if
}
} //end if
} //end for
} //end if
} //end for
return $categories;
}
?>
수정 부분들 입니다. 왜 4차 노출이 안되는건지 모르겠습니다.
!-->!-->답변 1
[AI 답변]
제가 확인한 바로는 다음과 같은 부분이 잘못된 것으로 보입니다.
-
$datas
배열의 인덱스가0
,1
,2
,3
으로 하드코딩되어 있어, 해당 인덱스에 해당하는 카테고리 레벨만을 처리하고 있습니다. 만약 레벨이 더 추가되거나, 다양한 레벨을 처리해야 하는 경우에는 코드를 수정해야 합니다. 더 유연한 방식으로 처리하려면, 배열의 인덱스를 동적으로 생성하거나, 다차원 배열 대신 연관 배열을 사용하는 것이 좋을 수 있습니다. -
각각의
foreach
루프에서continue
문을 사용하여$key
값이'text'
인 경우에는 무시하고 넘어가고 있습니다. 이는$item_categories2
,$item_categories3
,$item_categories4
배열에서'text'
라는 키를 가진 값들이 존재하는 것으로 가정하고 처리하고 있습니다. 이 부분이 잘못된 경우에는 예기치 않은 결과가 발생할 수 있습니다. 배열의 구조와 데이터에 따라 적절한 처리를 해주어야 합니다. -
$select_ca_id
변수를 초기화할 때, 조건문으로$ca_id2
나$ca_id3
이 존재하는 경우에만 해당 값을 대입하고, 그렇지 않은 경우에는$ca_id
를 대입하는 로직이 있습니다. 이는$ca_id2
나$ca_id3
이 빈 문자열(''
)인 경우에도 해당 값을 대입하게 되므로, 원하는 결과를 얻지 못할 수 있습니다.$ca_id2
나$ca_id3
이 빈 문자열인 경우에도 적절한 처리를 해주어야 합니다.
위의 부분들을 확인하고 필요에 따라 수정하시면 될 것 같습니다.