2013-04-01 102 views
0

我试图在更改语言时更改商店的主标识。 我的公司在英文中有不同的名称(原文为法文)。更改语言更改徽标Opencart

这里是我的代码:

我已经改变了(在目录/视图/主题/ yourtheme /模板/通用/ 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

是否设置了'$ lang'?实际输出的是什么 - 它总是输出英文版本还是法文版本?如果'$ lang'既不是'en'也不是'fr'? – andrewsi

+0

那么当你在网站上时,$ lang会被设置。默认情况下,它使用法语加载网站,所以如果网站使用法语,$ lang = fr。对不起,我不太习惯Opencart。 – larin555

+0

我想尝试在代码的开头添加一些调试,以确保'$ lang'是你所期望的 - 我看不出代码有什么问题,所以我只能认为' $ lang'没有正确设置。 – andrewsi

回答

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 - 但我不能说它有多长直到它被释放)。

希望有帮助!

+0

嗨,我试着你说的,但它不工作:S ...什么都没有出现在标志应该是的地方。 – larin555

+0

查看页面源代码。图像src属性中是否有有效的URL?如果有,请点击它并确保你没有得到404。如果你得到404 –

+0

否404。我看到图像src的有效URL。我通过管理面板“设置”页面上传了一个徽标。我试着删除它并让head.tpl文件完成这项工作。但是当我这样做时,根本没有出现任何标志。 – larin555

1

您的代码存在的问题是$ lang不包含当前所选语言的语言。如果你是好奇,想看看这是如何存储在index.php$this->config->get('config_language');之前

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

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

注意,没有代码的上面已经过测试,但在理论上应该

+0

感谢您的支持。一切都听起来很逻辑,但它不起作用。徽标保持不变...我真的不明白 – larin555

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 - 请注意,图像名称必须是相同。代码应测试该文件是否存在于该目录中,如果不存在,则选取默认文件。

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

+0

“图像/ EN”和“FR”文件夹不存在,这是正常的吗?我创造了它,并且做了你告诉我的。现在,我通常在管理面板中设置的徽标不再出现。图像链接似乎在前端被打破。但我检查我的服务器在“图像/数据”和徽标文件在那里。但我检查了链接,图像现在链接到“图像/图像/数据/ ...”而不是“图像/数据”。怎么了? – larin555

+0

有时只是虚拟复制粘贴是不够的。尝试解决图像问题的路径,我认为整个解决方案是好的,应该工作。 '$ this-> config-> get('config_logo');'?当然'/ EN /'和'/ FR /'文件夹不存在,您必须创建它们... – shadyyx

+0

图像的路径甚至没有链接到“图像/ EN /数据”(或FR)。而且由于我没有在你发布的代码中看到这条路径,所以我不知道如何解决这个问题。谢谢 – larin555