четверг, 5 сентября 2013 г.

О GeoIP в TYPO3

Многим известна популярная библиотека PHP - GeoIP, с помощью которой по IP адресу клиента можно узнать его местоположение - континент, страну и пр. Как же её подключить и использовать в TYPO3?

Подключить GeoIP к TYPO3 довольно легко. Для этого я взял из репозитория плагин - ml_geoip. Несмотря на то, что я работал с версией TYPO3 - 6.1.1, а этот плагин последний раз обновлялся в марте 2009 (4 года назад!), он прекрасно установился и заработал.

Теперь, для чего я его поставил и как я его использовал?

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

Во-вторых, иногда требуется видоизменять сайт в зависимости от страны клиента. Как это делается? С помощью userfunc! Рассказываю...

1. Создаём директорию внутри fileadmin, например - user_funcs.
2. Создаём файл - fileadmin\user_funcs\tools.php :
<?php
// Подключаем библиотеку GeoIP из директории плагина ml_geoip
require_once(t3lib_extMgm::extPath('ml_geoip').'class.tx_mlgeoip.php');
class user_tools {
       function isEnglishVersion(){
$ip_address = $_SERVER['REMOTE_ADDR'];
$my_geoip = t3lib_div::makeInstance('tx_mlgeoip');
$gi_country_name = $my_geoip->getCountryNameByAddress($ip_address);
if (($gi_country_name==='Russia')||($gi_country_name==='Ukraine')){
return 0;
}
return 1; }}?>
3. Итак, наш userfunc возвращает "1" если клиент не из Украины или России, и возвращает "0" в противном случае. Теперь об этом должна "узнать" TYPO3. Делается это так:
includeLibs.tools = fileadmin/user_funcs/tools.php
lib.isEnglishVersion = USER
lib.isEnglishVersion {
  userFunc = user_tools->isEnglishVersion
}
4. Теперь можно использовать наш объект -lib.isEnglishVersion либо в шаблоне fluid, либо в typoscript. Например:

<f:if condition="{f:cObject(typoscriptObjectPath: 'lib.isEnglishVersion')} != 1">
<f:render partial="header/mypartial"/>
</f:if>

пример для typoscript:

[userFunc = isEnglishVersion()]
...
[else]
...
[global]

Ну вот и всё! Юзайте себе на здоровье!



0 коммент.:

Отправить комментарий

О себе

Моя фотография
Вадим Гиркало
Фрилансер, веб-разработчик сайтов на базе бесплатной, мощнейшей и очень гибкой CMS системы - TYPO3.
Просмотреть профиль

Позвонить мне в Skype

TOP - 3