1원 짜리 팁 ... 메인에 최신글과 분류명 출력 .....
해당 질문글 > https://sir.kr/questions/564727?stx=%EC%B9%B4%ED%85%8C%EA%B3%A0%EB%A6%AC
미리보기 > https://ysmoto.kr/ys2/
미리보기 > https://ysmoto.kr/ys2/index1.php
분류명 출력 (게시글이 없는 분류는 출력 안함)
아래 테이블명 변경 후 사용 하시면 됩니다.
<?php
// ==========================================
// [여기만 수정하세요] 연동할 게시판 테이블명을 적어줍니다.
// ==========================================
$my_table = '테이블명';
?>
<!-- 깜빡임 없이 제자리에서 바꾸기 위해 전체를 하나의 ID(#ajax-lesson-wrapper)로 감쌉니다 -->
<div id="ajax-lesson-wrapper">
<?php
global $g5;
$sca = isset($_GET['sca']) ? clean_xss_tags($_GET['sca']) : '';
$target_board = get_board_db($my_table);
$categories = ($target_board['bo_use_category']) ? explode('|', $target_board['bo_category_list']) : array();
$safe_write_table = $g5['write_prefix'] . $my_table;
?>
<!-- 1. 탭 메뉴 영역 -->
<div class="main-tab-wrapper">
<a href="javascript:void(0);" data-sca="" class="main-tab-item <?php echo ($sca == '') ? 'active' : ''; ?>">
전체 수업
</a>
<?php
if (!empty($categories) && is_array($categories)) {
foreach ($categories as $cate) {
$cate = trim($cate);
if (!$cate) continue;
// [핵심 1] 2단 분류(대 > 소) 구조여도 1단 대분류 이름만 가지고 매칭합니다.
// [핵심 2] LIKE 조건문으로 실제 이 대분류 아래에 등록된 원글(wr_is_comment=0)이 있는지 검사합니다.
$escape_cate = addslashes($cate);
$sql = " SELECT COUNT(*) as cnt FROM `{$safe_write_table}` WHERE (ca_name = '{$escape_cate}' OR ca_name LIKE '{$escape_cate}%') AND wr_is_comment = 0 ";
$row_count = sql_fetch($sql, false);
// [핵심 3] 실제 등록된 글이 0개라면 버튼을 화면에 만들지 않고 패스합니다 (자동 다이어트)
if (!$row_count || (int)$row_count['cnt'] === 0) {
continue;
}
$active_class = ($sca === $cate) ? 'active' : '';
?>
<a href="javascript:void(0);" data-sca="<?php echo urlencode($cate); ?>" class="main-tab-item <?php echo $active_class; ?>">
<?php echo $cate; ?>
</a>
<?php
}
}
?>
</div>
<!-- 2. 게시물 내용물 출력 구역 (울타리 내부에 있어 한 몸처럼 즉시 바뀜) -->
<h2 class="sound_only">최신글</h2>
<p> </p>
<div class="latest_top_wr" style="max-width:1200px; margin:0 auto; width:100%; padding:0;">
<?php
echo '<div class="main_lt_section" style="margin-bottom:-10px; clear:both;">';
// 최신글 스킨이 현재 비동기로 요청된 분류(sca)를 매번 정상 인식하도록 강제 매핑
$_GET['sca'] = $sca;
echo latest('theme/pic_list1', $my_table, 4, 25);
echo '</div>';
?>
</div>
</div>
<!-- ========================================== -->
<!-- [핵심 4] 화면 깜빡임 차단 + 클릭 시 마우스 스크롤 높이 제자리 고정 스크립트 -->
<!-- ========================================== -->
<script>
$(document).ready(function() {
$(document).off('click', '#ajax-lesson-wrapper .main-tab-item').on('click', '#ajax-lesson-wrapper .main-tab-item', function(e) {
e.preventDefault();
var $this = $(this);
var sca = $this.data('sca');
// 클릭한 순간 마우스 스크롤 Y축 높이를 기억 장치에 임시 저장 (화면 제자리 고정용)
var currentScrollY = window.scrollY;
// 활성화 탭 디자인 즉시 변경
$('#ajax-lesson-wrapper .main-tab-item').removeClass('active');
$this.addClass('active');
// 현재 주소창 환경 정보를 통째로 복제 (파일명과 기존 파라미터 강제 유지)
var currentUrl = new URL(window.location.href);
if (sca) {
currentUrl.searchParams.set('sca', decodeURIComponent(sca));
} else {
currentUrl.searchParams.delete('sca');
}
var browserUrl = currentUrl.pathname + currentUrl.search;
// 그누보드 엔진 캐시 파괴용 실시간 타임스탬프 주입
currentUrl.searchParams.set('_', new Date().getTime());
var requestUrl = currentUrl.pathname + currentUrl.search;
// 큰 울타리 전체를 새로고침하여 내용물 즉시 동기화
$('#ajax-lesson-wrapper').load(requestUrl + ' #ajax-lesson-wrapper > *', function() {
// 통신 완료 후 브라우저 주소창 주소 갱신
history.pushState(null, null, browserUrl);
// [중요] 비동기로 데이터가 새로 그려진 후, 기억해 둔 마우스 높이로 강제 고정하여 위로 튀는 현상 원천 차단
window.scrollTo(0, currentScrollY);
});
});
});
</script>
미리보기 > https://ysmoto.kr/ys2/
미리보기 > https://ysmoto.kr/ys2/index1.php
미리보기 > https://ysmoto.kr/ys2/
미리보기 > https://ysmoto.kr/ys2/index1.php
분류명 출력 (게시글이 없는 분류는 출력 안함)
아래 테이블명 변경 후 사용 하시면 됩니다.
<?php
// ==========================================
// [여기만 수정하세요] 연동할 게시판 테이블명을 적어줍니다.
// ==========================================
$my_table = '테이블명';
?>
<!-- 깜빡임 없이 제자리에서 바꾸기 위해 전체를 하나의 ID(#ajax-lesson-wrapper)로 감쌉니다 -->
<div id="ajax-lesson-wrapper">
<?php
global $g5;
$sca = isset($_GET['sca']) ? clean_xss_tags($_GET['sca']) : '';
$target_board = get_board_db($my_table);
$categories = ($target_board['bo_use_category']) ? explode('|', $target_board['bo_category_list']) : array();
$safe_write_table = $g5['write_prefix'] . $my_table;
?>
<!-- 1. 탭 메뉴 영역 -->
<div class="main-tab-wrapper">
<a href="javascript:void(0);" data-sca="" class="main-tab-item <?php echo ($sca == '') ? 'active' : ''; ?>">
전체 수업
</a>
<?php
if (!empty($categories) && is_array($categories)) {
foreach ($categories as $cate) {
$cate = trim($cate);
if (!$cate) continue;
// [핵심 1] 2단 분류(대 > 소) 구조여도 1단 대분류 이름만 가지고 매칭합니다.
// [핵심 2] LIKE 조건문으로 실제 이 대분류 아래에 등록된 원글(wr_is_comment=0)이 있는지 검사합니다.
$escape_cate = addslashes($cate);
$sql = " SELECT COUNT(*) as cnt FROM `{$safe_write_table}` WHERE (ca_name = '{$escape_cate}' OR ca_name LIKE '{$escape_cate}%') AND wr_is_comment = 0 ";
$row_count = sql_fetch($sql, false);
// [핵심 3] 실제 등록된 글이 0개라면 버튼을 화면에 만들지 않고 패스합니다 (자동 다이어트)
if (!$row_count || (int)$row_count['cnt'] === 0) {
continue;
}
$active_class = ($sca === $cate) ? 'active' : '';
?>
<a href="javascript:void(0);" data-sca="<?php echo urlencode($cate); ?>" class="main-tab-item <?php echo $active_class; ?>">
<?php echo $cate; ?>
</a>
<?php
}
}
?>
</div>
<!-- 2. 게시물 내용물 출력 구역 (울타리 내부에 있어 한 몸처럼 즉시 바뀜) -->
<h2 class="sound_only">최신글</h2>
<p> </p>
<div class="latest_top_wr" style="max-width:1200px; margin:0 auto; width:100%; padding:0;">
<?php
echo '<div class="main_lt_section" style="margin-bottom:-10px; clear:both;">';
// 최신글 스킨이 현재 비동기로 요청된 분류(sca)를 매번 정상 인식하도록 강제 매핑
$_GET['sca'] = $sca;
echo latest('theme/pic_list1', $my_table, 4, 25);
echo '</div>';
?>
</div>
</div>
<!-- ========================================== -->
<!-- [핵심 4] 화면 깜빡임 차단 + 클릭 시 마우스 스크롤 높이 제자리 고정 스크립트 -->
<!-- ========================================== -->
<script>
$(document).ready(function() {
$(document).off('click', '#ajax-lesson-wrapper .main-tab-item').on('click', '#ajax-lesson-wrapper .main-tab-item', function(e) {
e.preventDefault();
var $this = $(this);
var sca = $this.data('sca');
// 클릭한 순간 마우스 스크롤 Y축 높이를 기억 장치에 임시 저장 (화면 제자리 고정용)
var currentScrollY = window.scrollY;
// 활성화 탭 디자인 즉시 변경
$('#ajax-lesson-wrapper .main-tab-item').removeClass('active');
$this.addClass('active');
// 현재 주소창 환경 정보를 통째로 복제 (파일명과 기존 파라미터 강제 유지)
var currentUrl = new URL(window.location.href);
if (sca) {
currentUrl.searchParams.set('sca', decodeURIComponent(sca));
} else {
currentUrl.searchParams.delete('sca');
}
var browserUrl = currentUrl.pathname + currentUrl.search;
// 그누보드 엔진 캐시 파괴용 실시간 타임스탬프 주입
currentUrl.searchParams.set('_', new Date().getTime());
var requestUrl = currentUrl.pathname + currentUrl.search;
// 큰 울타리 전체를 새로고침하여 내용물 즉시 동기화
$('#ajax-lesson-wrapper').load(requestUrl + ' #ajax-lesson-wrapper > *', function() {
// 통신 완료 후 브라우저 주소창 주소 갱신
history.pushState(null, null, browserUrl);
// [중요] 비동기로 데이터가 새로 그려진 후, 기억해 둔 마우스 높이로 강제 고정하여 위로 튀는 현상 원천 차단
window.scrollTo(0, currentScrollY);
});
});
});
</script>
미리보기 > https://ysmoto.kr/ys2/
미리보기 > https://ysmoto.kr/ys2/index1.php
총 1명이 반응했습니다
|
댓글을 작성하시려면 로그인이 필요합니다.
댓글 1개