사이트 코드와 홈페이지 위젯 추가 v1.5.34
This commit is contained in:
47
server/plugins/site-custom-code.js
Normal file
47
server/plugins/site-custom-code.js
Normal file
@@ -0,0 +1,47 @@
|
||||
import { getSiteSettings } from '../repositories/content-repository'
|
||||
|
||||
/**
|
||||
* 공통 코드 삽입을 건너뛸 서버 경로인지 확인한다.
|
||||
* @param {import('h3').H3Event} event - 요청 이벤트
|
||||
* @returns {boolean} 삽입 제외 여부
|
||||
*/
|
||||
const shouldSkipCustomCode = (event) => {
|
||||
const path = String(event?.path || event?.node?.req?.url || '/')
|
||||
|
||||
return path.startsWith('/admin')
|
||||
|| path.startsWith('/api')
|
||||
|| path.startsWith('/uploads')
|
||||
|| path.startsWith('/_nuxt')
|
||||
|| path.startsWith('/ads.txt')
|
||||
}
|
||||
|
||||
/**
|
||||
* HTML 조각을 응답 배열에 안전하게 추가한다.
|
||||
* @param {Array<string>} target - Nitro HTML 조각 배열
|
||||
* @param {string} code - 삽입할 HTML 코드
|
||||
* @returns {void}
|
||||
*/
|
||||
const pushHtmlCode = (target, code) => {
|
||||
const trimmed = String(code || '').trim()
|
||||
|
||||
if (!trimmed || !Array.isArray(target)) {
|
||||
return
|
||||
}
|
||||
|
||||
target.push(trimmed)
|
||||
}
|
||||
|
||||
/**
|
||||
* 공개 HTML 응답에 관리자 설정의 헤더·푸터 코드를 삽입한다.
|
||||
*/
|
||||
export default defineNitroPlugin((nitroApp) => {
|
||||
nitroApp.hooks.hook('render:html', async (html, { event }) => {
|
||||
if (shouldSkipCustomCode(event)) {
|
||||
return
|
||||
}
|
||||
|
||||
const settings = await getSiteSettings()
|
||||
pushHtmlCode(html.head, settings.customHeadCode)
|
||||
pushHtmlCode(html.bodyAppend, settings.customFooterCode)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user