А, вот оно что, чекбоксы эти пропустил ;)
У нас международные доставки. Выкладываю определение страны по GeoIP, думаю еще кому-то пригодится. Вообщем-то если включить в официальный код, модуль так будет более универсальным.
Как видно может работать автовыбором с двумя гео ф-циями:
- apache_note - через apache mod_geoip, если он установлен.
- geoip_record_by_name - это php расширение geoip, если включено.
файл catalog/model/tool/simplegeo.php:
public function getGeoIp() {
static $geo=false; // false, чтобы не null;
if (is_array($geo) || is_null($geo)) return $geo; // null отдает $this->cache->get(); если кэша нет;
if (!$geo = $this->getGeoIpBySimpleOpenCart())
{
$ip = isset($this->request->server['HTTP_X_FORWARDED_FOR']) && $this->request->server['HTTP_X_FORWARDED_FOR'] ? $this->request->server['HTTP_X_FORWARDED_FOR'] : 0;
$ip = $ip ? $ip : $this->request->server['REMOTE_ADDR'];
if (function_exists('apache_note') && $code = apache_note('GEOIP_COUNTRY_CODE'))
{
if ($country_id = $this->getCountryIdbyISO($code))
{
$geo = array(
'country_id' => $country_id,
'zone_id' => '',
'city' => '',
'postcode' => '',
);
}
}
else if (function_exists('geoip_record_by_name') && $code = geoip_record_by_name($ip))
{
if ($country_id = $this->getCountryIdbyISO($code['country_code']))
{
$geo = array(
'country_id' => $country_id,
'zone_id' => '',
'city' => '',
'postcode' => '',
);
}
}
}
return $geo;
}
private function getCountryIdbyISO ($iso) {
if (!is_string($iso) && strlen($iso) != 2) return false; // RU
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "country WHERE iso_code_2 = '" . $iso . "' AND status = '1'");
if ($query->row) {
return $query->row['country_id'];
}
else return false;
}
P.S.
Из пожеланий для будущих версий, раз модуль такой "user-friendly", возможно ли сделать сортировку стран, чтобы была возможность задать в списке стран самыми первыми страны СНГ, вроде:
<option value="176" style="famous">Россия</option>
<option value="220" style="famous">Украина</option>
<option value="20" style="famous">Белоруссия</option>
<option value="13">Австралия</option>
<option value="14">Австрия</option>
<option value="15">Азербайджан</option
Кроме как лезть править движок - не знаю каким образом реализовать, а модуль я так понимаю как раз все фильтрует и по-своему выводит, задавая свои правила.