0

Чтобы создать некоторую простую аналитику для нашего сайта - я пытаюсь захватить источник, откуда пользователь приземляется на нашей странице, и если он заканчивает регистрацию - храните источник в базе данных.Плагин Zend для захвата реферера для каждого посетителя

Поскольку этот код должен быть на всех страницах - я думал о добавлении его к 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"]; 
//set in cookie incase user returns later and registers 
setcookie("xyzcom-referrer",$ref); 
} 

Его довольно понятны - если пользователь не вошел в систему - я пытаюсь получить реферер либо через параметр ref, либо через HTTP_REFERRER. Причина, по которой я храню его в cookie, - это пользователь, который может посетить сайт сегодня, но зарегистрироваться через неделю.

Поэтому каждый раз, когда пользователь регистрируется, я увижу, установлен ли этот файл cookie - если он есть - я получу значение и вставляю его в базу данных в качестве источника ссылки.

Это лучший способ приблизиться к этому. Или я должен писать как плагин контроллера - если да, то как мне это поделать. Спасибо за ваши советы.

ответ

2

Макет на самом деле не место для такого рода логики, поэтому да, я бы предложил переместить его в плагин контроллера. Это должно быть простым, создать класс плагина, зарегистрировать его с помощью фронтального контроллера, а в классе создать метод preDispatch (как описано в руководстве) и переместить код на это.

Есть также несколько проблем с вашим кодом: будут установлены

  • Вы полагаете HTTP_REFERER, но это не может быть.

  • Вы устанавливаете только cookie сеанса (который будет удален, когда пользователь закрывает свой браузер) без пути (что означает, что если он установлен в подкаталоге на вашем сайте, он не будет доступен для вашего домашняя страница). Вы должны будете указать 3-й и 4-й параметры на setcookie() для решения этих проблем.

+0

Thanks Tim - Что касается 1 - в действительности нет ничего, что мы можем сделать правильно - я имею в виду, что я заметил, что даже gmail удаляет эти заголовки, когда вы нажимаете на какие-либо ссылки внутри почты. И да, я исправлю функцию setcookie - я просто написал это как быстрый проект. – Gublooo

+0

Yup, просто используйте 'isset()', чтобы проверить, есть ли заголовок referrer перед настройкой файла cookie, и все это хорошо. –

+0

Спасибо за советы - оцените. – Gublooo