【问题标题】:Joomla Language Filter Plugin & Changing a language field in the front endJoomla 语言过滤器插件和更改前端的语言字段
【发布时间】:2017-04-26 21:54:15
【问题描述】:

我尝试让 Akeeba 的 Releasemaker 运行,并将发布/项目的语言设置为 All (*)。但是可以假设这种问题应该发生在任何尝试使用 Site 文件夹中的代码设置数据库字段 language 的代码上。

如果您有一个多语言站点,您可能运行了“系统 - 语言过滤器”插件。此插件将$_REQUEST['language'] 值设置为特定语言。每次。因此,$data = $app->input->getData() 之类的代码将获取该 $_REQUEST 值的语言值,而不是来自 $_POST 数组的值,因此您无法使用通常的 ->bind($data) 操作设置该语言字段。

你也遇到过这个问题吗?您对此有何解决方案?

【问题讨论】:

    标签: joomla


    【解决方案1】:

    我为自己找到了解决方案。我实际上可以想象两种方法来解决这个问题。一方面,您可以重命名从客户端传输到服务器的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', '*');
            }
    
    
        }
    }
    

    请注意,这个问题仍有待更好的答案:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-11
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      相关资源
      最近更新 更多