Jump to content

Условие при котором узнаем, бот или реальный посетитель

Featured Replies

Posted
comment_207553
{{if }} 

{{endif}}

Как в шаблонных условиях прописать, узнать является текущий посетитель поисковым ботом или нет. Вроде в php есть функция useragent, по которой возможно узнать браузер и тп. И если в строчке присутствует 'bot'. То есть если есть вхождения, тогда в данный момент возможно узнать что текущую страницу подгрузил бот.

comment_207576

В режиме разработчика в плагинах создаем такой хук не шаблона (не помню как он называется) и выбираем там класс \IPS\core\modules\front\system\plugins

В этом хуке создаем метод класса:

public function isBot() {
	$userAgent = $_SERVER['HTTP_USER_AGENT'];
    $bots = [
        'Googlebot',
        'Bingbot',
        'Slurp',
        'DuckDuckBot',
        'Baiduspider',
        'YandexBot',
        'Sogou',
        'Exabot',
        'facebot',
        'ia_archiver',
        'Twitterbot',
        'facebookexternalhit',
        // Добавьте другие строки, которые могут быть в юзер-агентах ботов
    ];

    foreach ($bots as $bot) {
        if (stripos($userAgent, $bot) !== false) {
            return true;
        }
    }

    return false;
}

public function getBotName() {
	// добавьте тут вывод имени поискового бота по аналогии с методом выше
	return $bot;
}

 

В шаблоне:
 

{{$plugins = new \IPS\core\modules\front\system\plugins;}}                     
{{if ($plugins->isBot())}} 
	<p>Это бот: {{$plugins->getBotName();}}</p>
{{endif}}

 

comment_207578
7 часов назад, Zuldek199 сказал:

И если в строчке присутствует 'bot'

а вот насчет этого хочу предупредить.

Любой пользователь может писать в юзер агент все что угодно. В том числе html и js код. Поэтому не должно быть никаких проверок на bot и прочих универсальных решений. Все боты должны быть четко прописаны и все имена ботов для вывода на страницу должны быть храниться на сервере.

Если найдено совпадение в юзерагенте - вывести имя бота из своего списка. Строки и подстроки из юзерагента выводить категорически запрещено.

Даже если вы запретите спецсимволы чтобы предотвратить вывод кода, посетитель может засунуть туда просто 100500 символов и они отобразятся на странице.

comment_207585
17 часов назад, Zuldek199 сказал:
{{if }} 

{{endif}}

Как в шаблонных условиях прописать, узнать является текущий посетитель поисковым ботом или нет. Вроде в php есть функция useragent, по которой возможно узнать браузер и тп. И если в строчке присутствует 'bot'. То есть если есть вхождения, тогда в данный момент возможно узнать что текущую страницу подгрузил бот.

самый простой вариант методом ips

{{if \IPS\Http\UserAgent::parse()->spider}}
ты спидер
{{endif}}

но там мало ботов, для добавления регулярок нужно расширять $searchEngineUseragents в \IPS\Http\UserAgent
 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.


Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.