Back to top

Autore Topic: Recupero parametri da una richiesta  (Letto 2985 volte)

Offline _Ardito87_

  • Esploratore
  • **
  • Post: 66
    • Mostra profilo
Recupero parametri da una richiesta
« il: 19 Dic 2013, 18:27:17 »
Ciao a tutti,
mi serve recuperare l'itemid della voce di menu che seleziono.
Se non avessi attivato la modalita seo url_frielndly avrei potuto utilizzare Request::getVar('Itemid').

Mi serve recuperare l'item id prima che joomla carichi tutte le voci menu nella memoria, quindi questo non mi permette di usare JSite::getMenu()->getActive()->id, in quanto mi serve prima che Joomla crei il menu.

Non riesco a trovare una soluzione... eppure joomla penso che dovra riconveritire url_friendly in un url che puo' utilizzare recuperando tutti gli attributi dell url normale tra cui itemid


Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Recupero parametri da una richiesta
« Risposta #1 il: 19 Dic 2013, 18:50:54 »
JRequest::getInt('Itemid') forse sarebbe meglio; comunque joomla ricrea la variabile durante il processo di inizializzazione del framework e pertanto la è disponibile.

l'unico modo di accedere al sistema, te lo scrivo ma non ho capito che vuoi fare, prima che joomla carichi i menù è un plugin di tipo system legato a onAfterInitialise.

ciao.
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline _Ardito87_

  • Esploratore
  • **
  • Post: 66
    • Mostra profilo
Re:Recupero parametri da una richiesta
« Risposta #2 il: 19 Dic 2013, 19:04:18 »
La prima query che joomla fa è questa:
SELECT m.id, m.menutype, m.title, m.alias, m.note, m.path AS route, m.link, m.type, m.level, m.language,m.browserNav, m.access, m.params, m.home, m.img, m.template_style_id, m.component_id, m.parent_id,e.element as component
  FROM ff1xp_menu AS m
  LEFT JOIN ff1xp_extensions AS e
  ON m.component_id = e.extension_id
  WHERE m.published = 1
  AND m.parent_id > 0
  AND m.client_id = 0
  ORDER BY m.lft

Una cosa che trovo che vada bene per il 99%dei siti. Il mio sito ha circa 8000 voci di meno, il processo legato a quella query è di circa 2 secondi, in tutti i siti si aggira sui 0.4 secondi.
In locale ho pensato ma se invece di caricare tutte le voci di menu carico solo quelle che verrano visualizzate nella pagina selezionata?
In locale ho implementato quello che volevo andando a recuperare solo i menu e le voci di menu che sono inseriti nella pagina che voglio visualizzare. Bene funziona tutto e il tempo è diminuti a 0.5secondi.

Porto la modifica in rete e non funziona. Perche' in locale non ho attivo user_friendly quindi in ogni url ho l'attributo itemid che posso recuperare con Request::getVar('Itemid').
In remoto questo non lo posso fare perchè ho attivo l'user-friendly.

Potresti farmi capire cosa intendevi con un plugin di tipo system legato a onAfterInitialise??

Grazie mille

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Recupero parametri da una richiesta
« Risposta #3 il: 19 Dic 2013, 19:39:26 »
ok, ora comincia ad avere un senso  :)

la prima cosa che proverei è implementare la cache in mysql, ma questo richiede che il server sia tuo.

la query indicata viene eseguita sempre, ma almeno dopo la la fase di inizializzazione, quindi lo spazio per scrivere un plugin c'è. ma prima di gettarsi nel coding, dimmi, come hai fatto la modifica indicata?
hai modificato direttamente la classe JMenuSite o come?

ciao
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline _Ardito87_

  • Esploratore
  • **
  • Post: 66
    • Mostra profilo
Re:Recupero parametri da una richiesta
« Risposta #4 il: 19 Dic 2013, 19:42:46 »
Grazie mille per risposte...
Ho modificato la classe JMenuSite che estende JMenu in questo modo:
Codice: [Seleziona]
$itemid = JRequest::getInt('Itemid');
        //recupero i menu presenti in tutte le pagine
        $db =& JFactory::getDBO();
        $query = "Select params from #__modules_menu MM, #__modules M where MM.menuid=0 and MM.moduleid=M.id and M.module IN ('mod_menu','mod_accordeonck') and language='it-IT'";
        $db->setQuery($query);
        $result1=$db->loadObjectList();
        $result2=array();
        //recupero i menu presenti nella pagina desiderata
        if($itemid!=""){
            $db =& JFactory::getDBO();
            $query = "Select params from #__modules_menu MM, #__modules M where MM.menuid=".$itemid." and MM.moduleid=M.id and M.module IN ('mod_menu','mod_accordeonck') and language='it-IT'";
            $db->setQuery($query);
            $result2=$db->loadObjectList();   
        }
        $result= array_merge($result1,$result2);
        $menutype="";
        //echo print_r($result);
        foreach($result as $r){
            $a = json_decode($r->params);
            if(!strstr($menutype,$a->menutype));
                $menutype.="'".$a->menutype."',";
        }
poi ho aggiungo questa riga quando effettua quella query
Codice: [Seleziona]
$query->where('m.menutype IN ('.$menutype.')');

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Recupero parametri da una richiesta
« Risposta #5 il: 19 Dic 2013, 20:38:30 »
sul codice mi fido ciecamente...

dai un'occhiata alla tabella #__ menu, il field `path` dovrebbe consentirti di risalire all'Itemid dall'url sef.

inutile parlare di plugin, se hai modificato il codice di joomla inserisci anche questo lookup nel file stesso.

ciao
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline _Ardito87_

  • Esploratore
  • **
  • Post: 66
    • Mostra profilo
Re:Recupero parametri da una richiesta
« Risposta #6 il: 19 Dic 2013, 21:09:30 »
Ciao si in effetti cosi potrei risolvere, ti ringrazio.
Strano però che joomla effettui quella query, non capisco proprio perchè hanno implementato quella cosa in questo modo.

Ciao e grazie

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Recupero parametri da una richiesta
« Risposta #7 il: 19 Dic 2013, 21:32:31 »
perché in più del 99% dei siti è molto più efficiente prendere l'intero menù che non effettuare più queries, lo hai detto tu...  ;D ;D

ciao
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

 



Web Design Bolzano Kreatif