[英]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/data
或image/FR/data
- 请注意,图像名称必须相同 。 该代码应测试该目录中是否存在该文件,如果没有,则选择默认目录。
标头模板文件中的代码应保持不变。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.