唔,
有一个问题。当您尝试直接添加它时$model->translatable
,似乎将其视为attribute
模型。
尝试这个 $model->addDynamicProperty(variable_name, value);
\RainLab\User\Models\User::extend(function ($model) {
$model->implement[] = 'RainLab.Translate.Behaviors.TranslatableModel';
$model->addDynamicProperty('translatable', ['about', 'preview_text']);
// like this ^
});
它应该将其视为局部变量并且应该可以工作。
如有任何疑问,请发表评论。
修订 [最终解决方案] - 解决方案:当我们添加新字段时,它适用于现有字段,这不起作用。
问题:翻译机制是它监听backend.form.extendFieldsBefore
表单事件,然后注册字段进行翻译。当我们尝试form
使用extendFormFields
扩展注册新字段时,它会在之后发生,因此翻译侦听器看不到新添加的字段。因此,由于翻译字段注册过程已经完成,因此它们有点被跳过。
解决方案:所以对于解决方案,我们可以在翻译注册发生之前添加我们的字段。幸运的是,翻译插件-1
对于监听这个事件的优先级最低,backend.form.extendFieldsBefore
所以我们可以在它之前注册我们的字段,所以我们现在很好,我们的字段可以在它处理翻译字段之前添加。
代码
\Event::listen('backend.form.extendFieldsBefore', function($widget) {
// You should always check to see if you're extending correct model
if (!$widget->model instanceof \RainLab\User\Models\User) {
return;
}
// we will merge current fields with fields we want to add
// we used shorthand + plus operator for this
$widget->tabs['fields'] = $widget->tabs['fields'] + Config::get('rms.secis::user_fields');
// here Config::get('rms.secis::user_fields') is just returning field array
// Fo ref. Ex:
// return [
// 'gender' => [
// 'label' => 'Gender',
// 'tab' => 'Security Island',
// 'type' => 'radio',
// 'options' => [
// 'male' => 'Male',
// 'female' => 'Female'
// ],
// 'span' => 'auto'
// ],
// ];
});
注意:我们正在向选项卡添加字段,因此我们使用$widget->tabs['fields']
to add fields to the tabs
。如果你想添加normal fields
或者secondary tab fields
你可以分别使用$widget->fields
和$widget->secondaryTabs['fields]
。
是的,现在translator
可以看到我们的字段及其处理,它也应该能够在前端 UI 中显示翻译 UI。
如有任何疑问,请发表评论。