繁体   English   中英

更改语言更改Opencart的徽标

[英]Change logo on language change Opencart

更改语言时,我试图更改商店的主要徽标。 我公司的英文名称不同(最初是法语)。

这是我的代码:

我已更改(在catalog / view / theme / yourtheme / template / common / header.tpl中)

 <?php if ($logo) { ?>
  <div id="logo"><a href="<?php echo $home; ?>"><img src="<?php echo $logo; ?>" title="<?php echo $name; ?>" alt="<?php echo $name; ?>" /></a></div>
  <?php } ?>

对于:

<?php
if($lang == 'fr'){
$logo = 'image/data/Lg_Axesoirs_Blanc_FR_PNG.png';
} elseif($lang == 'en'){
$logo = 'image/data/Lg_Axesoirs_Blanc_EN_PNG.png';
}
?> 
<?php if ($logo) { ?>
<div id="logo"><a href="<?php echo $home; ?>"><img src="<?php echo $logo; ?>" title="<?php echo $name; ?>" alt="<?php echo $name; ?>" /></a></div>
<?php } ?>

但这不起作用,徽标也不会更改,但是我不明白我的代码有什么问题。

谢谢!

您的代码的问题在于$ lang不包含当前所选语言的语言。 这存储在$this->config->get('config_language'); index.php

$language = new Language($languages[$code]['directory']);

如果您想知道如何。 您只需将代码修改为以下内容即可

<?php
$lang = $this->config->get('config_language'); // ADDED LINE
if($lang == 'fr'){
    $logo = 'image/data/Lg_Axesoirs_Blanc_FR_PNG.png';
} elseif($lang == 'en'){
    $logo = 'image/data/Lg_Axesoirs_Blanc_EN_PNG.png';
}
?> 
<?php if ($logo) { ?>
<div id="logo"><a href="<?php echo $home; ?>"><img src="<?php echo $logo; ?>" title="<?php echo $name; ?>" alt="<?php echo $name; ?>" /></a></div>
<?php } ?>

另外,假设您的原始徽标集是

image/data/Lg_Axesoirs_Blanc_FR_PNG.png

你可以用

<?php
$logo = str_replace('_FR_', '_' . strtoupper($this->config->get('config_language')) . '_', $logo);
?> 
<?php if ($logo) { ?>
<div id="logo"><a href="<?php echo $home; ?>"><img src="<?php echo $logo; ?>" title="<?php echo $name; ?>" alt="<?php echo $name; ?>" /></a></div>
<?php } ?>

这将允许您为每个新的语言徽标自动使用两个字母的前缀

请注意,以上代码均未经过测试,但理论上应能正常工作

进入OpenCart的管理页面,进入“语言”部分,然后编辑一种语言。 在URL中查找诸如language_id = 1之类的内容。 记下每种语言的语言ID。

在您的代码中,放入以下内容:

<?php

// $this->config->get('config_language_id') returns the language ID currently active for the session

switch ($this->config->get('config_language_id')) {

 case 1 : // Replace the "1" with your English language ID
   // The English logo
   $logo = 'image/data/Lg_Axesoirs_Blanc_EN_PNG.png';
   break;

 case 2 : // Replace the "2" with your French language ID
   // The French logo
   $logo = 'image/data/Lg_Axesoirs_Blanc_FR_PNG.png';
   break;

 default :
    // The default logo if none of the above cases match
   $logo = 'image/data/Lg_Axesoirs_Blanc_EN_PNG.png';

}
?>

<?php if ($logo) { ?>
<div id="logo">
   <a href="<?php echo $home; ?>">
       <img src="<?php echo $logo; ?>" title="<?php echo $name; ?>" alt="<?php echo $name; ?>" />
   </a>
</div>
<?php } ?>

需要注意的是,这种逻辑实际上应该在控制器中,而不是在模板视图文件中。 OpenCart不允许您扩展核心控制器,因此不必太担心将其放入视图中,但是如果您想正确地进行操作,请查看vQmod之类的内容以将其插入控制器中。

(略微偏离主题;即将发布的OpenCart版本中内置了一个vQmod-ish-type-thing,希望可以让您编辑控制器而不会弄脏并下载vQmod-但我无法说要花多长时间已发布)。

希望有帮助!

这是我应该可行的解决方案:

打开您的控制器catalog\\controller\\common\\header.php并找到以下代码行:

$this->data['logo'] = $server . 'image/' . $this->config->get('config_logo');

(如果OC版本为1.5.5.1,则应为第30行),并注释掉该行(在该行之前添加// )。

现在,在此注释行下(应留在if语句内)添加以下内容:

$this->load->model('localisation/language');
$language = $this->model_localisation_language->getLanguage($this->config->get('config_language_id'));
$logo = $server . 'image/' . $language['code'] . '/' . $this->config->get('config_logo');
$this->data['logo'] = file_exists($logo) ? $logo : $server . 'image/' . $this->config->get('config_logo');

通过此代码,您可以像这样设置徽标图像的路径

  • .../image/EN/data/Lg_Axesoirs_Blanc.png
  • .../image/FR/data/Lg_Axesoirs_Blanc.png

确保在您的管理员中将徽标设置为通常应设置的徽标(因此应将其存储在image/data/ ),然后将英文/法语副本手动复制到文件夹image/EN/dataimage/FR/data - 请注意,图像名称必须相同 该代码应测试该目录中是否存在该文件,如果没有,则选择默认目录。

标头模板文件中的代码应保持不变。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM