2012-09-13 63 views
0

我試圖添加多個js文件到佈局。我想在幫手裏做這個。
這裏是我的幫手代碼:Zend:添加多個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