我有一个问题,试图追加javascript文件使用 headScript()->appendFile('file name') 与Zend.我有我的布局设置这样的:

    <?= $this->headScript()
    ->prependScript( 'BASE_URL = "' . $this->baseUrl() . '";' )
    ->appendFile( $this->baseUrl('js/lib/jquery/jquery-1.4.2.min.js') )
    ->appendFile( $this->baseUrl('js/admin.js') );

?>

然后,在我的控制我想添加一个额外的js文件中只为这个网页,如:

    $this->view->headScript()->appendFile( 'another/js/file.js' );

这种文件需要追加到什么是已经安装在的布局。然而,该文件获得加入 之前 其他'appendFile'的文件。我也试过

$this->headScript()->offsetSetFile(999, '/js/myfuncs.js');

但是,这仍然增加了该文件之前的其他文件。这不是我期望这一工作,特别是在使用offsetSetFile方法。我怎么可以添加这个文件 其他文件?谢谢。

有帮助吗?

解决方案

在答案是使用在layout.phtml和headScript()->prependFile headScript()->appendFile中的视图。

其他提示

我知道这是一个迟到的回答,但是!

如果你做appendFile或appendScript是使用一个可用的索引。因此

$this->headScript()->offsetSetFile(50, 'file');
$this->headScript()->appendFile('file2');

等同于

$this->headScript()->offsetSetFile(50, 'file');
$this->headScript()->offsetSetFile(51, 'file2');

此外,它是关键要注意的是,控制器代码获取视图/布局代码之前首先执行。因此,在你的情况你的附加使用的ID 1000,1001速战速决这仅仅是明确使用offsetSetFile你所有的追加实际。所以,你在你的布局代码如下所示:

<?= 
   $this->headScript()
      ->prependScript( 'BASE_URL = "' . $this->baseUrl() . '";' )
      ->offsetSetFile(500, $this->baseUrl('js/lib/jquery/jquery-1.4.2.min.js') )
      ->offsetSetFile(501, $this->baseUrl('js/admin.js') );
?>

我希望这有助于未来的Google员工

我发现,如果我前面加上“布局中的所有文件,然后我可以在我的控制器使用appendFile之后他们会出现。不幸的是,我必须列出在布局相反的顺序我所有的JS文件(因为他们预先准备给自己)。我真的想保持对事物的次序和恰好能够追加到我的布局堆栈。

如果在布局文件中预先考虑不够好,您可以在您的引导文件,当你建立你的观点,或者你可以建立一个控制器插件,如果你需要预先根据被加载什么模块。

// in your bootstrap
protected function _initHeadScript()
{
    $this->bootstrap('view');
    $view = $this->getResource('view');

    $view->headScript()->appendFile('another/js/file.js');
}

// as a plugin
class My_Plugin_HeadScriptPlugin extends Zend_Controller_Plugin_Abstract
{
    public function routeStartup(Zend_Controller_Request_Abstract $request)
    {
        $view = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->view;

        if($request->getModuleName() == 'foo')
        {
            $view->headScript()->appendFile('another/js/file.js');
        }
    }
}

其实,你并不需要得到的baseUrl“事业ZF已经为您完成。你一定要注意你的路径。不要使用第一斜线!否则ZF将返回远程地址。

只要使用'$this->_view->headLink()->appendStylesheet('css/main.css');'

http://zendframework.com/issues/browse/ZF-3282?focusedCommentId=23552&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-23552

最后评论提供了一个很好的解决方案,首先包括在布局,然后打印的,当你需要它,这种方式将工作

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top