OctoberCMS 翻译插件与 SEO 插件不会翻译 CMS 页面和博客的 SEO 关键字

问题描述 投票:0回答:1

我正在使用 OctoberCMS SEO 翻译插件 https://octobercms.com/plugin/anandpatel-seoextension,它的工作原理符合我的期望..但我对翻译插件有疑问 https://octobercms.com/plugin /rainlab-翻译 。请先看我的几张截图。

enter image description here

enter image description here

正如您在我上面的两个屏幕截图中看到的,在博客页面中,当我应该创建或编辑博客时,我无法对元标题、元描述、元关键字等进行翻译..

此外,在我的 CMS 页面中,我也无法使我的“元关键字”可翻译..

我尝试将以下代码放入我的活动插件之一的

Plugin.php
文件中,以便能够使我的博客“元标题”字段可翻译,但它也不起作用..

\RainLab\Blog\Models\Post::extend(function($model) {            
            $model->translatable[] = 'seo_title';
        });

并尝试了下面的代码..

\AnandPatel\SeoExtension\Models\BlogPost::extend(function($model) {
            $model->translatable[] = 'seo_title';
        });

有人可以指导我如何使这些字段可翻译吗?

php octobercms octobercms-plugins
1个回答
4
投票

我调试了它,问题是

SEO Extension Plugin
正在侦听
\Event::listen('backend.form.extendFields' ... 
并且此事件在
backend.form.extendFieldsBefore
之后触发,因此新添加的字段不可翻译。

backend.form.extendFieldsBefore
此事件负责将字段转换为
translatable
字段,因此在此事件之后添加的字段不会显示为
translatable

我计划纠正这种行为并对作者仓库进行公关贡献https://github.com/anand-patel/oc-seo-extension一旦我有一些空闲时间

解决方案可能是[需要在插件基本代码中完成]在

backend.form.extendFieldsBefore
中使用
SEO Extension Plugin
事件,并且在扩展字段期间它需要直接使用
raw config
,现在它使用
$widget->addFields
所以它必须删除它并直接将字段注入到
config
,以便稍后可以使用
RainLab.Translate Plugin
事件由
backend.form.extendFieldsBefore
处理新添加的字段。

所以现在的解决方法在您的自定义插件中添加已经支持跨国的字段,或者您可以再次使用

extendFieldsBefore
并使用
raw config
来添加字段。

这里我们只需使用简单的解决方案并添加具有可翻译字段类型的覆盖字段

use RainLab\Blog\Models\Post;
use Event;
use System\Classes\PluginManager;

public function register() {

  Post::extend(function($post) {
      if (!$post->propertyExists('translatable')) {
          $post->addDynamicProperty('translatable', []);
      }
      $post->translatable = array_merge($post->translatable, ['seo_title', 'seo_description' /* so on ....*/]);
  });

  Event::listen('backend.form.extendFields', function($widget) {
      if(PluginManager::instance()->hasPlugin('RainLab.Blog') && $widget->model instanceof \RainLab\Blog\Models\Post)
        {
            $widget->addFields([
              'seo_title' => [
                  'label'   => 'Meta Title',
                  'type'    => 'mltext', //<- HERE
                  'tab'     => 'SEO'
              ],
              'seo_description' => [
                  'label'   => 'Meta Description',
                  'type'    => 'mltextarea', //<- HERE
                  'size'    => 'tiny',
                  'tab'     => 'SEO'
              ],
              'seo_keywords' => [
                  'label'   => 'Meta Keywords',
                  'type'    => 'mltextarea', //<- HERE
                  'size'    => 'tiny',
                  'tab'     => 'SEO'
              ],
              'canonical_url' => [
                  'label'   => 'Canonical URL',
                  'type'    => 'mltext', //<- HERE
                  'tab'     => 'SEO',
                  'span'    => 'left'
              ],
              'redirect_url' => [
                  'label'   => 'Redirect URL',
                  'type'    => 'mltext', //<- HERE
                  'tab'     => 'SEO',
                  'span'    => 'right'

              ],
              // ... so on
          ],
          'secondary');
        }
  });
}

但这是标准解决方案的解决方法,我计划纠正此问题并将 PR 推送到作者插件存储库可能是 -> https://github.com/anand-patel/oc-seo-extension

如有疑问请评论。

© www.soinside.com 2019 - 2024. All rights reserved.