0

当我改变语言时,我试图改变商店的主要标志。我的公司有一个不同的英文名称(最初是法文)。

这是我的代码:

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

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

谢谢!

4

3 回答 3

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 } ?>

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

请注意,上面的代码都没有经过测试,但理论上应该可以工作

于 2013-04-02T00:01:14.180 回答
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/dataimage/FR/data-请注意图像名称必须相同。代码应测试该文件是否存在于该目录中,如果不存在则选择默认文件。

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

于 2013-04-02T09:22:08.917 回答
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 之类的东西以将其插入控制器。

(有点跑题了;在即将发布的 OpenCart 版本中内置了一个 vQmod-ish 类型的东西,希望它可以让您编辑控制器而不会弄脏和下载 vQmod - 但我不能说它会持续多久已发布)。

希望有帮助!

于 2013-04-01T20:03:41.293 回答