1. определения города клиента по IP-адресу и сохранения его в куках на заданное в админке время.
2. задания разной скидки для разных городов.
Используется база с http://ipgeobase.ru/, но не в онлайне.
Текущая база (она доступна для скачивания в виде файла) вручную скачивается с сайта и конвертится/обновляется в SQL-таблицу.
Поиск производится уже в SQL-таблице, что вносит независимость от текущей доступности ipgeobase.ru
База эта по городам России и Украины. Других я там не нашел (страны - есть), но по России/Украине, как я понял, она наиболее полная и точная.
Посмотреть "как оно работает" можно традиционно на http://cpu.badisoft.ru
Админка выглядит так:
1.JPG 119.42К 58 Количество загрузок:
Установка:
----------
1. копируем файлы
sprCommon.png -> data/[шаблон]/
css3_button.css -> data/[шаблон]/
geodetect.css -> data/[шаблон]/
class.geo.php -> core/classes/
geo.php -> core/includes/
addon.php -> core/includes/admin/
geodetect.php -> core/includes/processor/
geodetect.tpl.html -> core/tpl/user/[шаблон]/
geo.tpl.html -> core/tpl/user/[шаблон]/blocks
modules_geo.php -> core/includes/admin/sub/
modules_geo.tpl.html -> core/tpl/admin/
2. в файле default.tpl.html перед строкой
<div class="marg"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&sub=yandex">{$smarty.const.ADMIN_STRING_YANDEX}</a></div>
вставляем
{* BEGIN GeoDetect *}
<div class="marg"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&sub=geo">GeoDetect</a></div>
{* END GeoDetect *}
3. в файле core/tpl/admin/menu.tpl.html перед строкой
<table class="adn topj"><tr><td><img src="data/admin/drs.gif" alt=""></td><td width="100%"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&sub=yandex">{$smarty.const.ADMIN_STRING_YANDEX}</a></td></tr></table>
вставляем
{* BEGIN GeoDetect *}
<table class="adn topj"><tr><td><img src="data/admin/drs.gif" alt=""></td><td width="100%"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&sub=geo">GeoDetect</a></td></tr></table>
{* END GeoDetect *}
4. в файле core/includes/admin/modules.php перед строкой
array("id"=>"yandex", "name"=>"Яндекс.Маркет" )
вставляем
# BEGIN GeoDetect
array("id"=>"geo", "name"=>"GeoDetect"),
# END GeoDetect
5. в файле index.php
5.1. строку, начинающуюся с
if ( in_array($_GET["do"],
заменяем на
# BEGIN GeoDetect
#if ( in_array($_GET["do"], array( "captcha", "cart", "rss", "compare", "yandex", "invoice_jur", "invoice_phys", "stat", "get_file" ))) {
if ( in_array('core/includes/processor/'.$_GET["do"].'.php',glob("core/includes/processor/*.php") )) {
# END GeoDetect
5.2. перед строкой
//init Smarty
вставляем
# BEGIN GeoDetect
if (CONF_GEODETECT_ENABLE
&& isset($_COOKIE['geobase'])
&& ($data = unserialize($_COOKIE['geobase']))
&& ($row = db_fetch_assoc(db_query("SELECT discount FROM ".DB_PRFX."geo_cities WHERE city_id=".(int)$data['city_id']." LIMIT 1"))))
$_SESSION['geo_discount'] = $row['discount'];
# END GeoDetect
6. в файле index.tpl.html
6.1. туда, где хотим видеть город вставляем (этот пункт можно заменить подключением файла geo.tpl.html как боковой блок)
{* BEGIN GeoDetect *}
{include file="blocks/geo.tpl.html"}
{* END GeoDetect *}
6.2. перед завершающим тэгом </body> вставляем
{* BEGIN GeoDetect *}
<div id="geodetect"></div>
{* END GeoDetect *}
7. в файле discount_functions.php в функции dscCalculateDiscount
7.1. строки
case 1:
return $discount;
break;
заменяем на
case 1:
# BEGIN GeoDetect
#return $discount; // теперь сразу return нельзя, надо добавить Geo-скидку
# END GeoDetect
break;
7.2. перед строкой
$discount["discount_standart_unit"] = ((float)$orderPrice/100)*(float)$discount["discount_percent"];
вставляем
# BEGIN GeoDetect
# добавляем к общей рассчитаной скидке Geo-скидку
if(CONF_GEODETECT_ENABLE && isset($_SESSION['geo_discount'])) $discount["discount_percent"] += $_SESSION['geo_discount'];
# END GeoDetect
8.
- Скачиваем архив geo_files с http://ipgeobase.ru/...bin/Archive.cgi
- копируем cidr_optim.txt и cities.txt в корень сайта
- выполняем index.php/?do=geodetect&sub=1
- имеет смысл этот пункт переиодически повторять (раз в месяц? раз в полгода?), т.к. архив довольно часто обновляется