1

似乎我记得在 Zend Framework 中,我们可以通过 headScript 在页面的操作中添加样式/脚本。在 Zend2 中,这似乎不是一个选项。

我在文档中没有看到太多关于处理这个问题的内容。基本上我的问题是;在视图中添加这些样式/脚本是否合适?或者有没有一种新方法可以将它们添加到控制器操作中?

谢谢

4

2 回答 2

9

在您的控制器操作中:

$this
    ->getServiceLocator()
    ->get('viewhelpermanager')
    ->get('HeadScript')
    ->appendFile('/js/custom.js')
;

您可以通过创建“可调用”“服务定位器感知”控制器插件来简化此操作。

您可以在模块配置文件中执行此操作:

...
'controller_plugins' => array(
    'invokables' => array(
        'Head' => 'Application\Controller\Plugin\Head',
    )
),
...

在其中创建“Head”类module/Application/src/Application/Controller/Plugin/Head.php,实现ServiceLocatorAwareInterface并构建一些方法javaScript()styleSheet例如简单地抓取视图助手并返回它:

return $this
    ->getServiceLocator()
    ->getServiceLocator() // Main service Locator
    ->get('viewhelpermanager')
    ->get('HeadScript')
;

然后在您的控制器中,它更像是:

$this->Head()->javaScript()->appendFile('/js/custom.js');

不过,您可以随心所欲。甚至可能使用 XML 控制每个操作的布局的 Magento 样式。

更新

如果您使用的是 ZF2 MVC,输出将被缓冲。所以我发现向页面添加脚本和样式表最好从附加到视图模型的模板文件中完成:

$this->headScript()->appendFile('/js/custom.js', 'text/javascript');

$this->headLink()->appendStylesheet('/css/custom.css');

将其置于控制器之外,因为它与视图相关。

于 2013-03-23T03:13:19.197 回答
0

我不明白马歇尔之家的谈话是什么。

插件需要实现 PluginInterface。为什么要实现 ServiceLocatorAwareInterface ?

把这段代码贴在哪里?

return $this
->getServiceLocator()
->getServiceLocator() // Main service Locator
->get('viewhelpermanager')
->get('HeadScript');

AbstractPlugin(如果从它扩展)也没有 getServiceLocator() 方法。啥意思?主要服务定位器?请写一些例子。

于 2014-04-07T08:27:01.597 回答