当我改变语言时,我试图让商店的主要标志发生变化。 我公司的英文名称不同(原文为法文)。
这是我的代码:
我已更改(在目录/ 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 } ?>
但它不起作用,徽标没有改变,但我不明白我的代码中有什么问题。
谢谢!
答案 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}} - 请注意图片名称必须相同。代码应测试该文件是否存在于该目录中,如果不存在,则选择默认文件。
您的标题模板文件中的代码应保持不变。