테스트 사이트 - 개발 중인 베타 버전입니다

회원필드 type 수정하기

· 2년 전 · 1608 · 6

 

1. 우리가 회원멤버 필드 mb_1 부터 mb_10 까지의 input type 을 보면 text 로 지정되어 있는 것을 알 수 있습니다.

그런데 가령 5번 필드를 라디오버튼으로 바꾸려고 adm/member_form.php 수정을 시도하려고 코드를 보면...

엥 이게 웬걸? 루프를 10번 돌리는 for 문으로 작성되어 있는 걸 알 수 있습니다. 

그래서 그걸 쉽게 수정하는 방법입니다.

예제로 저는 mb_4 의 type 을 hidden 으로 mb_7 를 input 가 아니라 textarea 로 바꿔 보겠습니다.

 

3717943588_1692675073.7865.jpg

 

----------

 

2. 문서 가장 하단에 아래의 코드를 찾습니다.

 

<?php
run_event('admin_member_form_after', $mb, $w);

 

바로 그 위에 아래의 코드를 넣어보세요. 자바스크립트로 원하는 input 의 outerHTML 을 바꿔줍니다.

 

[code]

<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>

[/code]

 

----------

 

3. 위와 같은 식으로 라디오버튼 등도 넣어주시면 되구요.

참고로 outerHTML 은 제이쿼리에는 없습니다. 어거지로 만들 수야 있겠지요. parent 로 치고 올라가 거기서 자식에 해당하는 본인의 html() 를 바꿔주면 되긴 합니다.

단 outerHTML 의 경우 상위 엘레먼트가 body 일 때에는 사용하지 못하며 해당 엘레먼트의 바뀌기전 innerHTML 중 일부를 잠재적으로 가지고 있기 때문에 사용할 때 주의해야 하는데... 이 게시글에서 사용한 코드는 양쪽 모두에 해당하지 않습니다.

 

----------

 

4. 하지만 코어를 수정하자니 찝찝한 느낌이 듭니다. 다행히도 이 문서 하단에는 후킹코드가 하나 걸려 있습니다.

 

run_event('admin_member_form_after', $mb, $w);

 

그래서 아래의 hook 을 extend 디렉토리의 문서(에컨대 user.config.php) 또는 다른 문서를 만들어서 입력합니다.

주의할 점은 user.config.php 파일은 최신버전부터는 포함되지 않고 배포되고 있으니 참고하세요.

 

[code]

<?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');
?>

[/code]

 

----------

 

5. 그런데 run_event 의 파라미터를 보니 첫번째로 $mb 를 포함하고 있어서 굳이 global 로 선연해 줄 필요는 없을 것 같네요.

 

[code]

<?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);
?>

[/code]

 

----------

 

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);

 

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 6개

좋은 팁 감사드립니다. 저처럼 초보에겐 큰 도움이 됩니다 ^^ 추천꾹!
2년 전
@marty72 늘 감사합니다.
2년 전
잘 활용 하겠습니다. 감사 합니다.
2년 전
@들레아빠 감사합니다. 들레아빠님
2년 전

늘 감사드립니다.

2년 전

@크리스휘 감사합니다

게시글 목록

번호 제목
24318
24317
24315
24309
24294
24293
24277
24262
24260
24253
24251
24236
24233
24228
24226
24221
24214
24203
24201
24199
24196
24195
24194
24192
24191
24187
24185
24183
24172
24168