更改语言更改Opencart的徽标

时间:2013-04-01 18:30:40

标签: php opencart

当我改变语言时,我试图让商店的主要标志发生变化。 我公司的英文名称不同(原文为法文)。

这是我的代码:

我已更改(在目录/ 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 } ?>

但它不起作用,徽标没有改变,但我不明白我的代码中有什么问题。

谢谢!

3 个答案:

答案 0 :(得分:1)

您的代码存在的问题是$ 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 } ?>

允许您为每个新语言徽标自动使用双字母前缀

请注意,上述代码均未经过测试,但理论上应该有效

答案 1 :(得分:0)

进入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那样将它插入控制器。

(稍微偏离主题;有一个vQmod-ish-type-thing内置于即将推出的OpenCart版本中,它应该可以让你编辑控制器而不会变脏并下载vQmod - 但我不知道它有多久了'直到那个被释放了。)

希望有所帮助!

答案 2 :(得分:0)

这是我的解决方案应该有效:

打开您的控制器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/data或{ {1}} - 请注意图片名称必须相同。代码应测试该文件是否存在于该目录中,如果不存在,则选择默认文件。

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