在Layout中调用View_Helpers中的JavaScript或StyleSheet

时间:2012-05-11 08:52:30

标签: zend-framework

有可能实现吗? 如果在视图中是控件的结果,我的视图帮助程序工作正常。但是我希望有一些dinamic布局,例如,根据我所处的状态渲染一个jquery菜单。

如果我从布局中调用帮助器,那么headScript永远不会回应我在帮助器中执行的appendScript命令。

谢谢!

2 个答案:

答案 0 :(得分:1)

你有几个选择。
做你想做的最简单的方法是使用inlineScript()视图助手并将其添加到引导程序中的视图或直接添加到布局脚本中。 inlneScript()帮助程序的工作方式与headScript()帮助程序的工作方式相同,但是将代码放在标记中。我有时会使用inlineScript()帮助程序将配置数据传递给音频和视频播放器。

或者,您可以使用视图帮助程序构建自己的placeholder,并在引导程序中初始化它。

这是一个呈现菜单的自定义placeholder的简单示例:

引导程序:

 protected function _initMenus() {
        //get view object
        $view = $this->getResource('view');
        //assign the id for the menus...
        $view->mainMenuId = 4;
        $view->adminMenuId = 5;
    }

布局:

<?php
$this->layout()->adminMenu = $this->action(
        'render', 'menu', null, array('menu' => $this->adminMenuId))
?>
<div id="adminMenu">
     <!-- Render the placeholder -->
     <?php echo $this->layout()->adminMenu ?>&nbsp;
</div>

这个占位符只是使用action()帮助器来调用renderAction(),但是你可以用占位符做的事情受到想象力的限制。

答案 1 :(得分:0)

我不认为这是可能的,因为如果在布局中调用帮助器,它可能会在headScript帮助程序运行后调用headScript。使其工作的唯一方法是确保在headScript调用之前在布局顶部附近调用助手。