2017-04-26 110 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', '*'); 
     } 


    } 
} 

请注意,这个问题仍然是开放的更好的答案:)