The Event Horizon

"Il punto di non ritorno"

You do not have any administrative items

Sperando di esservi utile vi rancconto come ho risolto il problema in oggetto.
Provo a riassumere la causa e a darvi una regola generale per risolvere in qualunque caso simile a questo.

Per risolvere dovete avere un pò di dimestichezza con i database almeno, se conoscete anche php siete a cavallo.

Non so in quale punto dell'installazioni dei vari moduli si è verificato, ma ad un certo punto mi sono accorto che la pagina del menu di amministrazione Reports non era più accessibile, mentre le sue sotto pagine si.
Il problema che ho riscontrato stava nel fatto che in qualche modo il valore di un campo della tabella menu_link andava in conflitto con quello del menu in questione.
Elenco solo alcuni campi delle tabelle interessate che servono a capire il problema.

menu_link 
menu_name --> nome del menu
mlid --> contiene l'id della riga
plid  --> contiene l'id del menu padre
link_path  --> contiene il path su cui andare
router_path --> come il precedente ma serve ad andare in join con la tabella router_path 

router_path
path --> serve ad andare in join  con menu_link tramite il campo router_path

nel file system.module di Drupal viene fatta la query che fa la join fra le tabelle sopra indicate e filtra i dati in base a dei parametri

  $query = db_select('menu_links', 'ml', array('fetch' => PDO::FETCH_ASSOC));
  $query->join('menu_router', 'm', 'm.path = ml.router_path');
  $query->fields('ml')

    ->fields('m', array_diff(drupal_schema_fields_sql('menu_router'), array('weight')))
    ->condition('ml.plid', $item['mlid'])
    ->condition('ml.menu_name', $item['menu_name'])
    ->condition('ml.hidden', 0);

 

dopo aver eseguito la query precedente viene fatto un ciclo sui risultati nel mio caso, e penso anche in altri casi, questo ciclo non viene eseguito perché la query non restituisce nulla.
Questo comportamento è dovuto al fatto che mlid usato non è quello corretto in quanto nella tabella menu_links ho trovato due righe che avevano lo stesso route_path.

Eseguendo la query sopra con opportune modifiche e senza usare l'id mi tornava due righe e verificando l'id che viene passato alla query, dentro php, mi sono accorto che era quello sbagliato.
Infatti quando viene popolato mlid viene preso il primo della lista nel, mio caso era legato ad un'altra pagina' ma non essendo questa dello stesso menu (campo menu_name) non lo trovava e da qui la query vuota.

Per risolvere ho cercato all'interno della tabella menu_router il path della pagina "abusiva" ed ho modificato di conseguenza nella tabella menu_link il route_path della pagina che creava il problema rimettendolo al valore corretto, una volta fatto questo, il problema è scomparso magicamente.

Spero di esservi stato utile, in caso vi servano ulteriori informazioni non esitate a chiedere.

Nota: state attenti nel fare queste modifiche, fate sempre un backup del db o rischiate di perdere il lavoro fatto

Aggiornamento: penso di aver trovato il modulo che ha creato queto problema e il "Page Title" appena ho disinstallato questo modulo mi si è ripresentato il problema e ho dovuto rimuovere la riga che mi creava il duplicato nella tabella menu-links. Probabilmente va in conflitto con qualche altro modulo.

Ciao

 

category: 
Powered by Drupal