자, 서명을 그룹에 맞게 더 잘 작동하게 만들고 싶은 분들을 위해 (특히 유료 업그레이드/구독의 일부로 서명을 사용하려는 경우), 훨씬 더 나은 결과를 내어 업그레이드를 더 많이 유도할 수 있다고 생각하는 코드(그리고 그 배경)를 공유합니다. 여러 번 시도해야 했지만, 지금은 잘 작동하고 있습니다. “XXXXX” 부분을 대체해야 할 위치를 주의 깊게 확인하세요.
저는 다음 두 가지를 달성하고 싶었습니다:
A) 서명을 비활성화할 수 있는 기능을 제거하고 싶었습니다. 즉, 업그레이드를 한 사용자는 자신의 서명이 모든 사람에게 보일 것이라는 점을 알게 됩니다.
B) 서명을 생성할 수 있는 권한을 특정 그룹에만 부여하고 싶었습니다.
-
관리자 > 외관 > 테마 및 컴포넌트 > 컴포넌트 > 설치 > 새로 만들기로 이동하세요.
-
< head > 탭에 다음 코드를 추가하세요:
<script>
// 먼저 기본 페이지 구조가 로드되기를 기다립니다
document.addEventListener("DOMContentLoaded", function() {
// 관찰자 설정
const observer = new MutationObserver(function(mutations) {
// 페이지의 모든 제어 레이블 찾기
const labels = document.querySelectorAll('label.control-label');
labels.forEach(label => {
// 특정 서명 레이블 찾기
if (label.textContent.trim() === 'Enable Signatures') {
// 레이블과 체크박스를 모두 포함하는 메인 컨테이너를 찾아 숨기기
const controlGroup = label.closest('.control-group') || label.parentElement;
if (controlGroup) {
controlGroup.style.display = 'none';
}
}
});
});
// 이제 body가 존재한다는 것을 알기 때문에 관찰 시작
observer.observe(document.body, { childList: true, subtree: true });
});
</script>
3. css 탭에 다음 코드를 추가하세요 (XXXXX를 그룹 이름으로 대체하세요):
/* 모든 사용자에게 서명 섹션을 숨김 */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: none !important;
}
/* body에 'user-is-XXXXX' 클래스가 존재할 경우에만 표시 */
body.user-is-XXXXX .user-preferences .control-group.signatures,
body.user-is-XXXXX .user-preferences .signature-preferences,
body.user-is-XXXXX .user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: block !important;
}
- 위에서 언급한 첫 번째 블록 아래에 < head > 태그에 다음 코드를 추가하세요 (XXXXX를 그룹 이름으로 대체하세요):
<script>
(function() {
const checkAccess = () => {
// Discourse는 현재 사용자의 그룹을 이 전역 객체에 저장합니다
const user = window.Discourse && window.Discourse.User && window.Discourse.User.current();
if (user && user.groups) {
// 그룹 이름 중 "XXXXX"와 일치하는 것이 있는지 확인
const is XXXXX = user.groups.some(g => g.name === 'XXXXX');
if (isXXXXX) {
document.body.classList.add('user-is-XXXXX');
}
}
};
// 즉시 실행
checkAccess();
// 사용자가 페이지 사이를 이동할 때마다 실행
document.addEventListener('discourse-ready', checkAccess);
// 백업: 느린 로드를 잡기 위해 1초 후 다시 실행
setTimeout(checkAccess, 1000);
})();
</script>
- 위에서 언급한 첫 번째 블록 아래에 css 탭에 다음 코드를 추가하세요 (XXXXX를 그룹 이름으로 대체하세요):
/* 모든 사용자에게 서명 섹션을 숨김 */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: none !important;
}
/* body에 'user-is-XXXXX' 클래스가 존재할 경우에만 표시 */
body.user-is-XXXXX .user-preferences .control-group.signatures,
body.user-is-XXXXX .user-preferences .signature-preferences,
body.user-is-XXXXX .user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: block !important;
}
완료.
저는 개발자가 아닙니다. 제가 아는 것은 제 사이트에서 이 코드가 100% 잘 작동한다는 것뿐입니다.
또한, 플러그인 개발자에게 드리는 말씀입니다 – 서명 문자 수를 제한할 수 있는 기능이 있으면 좋겠습니다. 많은 시도를 해봤지만 아무것도 작동하지 않았습니다.