OctoberCMS Добавить список в поле вкладки
Я хотел бы внедрить список в бэкэнд-контроллер для моих пользователей на новой вкладке.
https://ibb.co/fkAWFR (поле добавления вкладки)
UsersController::extendFormFields(function($form, $model, $context){
if (!$model instanceof UserModel)
return;
if (!$model->exists)
return;
$form->addTabFields([
'activity' => [
'tab' => 'Activity',
'type' => 'partial',
'path' => '$/acme/plugin/controllers/viewedjobs/_viewed_jobs.htm'
]
]);
});
https://ibb.co/ktHdvR (включите этот список)
Мой _viewed_jobs.htm частично выглядит так:
listRender ()?>Что выдает ошибку о том, что поведение списка не инициализируется. После некоторого поиска я нашел эти сообщения: https://octobercms.com/forum/post/listcontroller-error-need-help
Итак, я добавил
$this->asExtension('ListController')->index()
в частичную, и теперь он отображает мой контроллер списка пользователей.Я хотел бы отобразить список для моего контроллера ViewedJobs. Я также смотрел учебник здесь: https://octobercms.com/support/article/ob-21 чтобы создать свой список вручную, однако, переменные не определяются, когда я использую этот код.
Я также попытался создать новую конфигурацию списка под плагином Users (который, как я знаю, не лучшая практика), но он выдает ошибку, и метод о groups() не найден.
2 ответа
Вы можете легко показать списки.
Я предполагаю, что вы используете плагин пользователя rain-lab, а текущий UsersController является пользовательским контроллером rain lab
и у вас есть таблица заданий и мм отношение между пользователем и табелем заданий
вам нужно поместить этот код в метод загрузки вашего плагина
// first we extend users model with jobs relation
\RainLab\User\Models\User::extend(function($model) {
$model->belongsToMany['jobs'] = [\Hardiksatasiya\Test\Models\Job::class, 'table' => 'hardiksatasiya_test_job_user'];
});
// we now extend users controller to add relation behavior
// also add relational configuration
// we are doing this with not destructive method
// so our extend will play nice to other's extends
\RainLab\User\Controllers\Users::extend(function($controller) {
// Implement behavior if not already implemented
if (!$controller->isClassExtendedWith('Backend.Behaviors.RelationController')) {
$controller->implement[] = 'Backend.Behaviors.RelationController';
}
// Define property if not already defined
if (!isset($controller->relationConfig)) {
$controller->addDynamicProperty('relationConfig');
}
// Splice in configuration safely
$myConfigPath = '$/hardiksatasiya/test/models/job/config_relation_for_users.yaml';
$controller->relationConfig = $controller->mergeConfig(
$controller->relationConfig,
$myConfigPath
);
});
// now your actual code for extending fields
\RainLab\User\Controllers\Users::extendFormFields(function($form, $model, $context){
if (!$model instanceof \RainLab\User\Models\User)
return;
if (!$model->exists)
return;
$form->addTabFields([
'jobs' => [
'tab' => 'Activity',
'type' => 'partial',
'path' => '$/hardiksatasiya/test/controllers/job/_user_job_relation.htm'
]
]);
});
отношение config => config_relation_for_users.yaml
jobs:
label: Jobs
view:
showCheckboxes: false
toolbarButtons: false
list: $/hardiksatasiya/test/models/job/columns.yaml
отношение частичное => _user_job_relation.htm
<?= $this->relationRender('jobs') ?>
если это не работает, пожалуйста, прокомментируйте
Я пошел вперед и сделал работу вокруг использования отношений менеджера отношений OctoberCMS
UsersController::extend(function($controller){
// Splice in configuration safely
$myConfigPath = '$/acme/plugin/controllers/ControllerName/config_relation.yaml';
$controller->relationConfig = $controller->mergeConfig(
$controller->relationConfig,
$myConfigPath
);
});
Затем я обновил частичный _viewed_jobs.htm до <?= $this->relationRender('viewedJobs') ?>
Теперь у меня есть список, отображаемый как завершенный список, добавленный в поле вкладки для контроллера пользователя.