根据页面中用户的IP地址自动显示用户城市中发布的内容

时间:2012-10-01 05:18:53

标签: php drupal

它应显示根据用户浏览网站的城市自动发布的内容。我正在尝试使用SmartIP。我正在尝试使用以下代码:

<?php
if ($_SESSION['smart_ip']['location']['country_code'] == 'IN'):
?>

印度内容特定

<?php
elseif ($_SESSION['smart_ip']['location']['country_code'] == 'UY'):
?>

乌拉圭HTML内容特定

<?php
....
else:
?>

后备默认内容。

<?php
 ...
endif;
?>

我尝试将国家/地区代码用作“IN”。但它没有显示内容。我正在尝试将代码更改为

<?php
if ($_SESSION['smart_ip']['location']['country_code']['state_code'][city_code] == 'BAN'):
?>

我怀疑是:

如果用户正在从班加罗尔或德里等城市浏览,我如何自动显示班加罗尔发布的内容? 我在哪里可以添加这些国家,州,城市代码?

1 个答案:

答案 0 :(得分:-1)

您可以尝试实现“词典功能”:您使用您提到的地理代码调用它,它会返回您要嵌入html模板的本地化内容。在后台,它参考了一个'目录',通常是这样的数组结构:

$LCat = array (
  'India' => array (
    'Assam' => array (
      'Dispur' => "some Dispur specific content",
      'Guwahati' => "some Guwahati specific content",
      ... some other cities in that state ...
    ),
    'Orissa' => array (
      'Bhubaneswar' => "some Bhubaneswar specific content",
      ... some other cities in that state ...
    ),
    ... some other states in that country ...
  ),
  ... some other countries ...
);

该函数在目录中查找matchin条目(例如,通过使用is_set()函数):

if ( is_set($LCat[$_SESSION['smart_ip']['location']['country_code']]) ) {
  if ( is_set($LCat[$_SESSION['smart_ip']['location']['country_code']['state_code']]) )
    if ( is_set($LCat[$_SESSION['smart_ip']['location']['country_code']['state_code']['city_code']]) ) ) {
      $Location=$LCat[$_SESSION['smart_ip']['location']['country_code']['state_code']]['city_code']];
    } else {
      $Location=$LCat[$_SESSION['smart_ip']['location']['country_code']['state_code']]
  } else {
    $Location=$LCat[$_SESSION['smart_ip']['location']['country_code']]
} else {
  $Location="location specific content for 'Nirwana'";
}

所以结构是:状态&gt;国家&gt;城市,或任何你需要的结构。想法是:尝试使用目录中最具体的匹配。如果它不存在,那么使用稍微不那么具体的条目,依此类推。这样,您始终可以在结构中编码安全回退,而不必为脚本可能偶然发现的每个位置编写回退代码。

显然,为匹配存储的内容可以是任何内容,我只选择简单的字符串来表达观点。此外,结构可以以不同的方式存储,例如在运行时检查的文件系统层次结构中,每个国家/地区的文件夹,每个州的文件夹,每个城市的文件等。如果要提高性能并提供管理目录数据的简便方法,则可以将该目录存储在运行时查询的数据库中。不过,这个想法仍然是一样的。

请注意,我没有测试过该代码,但它应该为您提供可行方法的建议。