如何使用带有Zend Framework的headScript添加脚本文件?

时间:2012-08-31 02:07:00

标签: zend-framework layout head

我正在开发一个新的zend框架应用程序,当我刚刚为我的layout.phtml文件和Bootstrap _initScript方法编写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" );
}

正如您所看到的,它是非常普通的代码!

任何人都可以帮我找出这里发生了什么?

4 个答案:

答案 0 :(得分:7)

您正在尝试添加“文件”而不是“脚本”。

将Bootstrap.php更改为:

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

同时检查headScript reference

有任何问题吗? :)

答案 1 :(得分: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->语法在引导程序中的效果如何,但我怀疑它有一些问题。

答案 2 :(得分: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); ?>

答案 3 :(得分: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>