Получение информации о поисковой системе с которой пришёл пользователь и запросе — различия между версиями
Davidov (обсуждение | вклад) (Новая страница: «Для реализации поставленной задачи можно написать кастомный макрос, который будет получа…») |
Vitaliks (обсуждение | вклад) |
||
(не показаны 4 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
+ | '''Актуально для версии 20''' | ||
+ | |||
+ | Рассмотрим на примере добавления данной информации в письма модуля "Обратная связь". | ||
Для реализации поставленной задачи можно написать кастомный макрос, который будет получать адрес страницы, с которой пришёл пользователь, проверять с какого поисковика он пришёл и по какому запросу. | Для реализации поставленной задачи можно написать кастомный макрос, который будет получать адрес страницы, с которой пришёл пользователь, проверять с какого поисковика он пришёл и по какому запросу. | ||
Макрос может иметь следующий вид: | Макрос может иметь следующий вид: | ||
<source lang="php"> | <source lang="php"> | ||
− | public function searchAndWords($template = "default"){ | + | public function searchAndWords($template = "default") { |
+ | list($template_block) = def_module::loadTemplates($template, "stat_block"); | ||
− | |||
$block_arr = Array(); | $block_arr = Array(); | ||
− | + | $referer = getSession("http_referer"); | |
− | $referer =getSession("http_referer"); | + | |
− | + | if (is_null($referer)) { | |
+ | $referer = 'не определен'; | ||
+ | } | ||
+ | |||
+ | $crawler = 'не определен'; | ||
+ | $search = 'не определен'; | ||
+ | |||
if (stristr($referer, 'yandex')) { | if (stristr($referer, 'yandex')) { | ||
− | $pos=strpos($referer, 'text=')+5; | + | $pos = strpos($referer, 'text=') + 5; |
− | $pos2=strpos($referer, '&'); | + | $pos2 = strpos($referer, '&'); |
− | $l=$pos2-$pos; | + | $l = $pos2 - $pos; |
− | $search = substr($referer, $pos,$l); | + | $search = substr($referer, $pos, $l); |
$search = urldecode($search); | $search = urldecode($search); | ||
$crawler = 'Yandex'; | $crawler = 'Yandex'; | ||
} | } | ||
− | |||
if (stristr($referer, 'google')) { | if (stristr($referer, 'google')) { | ||
− | $pos=strpos($referer, 'q=')+2; | + | $pos = strpos($referer, 'q=') + 2; |
− | $pos2=strpos($referer, '&'); | + | $pos2 = strpos($referer, '&'); |
− | $l=$pos2-$pos; | + | $l = $pos2 - $pos; |
− | $search = substr($referer, $pos,$l); | + | $search = substr($referer, $pos, $l); |
$search = urldecode($search); | $search = urldecode($search); | ||
$crawler = 'Google'; | $crawler = 'Google'; | ||
} | } | ||
− | + | $block_arr['crawler'] = $crawler; | |
− | $block_arr['crawler']=$crawler; | + | $block_arr['wordquery'] = $search; |
− | $block_arr['wordquery']=$search; | + | $block_arr['http_referer'] = $referer; |
− | $block_arr['http_referer']=$referer; | + | |
− | |||
return def_module::parseTemplate($template_block, $block_arr); | return def_module::parseTemplate($template_block, $block_arr); | ||
} | } | ||
</source> | </source> | ||
− | Код макроса нужно поместить в файл ~/classes/ | + | Код макроса нужно поместить в файл ~/classes/components/custom.php после строчки //TODO: Write your own macroses here. |
TPL вариант макроса %custom searchAndWords()%, в XSLT макрос будет вызываться через udata://custom/searchAndWords/. | TPL вариант макроса %custom searchAndWords()%, в XSLT макрос будет вызываться через udata://custom/searchAndWords/. | ||
Макрос в TPL будет работать с шаблонами в директории ~/tpls/, шаблон он принимает в качестве параметра, по умолчанию будет вызван шаблон default.tpl, который может иметь следующее содержимое: | Макрос в TPL будет работать с шаблонами в директории ~/tpls/, шаблон он принимает в качестве параметра, по умолчанию будет вызван шаблон default.tpl, который может иметь следующее содержимое: | ||
Строка 55: | Строка 62: | ||
http_referer страницу, с которой пришёл пользователь. | http_referer страницу, с которой пришёл пользователь. | ||
Данный макрос можно разместить в шаблоне письма обратной связи, тогда эта информация будет отправлена получателю. | Данный макрос можно разместить в шаблоне письма обратной связи, тогда эта информация будет отправлена получателю. | ||
− | [[Категория:Написание кастомных макросов]] | + | [[Категория:Написание кастомных макросов]][[Категория:Модуль Обратная связь]] |
Текущая версия на 08:58, 30 апреля 2019
Актуально для версии 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 страницу, с которой пришёл пользователь. Данный макрос можно разместить в шаблоне письма обратной связи, тогда эта информация будет отправлена получателю.