Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

CP sidebar checks every site for each navigation

Abierto Apto para principiantes
#15,667 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@lazerg ya está trabajando en esto.

Desde el 18/10/2026.

  • #15668 de @lazerg — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
78/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
laravel, mariadb, php

Línea de trabajo

Lee src/CP/Navigation/CoreNav.php alrededor del filtro y el mapeo que aparecen en el issue, y luego compara la llamada propuesta con la consulta de un solo sitio introducida en #14988. Confirma que la barra lateral comprueba la disponibilidad de la navegación en el sitio seleccionado sin recorrer el árbol de cada sitio. La tarea estará hecha cuando las solicitudes de CP eviten las consultas repetidas por sitio y la visibilidad de la navegación siga siendo correcta.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

multisite performance
Bug description

The CP gets slower as you add sites, even on pages unrelated to navigation.

I seeded 1,218 sites and 3 navigations. Each CP request ran ~3,670 queries. The queries came from src/CP/Navigation/CoreNav.php, which checks every site's tree to find out whether a navigation exists in the selected site.

Proposed fix

This follows the same approach as #14988, which made existsIn() a single-site lookup.

Before:

    ->filter(function ($nav) { // line 115
        return User::current()->can('configure navs')
            || $nav->sites()->contains(Site::selected()->handle());
    })
    ->map(function ($nav) {
        $availableInSelectedSite = Site::hasMultiple()
            ? $nav->sites()->contains(Site::selected()->handle())
            : true;

After:

    ->filter(function ($nav) {
        return User::current()->can('configure navs')
            || $nav->existsIn(Site::selected()->handle());
    })
    ->map(function ($nav) {
        $availableInSelectedSite = Site::hasMultiple()
            ? $nav->existsIn(Site::selected()->handle())
            : true;
How to reproduce
  1. Use multisite with a large number of sites (I seeder 1,218).
  2. Create a few navigations with a tree in one site.
  3. Log in as a super user and open any CP page.
Logs

Environment
Environment
Laravel Version: 13.35.0
PHP Version: 8.5.10
Composer Version: 2.10.2
Environment: local
Debug Mode: ENABLED
Maintenance Mode: OFF
Timezone: UTC
Locale: en

Cache
Config: NOT CACHED
Events: NOT CACHED
Routes: NOT CACHED
Views: CACHED

Drivers
Cache: file
Database: mariadb
Logs: stack / daily
Mail: log
Queue: redis
Session: file

Storage
public/storage: NOT LINKED

Laradocs
AI Chat: disabled
Banner: disabled
Caching: enabled
Docs Path: docs
Route Prefix: /communications/cms/help
Search Driver: auto
Theme: auto

Statamic
Addons: 4
License Key: Set
Sites: 1218 (Abbott, Fadel and Denesik, Abbott-Wiegand, Abernathy Group, and 1215 more)
Stache Watcher: Enabled (auto)
Static Caching: Disabled
Version: 6.35.1 PRO

Statamic Addons
statamic/audit-log: 1.1.1
statamic/collaboration: 2.0.1
statamic/eloquent-driver: 5.12.2
statamic/seo-pro: 7.15.1

Statamic Eloquent Driver
Addon Settings: eloquent
Asset Containers: eloquent
Assets: eloquent
Blueprints: eloquent
Collection Trees: eloquent
Collections: eloquent
Entries: eloquent
Fieldsets: file
Form Submissions: eloquent
Forms: eloquent
Global Sets: eloquent
Global Variables: eloquent
Navigation Trees: eloquent
Navigations: eloquent
Revisions: eloquent
Sites: eloquent
Taxonomies: eloquent
Terms: eloquent
Tokens: eloquent
Installation

Existing Laravel app

Additional details

No response

Lenguaje dominante
PHP
Estrellas
4.9k
Forks
647
Merge medio
1 d 17 h
PR fusionados (30 d)
111

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de statamic/cms

Todos los issues de statamic/cms

Issues similares

Más issues de PHP

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.