CMS/프레임워크 | Rhymix 2.1 |
---|---|
개발 언어 | PHP 7.4 |
예전에 같은 내용 문의 했을때 받은 조언대로 제목 대신 확장 변수 등에 저장하려고 합니다.
제목 입력칸에 250자를 넘게 입력하면, -> '확장변수에 그대로 저장 + 제목에는 250자까지만 저장' 이렇게 하려고 하는데
등록하는 순간 글자수 체크하는 로직이 엄청 빨리 작동을 하는지 이렇게 저렇게 해봐도,
등록을 누르는 순간 1~250자 이내로 입력하고 하네요.
AI한테 계속 시키다보면 결국 하긴 할텐데, 이런 경우 간단히 가능한 방법이 있는데 라이믹스를 잘 이해하지 못해서 엄청 멀리가는 경우가 있어서 일단 롤백하고 조언을 구해봅니다.
<div class="ppwrite_title use_ctg">
<textarea rows="1" class="ppip autosize" name="title" id="subject" style="height: 89px;"></textarea>
<!-- <textarea rows="1" class="ppip autosize" name="title" id="subject" placeholder="짧은 글은 여기에 (본문작성 하지마세요)" required></textarea> -->
<div class="title_conter">
<span class="title_count">201</span> <span>/</span> <span>350</span>
</div>
</div>
댓글 4
1. 게시글 제목은 DB 컬럼을 수정해서 250자를 1000자 등으로 변경할 수 있습니다.
2. 하지만 이를 수정하고 싶지 않은 경우를 대비해 아래와 같이 우회 방법을 제안 드립니다.
게시판 write_form.html 최 하단에 자바스크립트 코드를 삽입합니다.
<script>
function submit_check(e, window) {
//게시판 스킨에 따라 제목 부분의 input id가 다를 수 있습니다.
var titleInput = document.getElementById("title");
var originalTitle = titleInput.value;
// 250자를 초과하면
if (originalTitle.length > 250) {
// 전체 원본을 extra_vars1에 저장 (확장변수 name의 값을 잘 체크하시기 바랍니다.)
var extraInput = document.querySelector('input[name="extra_vars1"]');
if (extraInput) {
extraInput.value = originalTitle;
}
// 제목에는 250자까지 자른 값만 유지
titleInput.value = originalTitle.substring(0, 250);
}
}
</script>
게시판의 submit버튼에 type은 submit. onclick에 submit_check();를 추가합니다.
예) <button type="submit" onclick="return submit_check();" class="btn_insert">
이제 제목에는 300자로 입력하면 250자 기준으로 잘리고, 확장변수에는 원래 제목이 입력됩니다.
맙소사 이렇게 상세하게!! 오늘 시도해보고 후기남기겠습니다!
적용 후기
1. 잘되었습니다!
2. 단, 제목에 줄바꿈이 있거나 특수 문자가 있으면 250자를 초과하는 경우가 발생해서, 등록 버튼 누르자 마자는 통과하는데 저장되기 직전에? title column variable 250 대충 이런 문구가 나오면서 에러가 나서 줄바꿈처리 넣고 조금 여유있게 컷팅해서 처리했습니다.
3. 'input[name="extra_vars1"]' 자리에 확장변수ID를 넣으라는 것인줄 알고 조금 헤맸습니다. ㅎ
감사합니다!
폼 제출(submit) 시점에 처리하려고 하면 실행 순서에 따라 동작이 오락가락할 수 있습니다. 코어와 다른 자료들도 모두 submit 시점에 끼어들려고 하기 때문이지요. 웬만하면 폼 제출 시점이 아닌 입력 시점에 미리 처리해 두는 것을 추천드립니다.
A 입력란의 내용 일부를 B 입력란으로 복사하는 것 뿐이라면, A 입력란에 onchange, oninput, onpaste 등의 이벤트를 걸어서 복사 작업을 하는 방법이 가장 안정적일 것입니다. 누가 뭐래도 A 입력란과 관련된 작업이니, A 입력란 단에서 처리하고 끝내야지요. 상위에 있는 폼에게 떠넘기려고 하면 안돼요.