2012-08-31 61 views
2

我正在開發一個新的zend框架應用程序,並且當我剛剛爲我的layout.phtml文件和Bootstrap _initScript方法硬編碼headScript部分時,在沒有加載腳本之後查看源代碼...得到了一個真的很奇怪的結果。如何使用Zend Framework使用headScript添加腳本文件?

我得到這個:

<script type="text/javascript"> 
    //<!-- 
    /js/jquery-1.8.1.min.js //--> 

這裏是我的layout.phtml代碼:

<?php echo $this->doctype(); ?> 
<html> 
    <head> 
     <?php echo $this->headTitle(); ?> 
     <?php echo $this->headLink(); ?> 
     <?php echo $this->headScript(); ?> 
    </head> 
    <body> 
     <?php echo $this->layout()->content; ?> 
    </body> 
</html> 

這裏是我的bootstrap.php代碼:

protected function _initScript() 
{ 
    $this->view->headScript() 
     ->prependScript("/js/jquery-1.8.1.min.js"); 
} 

正如你可以看到它是非常普通的代碼!

任何人都可以幫我找出這裏發生了什麼?

+0

使用交互式調試器,您可以輕鬆找到它。 –

回答

7

您正在嘗試添加「文件」而不是「腳本」。

變化的bootstrap.php到:

protected function _initScript() 
{ 
    $this->view->headScript() 
     ->prependFile("/js/jquery-1.8.1.min.js", $type = 'text/javascript'); 
} 

還要檢查本作headScript reference

有任何問題嗎? :)

+1

沒有'$ type ='text/javascript''的結果相同。 –

+0

如果我遵循語義,請不要將我活活埋葬:D是的,對您的評論+1,它不是強制性的,但是,zend語義(編碼,約定和東西)要求我寫它。但是,在RAPID開發期間,錯過該部分是可以的! – Karma

+0

我的不好!事實上prependFile是正確的。 –

3

我發現,設置它通常是更好地得到視圖對象的視圖時,設置的佔位符值,然後返回視圖,類似:

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'); 
     $view->headLink()->appendStylesheet('/css/blueprint/src/liquid.css'); 
     $view->headLink()->appendStylesheet('/css/blueprint/src/typography.css'); 

     //add javascript files 
     $view->headScript()->setFile('/javascript/modernizr.js'); 
     $view->headScript()->appendFile('/javascript/jquery.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; 
    } 

我不知道有多好$this->view->語法從引導工作,但我懷疑它有一些問題。

+0

用於顯示邏輯但是,正如我們在問題中看到的,他顯示了HTML源輸出! – Karma

+1

我已經創建了一種方法來處理我的視圖這種方式:$ this-> view = Zend_Layout :: startMvc() - > getView();這就是我在Bootstrap裏面看到的方法。 –

+0

感謝您的教育。 *爲他的同事計劃一個惡作劇* – Karma

0

我使用Zendx_jQuery組件(http://framework.zend.com/manual/1.11/en/zendx.jquery.html),我發現它很方便,特別是如果您在表單中使用jQuery UI。

在bootstrap.php中:

protected function _initjQuery() 
{ 
    $this->bootstrap('view'); 
    $view = $this->getResource('view'); 
    $view->addHelperPath('ZendX/JQuery/View/Helper/', 'ZendX_JQuery_View_Helper_'); 
    return $view; 
} 

在我的佈局HTML標題:

$this->jQuery()->setLocalPath($this->baseUrl('js/libs/jquery-1.7.2.min.js')) 
     ->setUiLocalPath($this->baseUrl('js/libs/jquery-ui-1.8.20.custom.min.js')) 
     ->addStylesheet($this->baseUrl('css/ui-lightness/jquery-ui-1.8.20.custom.css')) 
     ->enable() 
     ->uiEnable(); 

/* I only print jquery css in the header */ 
<?= $this->jQuery()->setRenderMode(ZendX_JQuery::RENDER_STYLESHEETS); ?> 

在我的佈局體底部:

<?= $this->jQuery()->setRenderMode(ZendX_JQuery::RENDER_LIBRARY | ZendX_JQuery::RENDER_SOURCES | ZendX_JQuery::RENDER_JAVASCRIPT | ZendX_JQuery::RENDER_JQUERY_ON_LOAD); ?> 
0

試試這個:

<?php 

$this->headTitle('Your title'); 
$this->headScript()->headScript()->prependFile('/js/jquery.js'); 
$this->headLink()->appendStylesheet('/css/yourcss.css'); 

echo $this->doctype(); 
?> 

<html> 
<head> 
    <?php echo $this->headTitle(); ?> 
    <?php echo $this->headLink(); ?> 
    <?php echo $this->headScript(); ?> 
</head> 
<body> 
    <?php echo $this->layout()->content; ?> 
</body> 

相關問題