我想在整个应用程序的每次更新中将google分析帐号放入local或global.php。但是,我无法弄清楚如何从视图中访问它。我是否会犯这个错误,或者有办法做到这一点?我想避免的是将东西放入每个控制器以传递它。我只是希望布局能够抓住它。
如果有更好的解决方案,我会全力以赴。
谢谢!
答案 0 :(得分:3)
如果您只有所有页面的代码,可能您可以在布局视图中对所有分析代码进行硬编码,因此它将用于模块视图。
如果您不想对其进行硬编码,或者您不希望在所有页面中都有代码,或者您有一组不同的布局文件,那么我认为您可以做的最好的事情就是创建一个ViewHelper。
我试着从头开始解释它,以防这是你第一次这样做。
首先,创建一个模块,我称之为 Utils 。
在模块src中,您可以创建一个文件夹 Utils \ View \ Helper ,然后使用类Analytics创建一个文件 Analytics.php ,如下所示: / p>
<?php
namespace Utils\View\Helper;
use Zend\View\Helper\AbstractHelper;
use Zend\Mvc\Controller\Plugin\FlashMessenger as FlashMessenger;
class Analytics extends AbstractHelper
{
var $code = null;
public function setCode($code)
{
$this->code = $code;
}
public function __invoke()
{
ob_start();
?>
<!-- analytics-->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', '<?=$this->code?>']);
_gaq.push(['_trackPageview']);
(function () {
var ga = document.createElement('script');
ga.type = 'text/javascript';
ga.async = true;
ga.src = 'http://www.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
})();
</script>
<!-- end analytics-->
<?php
return ob_get_clean();
}
}
?>
在您的 module.php 创建函数 getViewHelperConfig ,您可以在其中为您要创建的viewhelper定义工厂,likethis
public function getViewHelperConfig()
{
return array(
'factories' => array(
'analytics' => function($sm) {
$config = $sm->getServiceLocator()->get('Config');
//now in config, you have all your configurations (local, global, etc) as an asociative array
$add = new \Utils\View\Helper\Analytics();
//you asign here the code from your merged configuration
//(replace *analytics_account_number* with whatever you called it)
$add->setCode($config["analytics_account_number"]);
return $add;
}
));
}
现在,在视图中,您只需拨打
即可echo $this->analytics();
并且框架将搜索工厂,创建对象,指定值,并调用invoke方法,以将完整代码返回到视图。就这样。写一次,随处运行!