Как я могу в октябрьской 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 с помощью extendFormFieldsextension, это происходит позже, поэтому новые добавленные поля не видны слушателю перевода. поэтому они как бы пропускаются, поскольку процесс регистрации поля перевода уже выполнен.

Решение: в качестве решения мы можем просто добавить наше поле до того, как произойдет регистрация перевода. К счастью, у плагина самый низкий-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

конец документации

Другие вопросы по тегам