회원필드 type 수정하기 정보
회원필드 type 수정하기본문
1. 우리가 회원멤버 필드 mb_1 부터 mb_10 까지의 input type 을 보면 text 로 지정되어 있는 것을 알 수 있습니다.
그런데 가령 5번 필드를 라디오버튼으로 바꾸려고 adm/member_form.php 수정을 시도하려고 코드를 보면...
엥 이게 웬걸? 루프를 10번 돌리는 for 문으로 작성되어 있는 걸 알 수 있습니다.
그래서 그걸 쉽게 수정하는 방법입니다.
예제로 저는 mb_4 의 type 을 hidden 으로 mb_7 를 input 가 아니라 textarea 로 바꿔 보겠습니다.
----------
2. 문서 가장 하단에 아래의 코드를 찾습니다.
<?php
run_event('admin_member_form_after', $mb, $w);
바로 그 위에 아래의 코드를 넣어보세요. 자바스크립트로 원하는 input 의 outerHTML 을 바꿔줍니다.
<script>
document.querySelector("#mb_4").outerHTML = "<input type='hidden' name='mb_4' id='mb_4' value='<?php echo $mb['mb_4']; ?>'>";
document.querySelector("#mb_7").outerHTML = "<textarea name='mb_7' id='mb_7'><?php echo $mb['mb_7']; ?></textarea>";
</script>
----------
3. 위와 같은 식으로 라디오버튼 등도 넣어주시면 되구요.
참고로 outerHTML 은 제이쿼리에는 없습니다. 어거지로 만들 수야 있겠지요. parent 로 치고 올라가 거기서 자식에 해당하는 본인의 html() 를 바꿔주면 되긴 합니다.
단 outerHTML 의 경우 상위 엘레먼트가 body 일 때에는 사용하지 못하며 해당 엘레먼트의 바뀌기전 innerHTML 중 일부를 잠재적으로 가지고 있기 때문에 사용할 때 주의해야 하는데... 이 게시글에서 사용한 코드는 양쪽 모두에 해당하지 않습니다.
----------
4. 하지만 코어를 수정하자니 찝찝한 느낌이 듭니다. 다행히도 이 문서 하단에는 후킹코드가 하나 걸려 있습니다.
run_event('admin_member_form_after', $mb, $w);
그래서 아래의 hook 을 extend 디렉토리의 문서(에컨대 user.config.php) 또는 다른 문서를 만들어서 입력합니다.
주의할 점은 user.config.php 파일은 최신버전부터는 포함되지 않고 배포되고 있으니 참고하세요.
<?php
function admin_member_form_after_hook() {
global $mb;
echo "
<script>
document.querySelector('#mb_4').outerHTML = '<input type=\'hidden\' name=\'mb_4\' id=\'mb_4\' value=\'".$mb['mb_4']."\'>';
document.querySelector('#mb_7').outerHTML = '<textarea name=\'mb_7\' id=\'mb_7\'>".$mb['mb_7']."</textarea>';
</script>
";
}
add_event('admin_member_form_after', 'admin_member_form_after_hook');
?>
----------
5. 그런데 run_event 의 파라미터를 보니 첫번째로 $mb 를 포함하고 있어서 굳이 global 로 선연해 줄 필요는 없을 것 같네요.
<?php
function admin_member_form_after_hook($mb) {
echo "
<script>
document.querySelector('#mb_4').outerHTML = '<input type=\'hidden\' name=\'mb_4\' id=\'mb_4\' value=\'".$mb['mb_4']."\'>';
document.querySelector('#mb_7').outerHTML = '<textarea name=\'mb_7\' id=\'mb_7\'>".$mb['mb_7']."</textarea>';
</script>
";
}
add_event('admin_member_form_after', 'admin_member_form_after_hook', 1, 1);
?>
----------
6. 만일 $mb 가 5개의 파라미터 중 3번째라고 한다면 아래와 같은 식으로 하면 되겠죠.
3개까지만 적어주면 되겠습니다.
function admin_member_form_after_hook($one, $two, $mb)
..
add_event('admin_member_form_after', 'admin_member_form_after_hook', 3, 3);
!-->!-->!-->
4
댓글 6개
늘 감사드립니다.
@크리스휘 감사합니다