게시판을 꾸미다 보면 게시판 설정을 자주 사용합니다.
그래서 설정 Wizard 버턴을 적용하여 사용하면 편하죠.
근데 위의 글 에서 처럼 부하가 걸린다고 하니, 이 부분을 해소 하고자 게시판 상단에 Wizard 설정을 출력해서 해결하는 팁 입니다.
기능상 "사용 안함"만 적용되며 Wizard를 사용 설정 할려면 해당 게시판 설정으로 이동 합니다.

사용 안함 체크하면 Wizard 버턴 사라짐,
근데 사용할려면 "사용중"체크시 게시판 설정으로 이동합니다.
"위저드 사용 > 관리자만(기본)"에 체크하면 됩니다.
설정 화면은 10초후 자동으로 사라집니다.
<!--// Wizard -->
<block cond="$grant->manager && !$mi->wizard=='N' && !$mo">
<load target="css/wizard.css" />
<include target="_wizard.php" />
</block>
<block cond="!$oDocument->isExists() && $grant->manager && !$mo">
<!--// Wizard 사용 설정 -->
<include target="_wizardsetting.html" />
</block>
<div class="wizard-setting-panel">
<span class="setting-label">위저드 설정</span>
<span class="radio-group">
<label class="radio-label">
<input type="radio" name="wizard_opt" value="" checked="checked"|cond="$mi->wizard != 'N'" onchange="location.href='<?php echo getUrl('act', 'dispBoardAdminSkinInfo'); ?>'">
<span>사용중(✔ 설정 바로가기)</span>
</label>
<label class="radio-label">
<input type="radio" name="wizard_opt" value="N" checked="checked"|cond="$mi->wizard == 'N'" onchange="exeWizardUpdate(this.value)">
<span>사용 안함</span>
</label>
</span>
</div>
<style>
.wizard-setting-panel { display: inline-flex; align-items: center; padding: 5px 10px; margin:5px; background: #f8f9fa; border: 1px solid #dee2e6; border-radius: 4px; width: fit-content; }
.wizard-setting-panel span { font-size:13px; }
.setting-label { font-weight: 600; margin-right: 20px; color: #333; }
.radio-group { display: flex; gap: 15px; }
.radio-label { display: flex; align-items: center; cursor: pointer; font-size: 13px; }
.radio-label input { margin-right: 5px; }
</style>
<script>
function exeWizardUpdate(val) {
if(!confirm('설정을 변경하시겠습니까?')) return;
var $ = jQuery;
// 1. _wizard.php가 로드한 원본 폼을 찾습니다.
var $originForm = $('#bd_wizard_scroll').find('form').first();
if(!$originForm.length) {
alert('원본 설정 폼을 찾을 수 없습니다. _wizard.php가 정상 로드되었는지 확인해주세요.');
return;
}
// 2. 폼 데이터를 복사하여 객체화합니다.
var formData = $originForm.serializeArray();
// 3. 복사된 데이터에서 wizard 값만 사용자가 선택한 값으로 강제 교체합니다.
var isReplaced = false;
for (var i = 0; i < formData.length; i++) {
if (formData[i].name === 'wizard') {
formData[i].value = val;
isReplaced = true;
break;
}
}
if(!isReplaced) formData.push({ name: 'wizard', value: val });
// 4. 전송 (가장 범용적인 $.post 사용)
$.post(request_uri, formData, function(data) {
// 성공 시 페이지를 새로고침하여 적용된 내용을 확인합니다.
alert('설정이 저장되었습니다.');
location.reload();
}).fail(function() {
// 오류가 나더라도 실제로는 저장되었을 수 있으므로 확인을 위해 새로고침합니다.
alert('요청을 완료했습니다.');
location.reload();
});
}
// 10초 후 패널 제거
setTimeout(function() {
var panel = document.querySelector('.wizard-setting-panel');
if(panel) {
panel.style.transition = 'opacity 0.5s';
panel.style.opacity = '0';
setTimeout(function() {
panel.remove();
}, 500);
}
}, 10000);
</script>
Tip이 도움이 되었다면 댓글과 평가 부탁합니다.
Tip에 대한 궁금한 점은 댓글로 남겨 주시면 성심껏 답변 드립니다. 
