2017-04-26 118 views
0

我嘗試從Akeeba運行中獲取Releasemaker,並將版本/項目的語言設置爲All (*)。但我們可以假設這種問題應該發生在任何試圖使用Site文件夾中的代碼設置數據庫字段language的代碼上。Joomla語言篩選器插件&更改前端的語言字段

如果您有多語種網站,您可能會運行插件「System - Language Filter」。該插件將$_REQUEST['language']值設置爲特定語言。每次。結果,如$data = $app->input->getData()之類的代碼將獲得$_REQUEST值的語言值,而不是$_POST數組中的值,因此無法使用通常的->bind($data)操作設置該語言字段。

您是否遇到過這個問題?你有什麼解決方案?

回答

0

我爲自己找到了一個解決方案。我實際上可以通過兩種方式來解決這個問題。一方面,您可以重命名從客戶端傳輸到服務器的參數language,並在持久層中執行魔術。另一方面,您可以嘗試修復語言過濾器插件的工作。由於我不想更改組件,因此我選擇了第二種方式,並添加了一個系統插件,以根據需要將請求中的語言值重置爲*。當然,也可以從POST數據中讀取該值。該插件儘可能嚴格,在那裏做魔術不會使其他東西崩潰。

class PlgSystemLanguagefixer extends JPlugin 
{ 

    public function onAfterRoute() { 
     // Get the application object. 
     $app = JFactory::getApplication(); 

     $option = $app->input->get('option'); 
     $format = $app->input->get('format'); 
     $task = $app->input->get('task'); 
     $view = $app->input->get('view'); 

     if ($option == 'com_ars' && $task=='save' && $format == 'json' && ($view=='releases' || $view='items')) { 
      $app->input->set('language', '*'); 
     } 


    } 
} 

請注意,這個問題仍然是開放的更好的答案:)