我正在使用 OctoberCMS SEO 翻译插件 https://octobercms.com/plugin/anandpatel-seoextension,它的工作原理符合我的期望..但我对翻译插件有疑问 https://octobercms.com/plugin /rainlab-翻译 。请先看我的几张截图。
正如您在我上面的两个屏幕截图中看到的,在博客页面中,当我应该创建或编辑博客时,我无法对元标题、元描述、元关键字等进行翻译..
此外,在我的 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';
});
有人可以指导我如何使这些字段可翻译吗?
我调试了它,问题是
正在侦听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
如有疑问请评论。