我尝试让Akeeba的Releasemaker运行,并将发布/项目的语言设置为All (*)
。但是可以假设这种问题应该发生在尝试使用Site文件夹中的代码设置数据库字段language
的任何类型的代码中。
如果您有多语言网站,则可能正在运行插件“系统 - 语言过滤器”。此插件将$_REQUEST['language']
值设置为特定语言。每次。因此,像$data = $app->input->getData()
这样的代码将获得$_REQUEST
值的语言值而不是$_POST
数组中的值,因此您无法使用通常的{{1}设置该语言字段操作。
您是否也遇到过这个问题?你有什么解决方案?
答案 0 :(得分: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', '*');
}
}
}
请注意,这个问题仍然可以获得更好的答案:)