2012-04-12 4 views
2

자바 스크립트 파일에 대한 대기열 함수를 만들려고합니다. 기본적으로, 이것이 내가 원하는 방식입니다 : JavaScript로 보내진 모든 자바 스크립트를 페이지의 적절한 위치 (즉, 머리말이나 꼬리말, 의존성 스크립트)에 넣을 함수를 만들고 싶습니다. .PHP 함수를 스크립트 끝까지 실행 대기하는 방법

나는 말할 수 있기를 원합니다. 다음은 스크립트입니다. 큐에 넣어야하는 순서대로 큐에 추가하십시오. 그런 다음 모든 스크립트가 큐에 대기 한 후에 함수를 실행하여 해당 스크립트를 페이지에 기록하십시오. 지금까지 내 코드는 다음과 같습니다 : 다음

$scripts = array(); 
function enqueue_script($src="", $script_name="", $script_data="", 
$script_dependencies=array(), $force_header=false, $additional_atts=array()){ 
    global $scripts; 
    //run check for duplicates 

    //run check for dependencies already in the variable 

    //run checks to see if this script depends on other scripts 
    //$scripts array is saved in increments of 10 to allow for up to 
    //9 dependants 

    $i = count($scripts); 
    $i = ($i*10)+10; 
    $scripts[$i]['src'] = $src; 
    $scripts[$i]['script_name'] = $script_name; 
    $scripts[$i]['script_data'] = $script_data; 
    $scripts[$i]['dependencies'] = $script_dependencies; 
    $scripts[$i]['force_header'] = $force_header; 
    $scripts[$i]['atts'] = $additional_atts; 

} 
function write_scripts_header() { 
    global $scripts; 
    $echo = ""; 
    $atts = ""; 
    //create script tag for insertion in header 
    foreach($scripts as $s){ 
     if($s['force_header']){ 
      foreach($s['atts'] as $a => $v){ 
       $atts .= " {$a}='{$v}'"; 
      } 
      if($s['src']!=""){ 
       $echo .= "<script src='{$s['src']}'{$atts}></script>\n"; 
      } else { 
       $echo .= "<script{$atts}>{$s['script_data']}</script>\n"; 
      } 
     } 
    } 
    echo $echo;  
} 
function write_scripts_footer() { 
    global $scripts; 
    $echo = ""; 
    $atts = ""; 
    //create script tag for insertion in footer 
    foreach($scripts as $s){ 
     if(!$s['force_header']){ 
      foreach($s['atts'] as $a => $v){ 
       $atts .= " {$a}='{$v}'"; 
      } 
      if($s['src']!=""){ 
       $echo .= "<script src='{$s['src']}'{$atts}></script>\n"; 
      } else { 
       $echo .= "<script{$atts}>{$s['script_data']}</script>\n"; 
      } 
     } 
    } 
    echo $echo; 
} 

, HTML 파일 부분에 다음 HTML 부분이 마지막으로로드 된 경우이 잘 작동

<html> 
<head> 
<?php write_scripts_header();?> 
</head> 
<body> 
<?php write_scripts_footer();?> 
</body> 
</html> 

. 그러나 본문 태그 중간에 발생하는 포함이 있고 포함 할 경우 헤더에 필요한 경우 함수를 실행할 때 $scripts 변수가 아직 준비되지 않았습니다.

write_scripts_header()write_scripts_footer()을 실행하기 전에 모든 스크립트가 대기 상태가 될 때까지 대기 상태로 만들려면 어떻게해야합니까? 또는 .... 최종적으로 모든 스크립트를 문서에 쓸 수 있도록 스크립트 큐를 허용하는 더 좋은 방법이 있습니까?

답변

0

모두 동일한 파일에서 실행되는 경우 본문 내용을 변수 $ body로 만들고 먼저로드 한 다음 <body> 섹션에 반향시킬 수 있습니까?

0
change 
<html> 
<head> 
<?php write_scripts_header();?> 
</head> 
<body> 
<?php write_scripts_footer();?> 
</body> 
</html> 

print "<html><head>".write_scripts_header()."</head><body>".write_scripts_footer()."</body></html>"; 
0

그러한 Twig 같은 템플릿 엔진을 사용하여 시도하고 당신이 당신의 스크립트 배열을 작성을 완료 한 후 출력하여 HTML로 할 수 있습니다.

관련 문제