2012-09-13 1 views
0

임에 레이아웃에 여러 개의 js 파일을 추가하려고합니다. 나는 이것을 도우미에서하고 싶다.
다음은 내 도우미의 코드입니다 :젠드 : 레이아웃에 여러 개의 js 파일 추가

// class Zend_View_Helper_LoadJs extends Zend_View_Helper_Abstract 


public function loadJs() 
{ 
    $dir = '../public/js';  
    $dir = scandir($dir); 

    $jsFiles = array(); 

    foreach($dir as $key => $value) 
    { 
     if($value != '.' && $value != '..') 
      $jsFiles[] = $value; 
    } 


    if(is_array($jsFiles)){ 
     foreach($jsFiles as $key => $val) 
     { 
      $this->view->headScript()->appendFile($this->view->baseUrl('js/'.$val)); 
     } 
    } 

} 

그리고 내 레이아웃에, 내가 가진 :

<?php $this->loadJs(); ?> 

문제는 어떤 JS 파일을 추가하지 않습니다.
내가 전에 에코 넣을 경우 :

echo $this->view->headScript()->appendFile($this->view->baseUrl('js/'.$val)); 

또는

<?php echo $this->loadJs(); ?> 

다음 스크립트가 몇 번에 동일한 파일을 추가

.
누군가 내가 뭘 잘못하고 있다고 말할 수 있습니까?

+2

왜'appendFile()'메소드를 체인으로 연결하지 않았습니까? JavaScript 파일이 너무 많아서 도우미가 필요한 경우 대신 집계 파일을 작성하십시오. –

+0

나는 그것을 얻는다. 그는 레이아웃이나 부트 스트랩을 편집 할 필요없이 javascript 파일을 교환 할 수 있기를 원한다. – RockyFord

답변

0

는 (코멘트 변화를 보여)이 시도 :
[편집]
좋아, 내가 그것을 가지고 생각합니다. 이 헬퍼를 사용하여 headscript() 스택을 채우기 위해서는 결과를 뷰 렌더러에 등록해야합니다.

public function loadJs() { 
     $dir = '../public/js'; 
     $dir = scandir($dir); 
     //get bootstrap 
     $bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap'); 
     //get current view renderer 
     $view = $bootstrap->getResource('view'); 
     $jsFiles = array(); 

     foreach ($dir as $key => $value) { 
      if (!is_dir($value)) 
       $jsFiles[] = $value; 
     } 
     if (is_array($jsFiles)) { 
      foreach ($jsFiles as $key => $val) { 
       if (strpos($val, '.js') != FALSE) { 
        //assign file to headscript stack in the cuurent view renderer 
        $view->headScript()->appendFile($this->view->baseUrl('js/' . $val)). "\n"; 
       } 
      } 
     } 
    } 

이제 headscript()을 레이아웃에 표시하면 이러한 파일이 한 번 렌더링됩니다. 내가 부트 스트랩에 init() 내 생각을 그냥 정보를 원하시면

: 내가 좋아하는 레이아웃에 도우미를 사용하여 다음

//truncated because it's too long... protected function _initView() { //Initialize view $view = new Zend_View(); //set doctype for default layout $view->doctype(Zend_Registry::get('config')->resources->view->doctype); //set css includes $view->headLink()->setStylesheet('/css/normalize.css'); //add javascript files $view->headScript()->setFile('/javascript/modernizr.js'); //add it to the view renderer $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper( 'ViewRenderer'); $viewRenderer->setView($view); //Return it, so that it can be stored by the bootstrap return $view; } 

: '이런 식으로 일을

<?php echo $this->doctype() . "\n" ?> 
<?php $this->LoadJs() ?> 
<html> 
    <head> 
     <?php echo $this->headTitle() . "\n"; ?> 
     <?php echo $this->headMeta() . "\n"; ?> 
     <?php echo $this->headLink() . "\n" ?> 
     <?php echo $this->headscript() . "\n" ?> 

     <!--[if IE]><script type="text/javascript" src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]--> 
    </head> 

, LoadJs() 아무튼 아무것도 직접 렌더링하지 않고 대신 파일을 headscript() 자리 표시 자에 덤프합니다.

내 결과 :

<script type="text/javascript" src="/javascript/modernizr.js"></script> <!--added by bootstrap --> 
<script type="text/javascript" src="/javascript/mediaelement/build/jquery.js"></script> <!-- added by bootstrap --> 
<script type="text/javascript" src="http://schoenwolf.local/javascript/modernizr.js"> </script><!-- added by LoadJs --> 

나는 그것뿐만 아니라 당신을 위해 작동 바랍니다.

+0

같은 효과. 나는 6 개의 js 파일을 가지고 있으며,이 스크립트는 6 번 모든 파일을 추가한다. – user1409508