0

为了为我们的网站构建一些简单的分析 - 我试图从用户登陆我们页面的位置捕获源,如果他最终注册 - 将源存储在数据库中。

由于这段代码必须在所有页面上 - 我想将它添加到 layout.phtml 这就是我到目前为止所拥有的(只是一个粗略的草稿)

$ref_cookie = $_COOKIE["xyzcom-referrer"];
if(!Zend_Auth::getInstance()->hasIdentity() && $ref_cookie==null) {
$ref=null;
$ref=$_GET['ref'];
if($ref==null || strlen($ref)==0)
    $ref= $_SERVER["HTTP_REFERER"];
//设置在cookie中,以防用户稍后返回并注册
setcookie("xyzcom-referrer",$ref);
}

它非常不言自明 - 如果用户未登录 - 我试图通过 ref 参数或通过 HTTP_REFERRER 获取引荐来源。我将其存储在 cookie 中的原因是用户可能今天访问该站点,但一周后注册。

因此,每次用户注册时,我都会查看是否设置了此 cookie - 如果设置了 - 我将获取该值并将其作为引用源插入到数据库中。

这是解决这个问题的最佳方法吗?或者我应该像控制器插件一样编写 - 如果是这样,我该怎么做。感谢您的提示。

4

1 回答 1

2

布局并不是真正适合这种逻辑的地方,所以是的,我建议将其移至控制器插件。这应该很简单,创建一个插件类,将其注册到前端控制器,然后在该类中创建一个preDispatch方法(如手册中所述)并将您的代码移至该方法。

您的代码也存在一些问题:

  • 您假设将设置 HTTP_REFERER,但可能不会。

  • 您正在设置一个仅会话 cookie(当用户关闭他/她的浏览器时将被删除),没有路径(这意味着如果它设置在您网站的子目录中,它将无法用于您的主页)。您需要提供第三个和第四个参数setcookie()来解决这些问题。

于 2012-06-23T17:32:55.967 回答