include 시킨 자리 위치 변동 원인 학문적 궁금증? 채택완료

G54 이상 버전에서, 위 링크의 설명대로 alarm.php를 </head> 앞에 인클루드 시키면,

alarm.php의 소스(아래참고)들이 기존 add_javascript() 함수로 인클루드시키는 스크립트보다 위로 올라가

(즉, 아래 소스들이 jquery-1.12.4.min.js 보다 앞에 인클루드 되어]

jQuery 관련 기능이 먹통이 됩니다. 

 

인클루드 시킨 자리인</head> 바로 앞에 정상적으로 인클루드 시키려면 어떻게 해야 할까요?

alarm.php 파일의 CSS 및 JS를 add_ 형식으로 변경해도 나머지 소스들이 위로 올라가 제대로 작동 않더라구요.

 

PS. alarm.php 소스

Copy
<?php
if (!defined('_GNUBOARD_')) exit; //개별 페이지 접근 불가
// 간격
//echo help('기본 60000ms, 밀리초(ms)는 천분의 1초. ex) 60초 = 60000ms');
$wset['delay'] = '60000';
$wset['delay'] = (isset($wset['delay']) && $wset['delay'] >= 60000) ? $wset['delay'] : 60000;
$alarm_url = G5_PLUGIN_URL."/alarm";
?>

<?php 
//특정 페이지에서 alarm 표시안함 
$except_alarm_page = array('memo.php',
                    'point.php',
                    'response.php',
                    'follow.php',
                    'scrap.php',
                    'mypost.php',
                    'myphoto.php',
                    'shopping.php',
                    'coupon.php',
                    'memo_view.php',
                    'memo_form.php');
if (!in_array(basename($_SERVER['PHP_SELF']), $except_alarm_page)) 
{ 
    if ($member['mb_id'])
    {        
?>

<link rel="stylesheet" href="<?php echo $alarm_url ?>/alarm.css">
<script>
var memo_alarm_url = "<?php echo $alarm_url;?>";
var audio = new Audio("<?php echo $alarm_url;?>/memo_on.mp3");  // 임의 폴더 아래에 사운드 파일을 넣고 자바스크립트 동일경로 
</script>
<script src="<?php echo $alarm_url ?>/alarm.js"></script>
<script type="text/javascript">
    $(function() {
        setInterval(function() {
            check_alarm();
        }, <?php echo $wset['delay'] ?>);
        check_alarm();
    });
</script>
<?php } ?>
<?php } ?>

 

 

PS. add_javascript 함수

https://github.com/gnuboard/gnuboard5/blob/dbc8e1676a4cd3561a74f1d756320a7d82b45bb4/lib/common.lib.php#L2530

답변 2개

채택된 답변
+20 포인트

add_script()가 실제 처라 되는 부분을 보니

</script> 바로 앞에 넣는 듯한데

그렇다면, head.sub.php 이외에는 모두

add_script()를 써야 한다는 거네요.

                $add_version_str = (stripos($js[1], $http_host) !== false) ? '?ver='.G5_JS_VER : '';

                $js[1] = preg_replace('#\.js([\'\"]?>)<\/script>$#i', '.js'.$add_version_str.'$1</script>', $js[1]);

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

trick을 서보자면
alarm.php에서는
</script>
대신에
</script 공백>
이렇게 하면 어떨까요
경로 정의된 PHP 코드까지 고려하면 그냥 body 상단에 넣고 써야 할 것 같네요.
신경써 답변주셔서 감사합니다.
말씀하신 방법대로 모든 소스를 add_로 처리해버렸더니 정상 작동하네요.
감사합니다.

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

 

alarm.php에서도 add_javascript() 를 사용하도록 하면 되지 않을까요.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

본문에 적은 것처럼, alarm.php에 있는 외부스크립트 2개를 말씀하신 방법으로 처리했더니,
해당 외부스크립트만 위치 바뀌고 나머지 코드들은 위로 올라가버려서 작동 않더라구요.

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

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고