2013-04-01 98 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