Как я могу в октябрьской CMS использовать плагин перевода после расширения новых полей в пользовательский плагин?
Для своего проекта я использую плагин User и Translate. Я добавил новые настраиваемые поля для пользователя и теперь хочу их перевести.
Думаю, я знаю, почему это не работает. Но решения нет. У кого-нибудь есть идея?
если я добавлю в $model-> переводимые поля по умолчанию, такие как "электронная почта", работает нормально.
Я добавил функцию загрузки в свой собственный плагин с помощью этого кода
\RainLab\User\Models\User::extend(function ($model) {
$model->implement[] = 'RainLab.Translate.Behaviors.TranslatableModel';
$model->translatable = ['about', 'preview_text'];
});
2 ответа
Хм,
Есть одна проблема. когда вы пытаетесь добавить это напрямую$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
extension, это происходит позже, поэтому новые добавленные поля не видны слушателю перевода. поэтому они как бы пропускаются, поскольку процесс регистрации поля перевода уже выполнен.
Решение: в качестве решения мы можем просто добавить наше поле до того, как произойдет регистрация перевода. К счастью, у плагина самый низкий-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']
кadd fields to the tabs
. Если вы хотите добавитьnormal fields
илиsecondary tab fields
ты можешь использовать$widget->fields
а также$widget->secondaryTabs['fields]
соответственно.
да нет translator
может видеть наши поля и их обработанные, он также должен отображать интерфейс перевода в интерфейсе frontend-ui.
если есть сомнения, прокомментируйте.
@ Hardik-Satasiya
да, больше никаких ошибок во внешнем интерфейсе, но новая проблема в том, что нет функций перевода для полей. Может быть, добавить скрипт jQuery в контроллер?
Интеграция без файлов JQuery и October Framework: https://octobercms.com/plugin/rainlab-translate
конец документации