Hy,
I have this code to display orders list (offline.mall) in rainlab user form, all works well except the pagination, i have this error “A widget with the class name “ordersList” has not been bound to the controller”
This is my code:
UsersController::extend(function ($controller) {
$controller->addDynamicMethod('ordersListWidget', function($user) use ($controller) {
$config = $controller->makeConfig('$/lcgpro/extenduser/config/order_columns.yaml');
$config->model = new \Offline\Mall\Models\Order;
$config->alias = 'ordersList';
$config->recordsPerPage = 10;
$config->recordUrl = 'offline/mall/orders/show/:id';
$config->controller = $controller;
$widget = $controller->makeWidget(\Backend\Widgets\Lists::class, $config);
$widget->bindToController();
$widget->bindEvent('list.extendQueryBefore', function ($query) use ($user) {
if (!$user || !($user instanceof \RainLab\User\Models\User)) {
$query->whereRaw('1 = 0');
return;
}
$customerIds = \DB::table('offline_mall_customers')
->where('user_id', $user->id)
->pluck('id')
->toArray();
if (empty($customerIds)) {
$query->whereRaw('1 = 0');
} else {
$query->whereIn('customer_id', $customerIds);
}
});
return $widget;
});
});
and this the partial:
<div class="layout" id="orders-list-container">
<div class="layout-row">
<?php
try {
if (!$formModel || !$formModel->id) {
echo '<p class="text-warning">No user loaded yet.</p>';
} else {
$user = \RainLab\User\Models\User::find($formModel->id);
if ($user) {
$widget = $this->ordersListWidget($user);
?>
<input type="hidden" name="user_id" value="<?= $user->id ?>" />
<?= $widget->render() ?>
<?php
} else {
echo '<p class="text-danger">User not found.</p>';
}
}
} catch (\Throwable $e) {
echo '<div class="callout callout-danger">';
echo '<h4>Error rendering orders list</h4>';
echo '<p><strong>Message:</strong> ' . htmlspecialchars($e->getMessage()) . '</p>';
echo '</div>';
}
?>
</div>
</div>
Does anyone have any idea what the mistake is?
Thanks
