1

我将要上线一个 Magento 网站,并且客户已经提出了最后一分钟的请求。他们是一家英国制造商,他们不想与他们的全球供应链竞争,所以他们想要;

  1. 拥有来自北美的 IP 的所有用户都会被重定向到一个完全不同的网站(非 Magento,与我无关),理想情况下会使用重定向消息。
  2. 拥有来自北美、英国和爱尔兰以外任何地方的 IP 的所有用户都可以看到该网站,但定价和购物车被禁用,因此他们看不到价格并且无法进行购买
  3. 英国和爱尔兰正常运作。

我正在尝试找出解决此问题的最佳方法。我知道三个选项;

  • .HTACCESS

我曾在一家商店工作过,之前开发人员在 .htaccess 中设置了大量的 IP 列表(主要是为了安全而阻止中国和俄罗斯)。我可以做类似的事情,用美国 IP 重定向用户,然后可能像这样设置一个环境变量;

如何从 .htaccess 设置自定义全局

可以在模板中访问它以不显示添加到购物车和价格标记。

优点:相对容易

缺点:可怕。IP 列表将被硬编码,显示/不显示价格等的条件代码将基于模板,而不是通过模块完成。此外,无法以这种方式处理“您正在转移到我们的美国商店”请求。

  • 使用商业模块的商店切换

另一种选择可能是自定义/配置以下商业模块来处理请求;

http://www.mageworx.com/store-and-currency-auto-switcher-magento-extension.html

我认为这将涉及建立新网站而不是新商店(因为当前安装已经有 1 个网站和 2 个商店,每个商店都有一个商店视图。)。新网站将有自己的主题,不显示购物车/价格信息。

优点: IP 没有硬编码,使用 MaxMind GeoIP 数据库。基于模块。
缺点:同样,是否显示价格的代码是基于模板的。此外,这会给用户增加很多管理开销——额外的网站、额外的商店视图使事情变得复杂。并且没有使用该模块 99% 的功能。

  • 一个自定义模块来处理它

我知道这是理想的解决方案,但我在应用程序/设计中比在应用程序/代码中更快乐。我知道如何构建一个模块,并且以前构建过非常小的模块,但是.... 基于 Alan Storm 的博客文章here;

http://magento-quickies.tumblr.com/post/32402056167/magento-startup-events

我想象我会使用该controller_front_init_before事件并创建一个观察者,它扩展与产品视图模板中使用的 isSaleable() 方法相关的一个或多个类。可能吗??

优点: 这是正确的方法。没有管理开销。易于禁用/启用。

任何关于此的建议、指针或链接都会有很大帮助。谢谢。

4

1 回答 1

4

这是您所谓的“理想解决方案”的开始。

从MagnetoConnectGitHub获取我的免费 G​​eoIP 扩展。然后在任何模板中使用:

$geoIP = Mage::getSingleton('geoip/country');
...
<?php if($geoIP->isCountryAllowed()) ?>
    the block of code you want to display only for selected countries
<?php endif ?>

更多信息在我的文章

如果您有任何问题,请随时提问。

于 2012-12-07T11:25:41.733 回答