packages; $token = Session::getFormToken(); // Group by category $grouped = []; foreach ($packages as $pkg) { $grouped[$pkg->category][] = $pkg; } $statusBadge = [ 'installed' => ['bg-success', 'Installed'], 'update_available' => ['bg-warning text-dark', 'Update Available'], 'not_installed' => ['bg-secondary', 'Not Installed'], ]; ?>
$pkgs): ?>

status] ?? $statusBadge['not_installed']; ?>
label); ?>
type); ?>

description); ?>

needs_dlid) && !$pkg->has_dlid && $pkg->status !== 'not_installed'): ?>
Download key missing — updates will fail. Configure
local_version): ?> vlocal_version); ?> remote_version && $pkg->status === 'update_available'): ?> → remote_version); ?> remote_version): ?> Latest: remote_version); ?>
article_url): ?> download_url && $pkg->status === 'update_available'): ?> download_url && $pkg->status === 'not_installed'): ?> status === 'installed'): ?> type === 'component') { $dashLink = 'index.php?option=' . $pkg->element; } elseif ($pkg->type === 'package' && strpos($pkg->element, 'pkg_') === 0) { $comElement = 'com_' . substr($pkg->element, 4); if (is_dir(JPATH_ADMINISTRATOR . '/components/' . $comElement)) { $dashLink = 'index.php?option=' . $comElement; } } ?> Open Installed protected && $pkg->extension_id): ?> No release