Problemi con le route

Ciao ragazzi...

vorrei rendere più amichevoli i link alle mie pagine e sto provando a studiare le route di zend.

Naturalmente non riesco ad ottenere quello che voglio...

Per cominciare vorrei chiedere se qualcuno sà dirmi come mai accade questa cosa:

Ho aggiunto una route al router in questa maniera:

$router = $front->getRouter();

$route = new Zend_Controller_Router_Route('categorie/:controller/:cli',array('controller'=>'Affiliato','cli'=>'','action'=>'menu'));

$router->addRoute('categorie', $route);

Nel momento in cui accedo alla pagina "http://localhost/categorie", i link del menù, che prima (entrando solo con localhost) erano del tipo http://localhost/Radice/menu/menu/Voce+principale, diventano http://localhost/categorie/Radice.... tutti uguali tra loro.... come mai ? ???

Tenete presente che gli indirizzi a video vengono messi usando il metodo getHref sugli oggetti page di zend_navigator dove, con uno script a parte, ho impostato le varie pagine del sito.

Tenete anche presente che non ho toccato la route 'standard' del router...

Non sò quanto sia stato chiaro... ma spero che qualcuno sappia darmi una mano!

inviato 7 anni fa
dacdam
X 0 X
Naturalmente non riesco ad ottenere quello che voglio...

Esattamente cosa vuoi ottenere? A me non è chiaro...

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Si tratta di una prova per vedere se ho capito come funzionano le route.

Riferendomi a questa route:

$router = $front->getRouter();

$route = new Zend_Controller_Router_Route('categorie/:controller/:cli',array('controller'=>'Affiliato','cli'=>'','action'=>'menu'));

$router->addRoute('categorie', $route);

Vorrei che digitando il percorso localhost/categorie/Affiliato/BCE01 venisse emessa una pagina (e questo riesco ad ottenerlo). Ma non vorrei che, da quel momento, tutti i link presenti in quella pagina ed in qualsiasi altra venissero interpretati secondo quella route.

Guardando un pò dentro gli script del framework ho notato che, dal momento in cui una pagina viene emessa utilizzando una certa route, questa route diventa la "corrente" per il framework. Siccome poi il metodo getHref delle page mvc di zend navigation usa la route corrente per costruire l'url della pagina, ecco che ho l'errore per tutti i link a pagine che non dovrebbero essere gestite tramite quella route...

Ma non è che ho capito male come si usano le route ? Io pensavo che bastasse aggiungerle e che zend le usasse (a scalare dall'ultima alla prima) per rendere gli url più SEF... invece vedo che quando una route matcha per visualizzare una pagina viene usata anche su tutti i link in essa contenuti, anche quelli che con la route in questione non c'entrano niente!

risposto 7 anni fa
dacdam
X 0 X

Vorrei che digitando il percorso

localhost/categorie/Affiliato/BCE01

venisse emessa una pagina (e questo riesco ad ottenerlo). Ma non vorrei che, da quel momento, tutti i link presenti in quella pagina ed in qualsiasi altra venissero interpretati secondo quella route.

Quello che sbagli, credo, è il come tu crei i link all'interno di quella pagina, non utilizzare getHref, prova ad utilizzare l'helper url.

Maggiori dettagli credo tu possa trovarli qui:

http://framework.zend.com/manual/en/zend.controller.router.html

Potresti fornire un esempio di come generi i link della tua pagina, per avere una idea più precisa?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Effettivamente i link li genero sempre usando getHref...

$htmlMenu .= '<li'.$classeLi.'><a href="'.$elementoAlbero->getHref().'">'.$elementoAlbero->get('label').'</a></li>'

Dell'helper url non ero a conoscenza, adesso provo a documentarmi.

Però pensavo: non è poi così male che anche i link che emetto nelle mie pagine siano ricodificati secondo le route... anzi, penso che preferirei così, se solo funzionasse bene.

Ieri sera ho provato anche a mettere in chain le route, ma non riesco proprio a capire come funzionino...

Pensavo che, visto che non centrano niente con la route che ho aggiunto al router nel file di bootstrap, gli altri indirizzi della pagina venissero emessi seguendo la route 'default'.

Non sapresti darmi un'indicazione di massima su quando e perchè si usano le route ?

E cosa bisogna usare invece se si vuole che gli indirizzi delle proprie pagine siano più SEF ?

Ciao e, al di là di queste ultime domande, grazie mille per le risposte che mi hai fin qui dato.

risposto 7 anni fa
dacdam
X 0 X

Non ho trovato documentazione esauriente sull'helper url, ma guardando la classe ho capito....

Vuol dire che ho cannato in pieno tutti gli url emessi nelle mie pagine ??

Ma allora a cosa serve getHref ? Sono confuso  :o

risposto 7 anni fa
dacdam
X 0 X

Il getHref ritorna l'url di una azione/pagina, esso può risultare utile in varia ambiti di utilizzo...

Specialmente per quanto riguarda la navigazione, fai riferimento qui per la documentazione e degli esempi:

http://framework.zend.com/manual/en/zend.navigation.pages.html

http://framework.zend.com/manual/en/zend.navigation.pages.html#zend.navigation.pages.mvc.example.getHref

$elementoAlbero come l'hai definito prima di richiamarlo?

Per l'helper url ti avevo dato il link alla documentazione prima, non è stata utile? :bye:

risposto 7 anni fa
Mario Santagiuliana
X 0 X

c'è anche questo che già usa dacdam che nell'esempio 37.4 spiega quello che gli serve

http://framework.zend.com/manual/en/zend.navigation.pages.html#zend.navigation.pages.mvc.example.routes

ciaoooo

risposto 7 anni fa
vercinstex
modificato 7 anni fa
X 0 X

@ MarioS: la documentazione sull'helper url l'ho vista ma non mi sembra dica molto.

Per quanto riguarda $elementoAlbero, l'ho definito come nuova istanza di Zend_Navigation_Page_Mvc.

@vercinstex: ho visto il tuo consiglio: non avevo pensato di ritornare alla documentazione delle page, pensavo di conoscerle ormai (maledetta presunzione).

Penso che la soluzione che mi proponi sia la migliore: mi permette di continuare a mantenere tutta la conoscenza legata alle pagine del mio sito nell'oggetto Zend_Navigation_Page_Mvc senza aggiungere l'helper url che mi porterebbe tanta manutenzione in più.

Ciao!

risposto 7 anni fa
dacdam
X 0 X

Per chiudere la discussione (e a beneficio di chiunque avesse mai bisogno di dritte sulle route): ho fatto delle prove e sono riuscito a gestire indirizzi più SEF alle mie pagine usando le page ed il loro metodo getHref. Ho anche scoperto che il metodo getHref alla fine utilizza l'helper url per creare gli indirizzi.

Perchè tutto funzioni nelle page deve essere impostata la route. In questa maniera il metodo getHref crea il link alla pagina tenendo conto della route che le è stata assegnata. Io ho deciso di creare una sottoclasse della Zend_Navigation_Page_Mvc, metterci all'interno il metodo __construct e testare se nei parametri ricevuti è presente la chiave 'route'. Qualora questa non fosse presente viene aggiunta col valore 'default' e successivamente viene lanciato il costruttore della classe parent.

Così facendo invece di passare tutte le page del mio sito per aggiungere la route, mi sono limitato a mettere mano a quelle che devono seguire una route diversa dalla 'default'.

Attenzione ad una cosa: anche se l'impostazione delle route in alcuni casi rende inutile impostare controller ed action nella page, fatelo comunque altrimenti il metodo isActive della page smetterà di funzionare e addio voce di menù corrente evidenziata!

risposto 7 anni fa
dacdam
X 0 X

Ho notato una cosa: se digito un indirizzo "standard", quindi senza utilizzare la nuova notazione derivante dalla route personalizzata ma utilizzando il solito www.sito.it/controller/action/parametri, la pagina viene comunque visualizzata.

Devo preoccuparmi ? Ovvero: il fatto che la pagina sia accessibile da due link differenti mi darà problemi di posizionamento ?

Come posso fare per utilizzare una route personalizzata e rendere la pagina accessibile da un solo indirizzo ?

risposto 7 anni fa
dacdam
X 0 X
Devo preoccuparmi ? Ovvero: il fatto che la pagina sia accessibile da due link differenti mi darà problemi di posizionamento ?

Direi di no perchè hai ancora la route di default.

Come posso fare per utilizzare una route personalizzata e rendere la pagina accessibile da un solo indirizzo ?

Rendi la tua route personalizzata quella di default.

Ciao

risposto 7 anni fa
Mario Santagiuliana
X 0 X
Direi di no perchè hai ancora la route di default.

Non ho capito la risposta: in un altra discussione Gianni mi diceva che rendere accessibile da due link la stessa pagina è fortemente penalizzante dal punto di vista del posizionamento, questa è la mia preoccupazione dal momento che non posso fare a meno della route di default.

Rendi la tua route personalizzata quella di default.

Non voglio: alcune pagine del mio sito devono essere linkate tramite la route di default, altre devono essere raggiungibili con la mia route personalizzata... mi servono tutte e due!

La soluzione al mio problema sarebbe fare in modo che le pagine con route personalizzata non siano più raggiungibili dalla route di default... ma non sò come fare.

risposto 7 anni fa
dacdam
X 0 X
Direi di no perchè hai ancora la route di default.

Non ho capito la risposta: in un altra discussione Gianni mi diceva che rendere accessibile da due link la stessa pagina è fortemente penalizzante dal punto di vista del posizionamento, questa è la mia preoccupazione dal momento che non posso fare a meno della route di default.

Nel senso che io non mi preoccuperei per il funzionamento del sito...in effetti per avere maggiore visibilità è meglio se è accessibile da un unico url.

Rendi la tua route personalizzata quella di default.

Non voglio: alcune pagine del mio sito devono essere linkate tramite la route di default, altre devono essere raggiungibili con la mia route personalizzata... mi servono tutte e due!

La soluzione al mio problema sarebbe fare in modo che le pagine con route personalizzata non siano più raggiungibili dalla route di default... ma non sò come fare.

Vedo di capire...ma io ho paura sia difficile questa opzione...però non saprei proprio come fare...

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Una prima soluzione che mi viene in mente sarebbe di definire route personalizzate per tutte le pagine e poi eliminare la route di default.

Non mi piace molto perchè mi obbliga a prevedere route per tutte le pagine, mentre io vorrei farlo solo per quelle che mi interessa.... e poi mi sà di sconfitta!  >:(

 Però è praticabile.

risposto 7 anni fa
dacdam
X 0 X

Puoi fare un esempio di due URL che punterebbero alla stessa pagina?

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

Impostando una route di prova, accedo alla pagina con questo url:

http://localhost/prova/BCE01/voce+01+BCE

Ma, se qualcuno scrive nella barra indirizzi l'url classico:

http://localhost/Affiliato/menu/cli/BCE01/menu/voce+01+BCE

continua a funzionare ed a puntare alla stessa pagina.

Naturalmente nel sito non esisterebbero link a quella pagina diversi da quello risultante dalla route personalizzata, ma quella di default resta comunque sempre valida.

risposto 7 anni fa
dacdam
X 0 X

se il secondo URL non comparirà da nessuna parte allora non credo che ci possano essere problemi con Google

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda