Joomla.it Forum
Non solo Joomla... => Sviluppo => : tampe125 19 Sep 2010, 21:05:28
-
Ciao, a tutti, eccomi qua di nuovo :D
Sto testando il mio componente e mi sono accorto che non mi funzionano i form se è attiva la modalità SEF.
I link diretti sono ok, ma i form no :-\
ogni volta che faccio un submit ritorno alla visualizzazione di base del componente.
Premetto che tutti i link dell'attributo action dei form sono trattati con il famoso JRoute.
Non ho creato il file router.php perchè al momento non mi interessa che gli url siano SEF; è un componente per il front-end ma solo per amministratori.
che mi sono perso?
-
ciao,
è un po' difficile capire il problema, detto così...
la prima ipotesi è che tu non abbia settato gli opportuni valori dei parametri passati (i campi hidden della form in POST) ma tutto dipende da come hai scritto il codice...
tipicamente le form richiamano la index,php passando i parametri necessari come hidden (option,task, controller,id ...), ma posso solo tirare ad indovinare.
verifica come passi i parametri.
ciao,
marco
-
ciao, innanzi tutto grazie per l'aiuto.
devo dire che questa cosa mi preoccupa non poco: avere un'estensione che non gira quando il modulo SEF è attivo... vuol dire avere un'estensione inutile :'(
allora, ho controllato tutto: tutti i campi ci sono, anche perchè in non-SEF il tutto gira che è una meraviglia.
il problema si presenta solo e soltanto con le chiamate post, per i get tutto ok.
credo ci sia un problema con questa benedetta JRoute (ormai me la sogno anche la notte).
infatti io ho trattato la action dei form con la JRoute, non vorrei che non trovando il file router.php si incarti.
Apro una piccola parentesi: dove deve puntare la action? joomla prende i parametri del controller, option e task e poi ci pensa lui. io di solito inserisco il link generale al controller, del tipo
index.php?option=com_miocomp&controller=contr_in_uso
è giusto?
-
Apro una piccola parentesi: dove deve puntare la action? joomla prende i parametri del controller, option e task e poi ci pensa lui. io di solito inserisco il link generale al controller, del tipo
index.php?option=com_miocomp&controller=contr_in_uso
così ti passano con la get... e i campi hidden solitamente in fondo al form?
M.
-
allora...
ho modificato l'action del form, ho messo sia index.php che una bella #, ma il risultato non cambia (per la cronaca, qual è il valore consigliato?), ma perlomeno ho capito il perchè.
io non utilizzo un controller solo, ma più di uno, per cui nel mio entry point ho questa riga
if($controller = JRequest::getVar('controller')) {
require_once (JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php');}
però ho visto che il parametro non viene mai passato tramite le post, per cui non mi carica il controller etc etc.
per quale cavolo di motivo le chiamate mi escono monche?
mi sa che oggi mi aspetta una giornata di debug :D
-
beh solitamente anch'io ho più di un controller.
<form action="index.php" method="post" name="adminForm"> ... nessun #
..alla fine...
<input type="hidden" name="option" value="com_pippo" />
<input type="hidden" name="id" value="<?php echo $this->rows['id']; ?>" />
<input type="hidden" name="task" value="" />
<input type="hidden" name="controller" value="nomecontroller" />
M.
-
anch'io ho messo le stesse identiche righe...
mi sono accorto che quando fa il submit non mi passa tutti i parametri, ma solo alcuni.
inutile dirlo che tutti i campi hidden sono presenti e i valori sono "ficcati dentro", quindi non vengono da una qualche elaborazione.
c'è un modo per sapere che cosa passa nel momento in cui faccio il submit?
mi sa che mi dovrò ingengnare con il javascript...
cmq, dopo aver acceso un cero all'instant debug, ne accenderò altri per il vostro aiuto :D
-
c'è un modo per sapere che cosa passa nel momento in cui faccio il submit?
-------------------------------------------------------------------------------------------------------
nel controller o nello switch dei controller metti un print_r($_POST) fuori da eventuali return (se c'è commentalo un'attimo)
M.
-
allora...
ho capito perchè non mi prendeva il controller etc etc.
era un problema di javascript, avevo messo un controllo sulla funzione submitbutton, l'ho spostata da un'altra parte (usando la funzione ButtonConfirm della JToolbar) e adesso nel post c'è tutto.
ovviamente continua a non funzionare, ma quindi il problema è da un'altra parte.
nel momento in cui faccio il submit, joomla inizia ad interpretare tutto quanto correttamente (sono arrivato fino al caricamento della view...), però la pagina va per conto suo!
infatti mi segue l'attributo href="#" inserito nel bottone della toolbar! :o
come mai? chiamo un'esorcista?
EDIT: ovviamente tutto questo non succede se non sono in SEF -.-
-
Ciao, hai joomfish installato?
-
nu...
eh eh a quanto pare questo malato sta diventando un caso di studio :D
-
ovviamente continua a non funzionare, ma quindi il problema è da un'altra parte.
nel momento in cui faccio il submit, joomla inizia ad interpretare tutto quanto correttamente (sono arrivato fino al caricamento della view...), però la pagina va per conto suo!
infatti mi segue l'attributo href="#" inserito nel bottone della toolbar!
???Potresti spiegarti meglio
-
lo so, sembra strano ma è così.
php va avanti bello bello con la sua esecuzione, mentre la pagina naviga per i xxx suoi.
quindi Joomla! carica tutto quanto (controller, view etc etc), ma in realtà la pagina segue il link "#", che, processato dal routing mi riporta alla pagina di default del componente.
grazie a firebug ho cambiato al volo l'attributo href e tutto funziona (spero, ora devo fare controlli più approfonditi).
però è una pezza di quelle peggiori, perchè tutto dovrebbe funzionare: ho usato solo funzioni core di Joomla, quindi...
-
vedo che la discussione è andata avanti ;D
1.
la form deve puntare alla index, tutti i parametri vanno come hidden, non mischiare dati in GET e POST se no non sai quale sarà valutato prima. che passi a JRoute??
2.
dati passati.
http://extensions.joomla.org/extensions/access-a-security/backend-a-full-access-control/13883
è una estensione stupida stupida ma ti dà il dump di $_POST e $_GET per ogni pagina.
3.
vi strozzo tutti:
$controller = JRequest::getVar('controller')
require_once (JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php');}
LFI assicurata!
ciao,
marco
-
1. ok.
2. di solito uso il debug di eclipse
3.
LFI??
cosa vuol dire?
ah solo una cosa: occhio a quello che dici, perchè la base è stata creata con il tuo programmino... ;D
a proposito, lo sai che non in tutte le pagine metti il controllo define('_JEXEC')?
-
vi strozzo tutti:
--------------------
if( $mycontroller = JRequest::getWord('controller')){
qs è il mio...gli ho confermato la modalità dinamica del controller .. quello che c'era scritto in effettinn l'ho notato, cmq hai perfettamente ragione:(
M.
ps... passa anche per l'array dei controller implementati...
-
LFI = local file inclusion
stai usando una versione vecchia, comunque sul sito è riportato l'avviso di sicurezza.
adesso verifico il controllo JEXEC
ciao,
marco