prestashop smarty模板中的Geoip

prestashop smarty模板中的Geoip,prestashop,geoip,smarty3,prestashop-1.5,Prestashop,Geoip,Smarty3,Prestashop 1.5,我需要处理product.tpl中的访客国家代码。是否有任何带有国家代码的prestashop全局变量,我可以在smarty模板中使用?如果没有,我可以在哪里添加它?要执行此操作,请首先转到首选项>>地理位置,并启用它,同时下载.dat文件 在此之后,将此代码添加到controllers>>front>>ProductController.php第238行之前 include_once(_PS_GEOIP_DIR_.'geoipcity.inc'); $gi = geoip_open(realp

我需要处理product.tpl中的访客国家代码。是否有任何带有国家代码的prestashop全局变量,我可以在smarty模板中使用?如果没有,我可以在哪里添加它?

要执行此操作,请首先转到
首选项>>地理位置,并启用它,同时下载.dat文件

在此之后,将此代码添加到
controllers>>front>>ProductController.php
第238行之前

include_once(_PS_GEOIP_DIR_.'geoipcity.inc');
$gi = geoip_open(realpath(_PS_GEOIP_DIR_.'GeoLiteCity.dat'), GEOIP_STANDARD);
$record = geoip_record_by_addr($gi, Tools::getRemoteAddr()); 
在第260行附近的smarty assign中添加此代码

'country_name' => $record->country_name //change country_name to code etc
在product.tpl中的任意位置使用
$country\u name


在ps-1.5.6中测试,我使用@Raza的代码构建它作为对FrontController的覆盖,目的是不仅在product.tpl中显示它,而且在所有的商店页面上显示它:

  • 在覆盖>类>控制器>创建文件FrontController.php中
  • 输入以下代码

    class FrontController extends FrontControllerCore
    { 
        public function initContent()
        {
        parent::initContent();
    
        include_once(_PS_GEOIP_DIR_.'geoipcity.inc');
        $gi = geoip_open(realpath(_PS_GEOIP_DIR_.'GeoLiteCity.dat'), GEOIP_STANDARD);
        $record = geoip_record_by_addr($gi, Tools::getRemoteAddr()); 
    
        $this->context->smarty->assign('country_name', $record->country_name); //change country_name to code etc
    
        }
    }
    
  • @Raza:在.tpl文件中使用{$country_name}可以以英文显示国家名称。你知道如何使用PS的核心翻译,以活跃的商店语言向全国推广吗


    谢谢

    @nortonOn:您可以尝试使用cookie中的id_lang,这样,它应该以商店语言显示国家名称。 应该是这样的:
    $country->name[intval($this->context->cookie->id_lang)]

    我希望它能帮助你:)