2012-08-31 28 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> 

相关问题