Получение информации о поисковой системе с которой пришёл пользователь и запросе

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 20

Рассмотрим на примере добавления данной информации в письма модуля "Обратная связь". Для реализации поставленной задачи можно написать кастомный макрос, который будет получать адрес страницы, с которой пришёл пользователь, проверять с какого поисковика он пришёл и по какому запросу. Макрос может иметь следующий вид:

public function searchAndWords($template = "default") {
	list($template_block) = def_module::loadTemplates($template, "stat_block");

	$block_arr = Array();
	$referer = getSession("http_referer");

	if (is_null($referer)) {
		$referer = 'не определен';
	}

	$crawler = 'не определен';
	$search = 'не определен';

	if (stristr($referer, 'yandex')) {
		$pos = strpos($referer, 'text=') + 5;
		$pos2 = strpos($referer, '&');
		$l = $pos2 - $pos;
		$search = substr($referer, $pos, $l);
		$search = urldecode($search);
		$crawler = 'Yandex';
	}
	if (stristr($referer, 'google')) {
		$pos = strpos($referer, 'q=') + 2;
		$pos2 = strpos($referer, '&');
		$l = $pos2 - $pos;
		$search = substr($referer, $pos, $l);
		$search = urldecode($search);
		$crawler = 'Google';
	}
	$block_arr['crawler'] = $crawler;
	$block_arr['wordquery'] = $search;
	$block_arr['http_referer'] = $referer;

	return def_module::parseTemplate($template_block, $block_arr);
}

Код макроса нужно поместить в файл ~/classes/components/custom.php после строчки //TODO: Write your own macroses here. TPL вариант макроса %custom searchAndWords()%, в XSLT макрос будет вызываться через udata://custom/searchAndWords/. Макрос в TPL будет работать с шаблонами в директории ~/tpls/, шаблон он принимает в качестве параметра, по умолчанию будет вызван шаблон default.tpl, который может иметь следующее содержимое:

<?php
$FORMS = Array();

$FORMS['stat_block'] = <<<STAT_BLOCK
<h3>Комментарии</h3>
%crawler%
%wordquery%
%http_referer%
STAT_BLOCK;
?>

crawler содержит в себе поисковик (на данном примеры рассмотрены основы разбора Google и Yandex), wordquery содержит поисковый запрос, http_referer страницу, с которой пришёл пользователь. Данный макрос можно разместить в шаблоне письма обратной связи, тогда эта информация будет отправлена получателю.