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

Материал из Umicms
Перейти к:навигация, поиск
Строка 5: Строка 5:
 
Макрос может иметь следующий вид:
 
Макрос может иметь следующий вид:
 
<source lang="php">
 
<source lang="php">
public function searchAndWords($template = "default"){
+
            public function searchAndWords($template = "default"){
  
list($template_block, $template_block_empty, $template_line) = def_module::loadTemplates($template, "stat_block");
+
                list($template_block) = def_module::loadTemplates($template, "stat_block");
$block_arr = Array();
 
 
$referer =getSession("http_referer");
 
 
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')) {
+
$block_arr = Array();
$pos=strpos($referer, 'q=')+2;
+
$referer = getSession("http_referer");
$pos2=strpos($referer, '&');
+
 
$l=$pos2-$pos;
+
if (is_null($referer)) {
$search = substr($referer, $pos,$l);
+
$referer = 'не определен';
$search = urldecode($search);
+
}
$crawler = 'Google';
+
 
}
+
$crawler = 'не определен';
+
$search = 'не определен';
$block_arr['crawler']=$crawler;
+
 
$block_arr['wordquery']=$search;
+
if (stristr($referer, 'yandex')) {
$block_arr['http_referer']=$referer;
+
$pos = strpos($referer, 'text=') + 5;
+
$pos2 = strpos($referer, '&');
return def_module::parseTemplate($template_block, $block_arr);
+
$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);
 +
            }
 
</source>
 
</source>
  

Версия 10:28, 12 ноября 2014

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

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

             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/modules/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 страницу, с которой пришёл пользователь. Данный макрос можно разместить в шаблоне письма обратной связи, тогда эта информация будет отправлена получателю.