[최신글 12/13] 개발 ⑤ 확장 결과를 스킨으로 출력·파일 배치 — DXCMS
키워드: my_latest_render, extend/top, 인기글 위젯, 파일 배치, 스킨 재사용 표기: (소스)=코드 확인·실행 검증, (README)=README 기재, (일반)=일반 지식
확장 조회 결과($posts)를 기존 최신글 스킨으로 그대로 출력하는 함수입니다.
function my_latest_render($posts, $skin = 'list', $title = '', $icon = '', $more_url = '')
{
$skinFile = DxTheme::getInstance()->resolveLatestSkin($skin);
if (!$skinFile) return;
$show_excerpt = false;
include $skinFile; // 스킨이 쓰는 변수: $posts $title $icon $more_url $show_excerpt
}
- 스킨이 쓰는 변수($posts, $title, $icon, $more_url, $show_excerpt)만 준비하면 됩니다. (8/13)
인기글 위젯 만들기 (사용)
<?php
$hot = my_posts('free', array('order' => 'hot', 'days' => 30, 'limit' => 5));
my_latest_render($hot, 'list', '이달의 인기글', '🔥', dx_base_url('free'));
?>
- 실행 확인: 'list' 스킨으로 정상 출력되고 제목이 표시됩니다.
파일 배치 (extend/top 권장)
- 함수 정의는 extend/top/60_my_latest.php 한 파일에 모읍니다. extend 폴더는 파일명 오름차순으로 자동 실행되고, 파일에 오류가 있어도 다른 파일에 영향을 주지 않습니다. (README)
- 파일 첫 줄: if (!defined('DX_CMS')) exit;
- 각 함수는 if (!function_exists('이름')) { ... } 로 감싸 중복 정의를 막습니다.
- 정의 순서: my_can_read → my_format_rows → my_posts / my_latest / my_merge_latest / my_latest_cached → my_latest_render
- 함수 이름은 my_ 대신 사이트 고유 접두사로 바꿔 충돌을 피하세요.
- 훅(dx_add_hook) 등록 코드도 같은 파일에 둡니다.
- 위 함수들은 코어 파일을 수정하지 않으므로 DXCMS 업데이트의 영향을 받지 않습니다. (일반)
다음: 13/13 점검과 문제 해결
@디엑스