[gdrcd 5.x] Problemi con Dialog
[gdrcd 5.x] Problemi con Dialog postato il 19/05/2012 21:53:38 nel forum programmazione, open source e hosting
Allora, sto cercando di usare dialog per aprire delle pop up.
In particolare, vorrei che la scheda del pg si aprisse in pop-up.
Causa mia somma ignoranza... non mi riesce, ovviamente >.<
la questione è, sostanzialmente, che non riesco a far sì che la pop up si apra correttamente. Infatti mi ributta indietro messaggio d'errore: "Non hai specificato il nome del pg o il pg non esiste".
Ora, nello specifico questa dovrebbe essere la pop-up della propria scheda, nel menù personale.
Al che la domanda: come faccio a far sì che la pop si apra correttamente, ovvero che, ciascun utente, schiacciando sul proprio tasto "scheda", si veda aperta, nella pop up, la propria scheda?
Ringrazio per ogni aiuto :)
Riporto qui sotto codice e funzione
<a href="#" id="open">Scheda</a>
...
<div id="finestra">
<?php include('pages/scheda.inc.php'); /*Menu del gioco*/ ?>
</div>
<script type="text/javascript">
$(document).ready(function(){
$("a#open").click(function(){
$('#finestra').dialog("open");
return false;
});
$('#finestra').dialog({
autoOpen: false
});
});
</script>
19/05/2012 23:01:54
ragnar ha scritto: non sono troppo pratico di javascript, quindi non sono affatto sicuro della risposta, ma hai provato a modificare il link dal menu così..?
<div id="finestra">
<?php include('pages/scheda.inc.php?pg='.$_SESSION['login'].''); /*Menu del gioco*/ ?>
</div>
provato ora.
Mi risputa indietro questo (nella popup)
"Warning: include(scheda.inc.php?pg=Test) [function.include]: failed to open stream: No such file or directory in /membri/xxx/pages/link_menu.inc.php on line 31
Warning: include() [function.include]: Failed opening 'scheda.inc.php?pg=Test' for inclusion (include_path='.:') in /membri/xxx/pages/link_menu.inc.php on line 31"
20/05/2012 16:16:07
Solito problema della confusione tra percorsi del filesystem e indirizzi di rete.
La pagina scheda.php richiede che la variabile $_GET['pg'] contenga il nome del pg. Ma se usi include() devi assicurarti che le variabili siano impostate per far funzionare quella pagina. Ti ricordo che include() esegue il codice nello scope di dove è posizionata la chiamata a include. Non è una chiamata di rete indipendente con le sue variabili private.
Mettere insieme due pagine che non erano pensate per stare insieme, usando include(), è un rischio, potrebbero sovrascriversi variabili a vicenda e non funzionare più. Inoltre se in una delle due pagine avviene un errore fatale anche l'esecuzione dell'altra viene bloccata.
Io direi che non è proprio consigliabile includere la scheda lato server, io la includerei lato client. Così facendo useresti indirizzi web invece che percorsi filesystem e quindi potresti usare i parametri delle richieste GET. Oltre al vantaggio di non appesantire inutilmente il browser se l'utente non vuole aprire la scheda. (con la tua soluzione la scheda verrebbe caricata sempre e comunque, anche se l'utente non la vuole aprire).
Non mi ricordo esattamente che metodi ha dialog, ma è abbastanza facile dire a dialog di inviare caricare la pagina scheda con AJAX (con i suoi parametri) solo quando l'utente clicca sul tasto apposito.
20/05/2012 16:35:06
leoblacksoul ha scritto: Solito problema della confusione tra percorsi del filesystem e indirizzi di rete.
La pagina scheda.php richiede che la variabile $_GET['pg'] contenga il nome del pg. Ma se usi include() devi assicurarti che le variabili siano impostate per far funzionare quella pagina. Ti ricordo che include() esegue il codice nello scope di dove è posizionata la chiamata a include. Non è una chiamata di rete indipendente con le sue variabili private.
Mettere insieme due pagine che non erano pensate per stare insieme, usando include(), è un rischio, potrebbero sovrascriversi variabili a vicenda e non funzionare più. Inoltre se in una delle due pagine avviene un errore fatale anche l'esecuzione dell'altra viene bloccata.
Io direi che non è proprio consigliabile includere la scheda lato server, io la includerei lato client. Così facendo useresti indirizzi web invece che percorsi filesystem e quindi potresti usare i parametri delle richieste GET. Oltre al vantaggio di non appesantire inutilmente il browser se l'utente non vuole aprire la scheda. (con la tua soluzione la scheda verrebbe caricata sempre e comunque, anche se l'utente non la vuole aprire).
Non mi ricordo esattamente che metodi ha dialog, ma è abbastanza facile dire a dialog di inviare caricare la pagina scheda con AJAX (con i suoi parametri) solo quando l'utente clicca sul tasto apposito.
uhm, credo di aver capito in cosa sbagliavo.... gentilissimo e chiarissimo come sempre :)
Solo... temo di non aver individuato la soluzione <.<" potresti farmi un esempio banalissimo, anche senza dialog, con cui posso fare una chiamata che mi apra in pop up la scheda personaggio?
20/05/2012 22:00:14
Avevo dimenticato di aggiungere questo nel mio post precendente: NON SONO POPUP!
Dialog non crea popup, non sono finestre esterne alla principale, sono solamente dei <div> fluttuanti. I popup sono quelli che si aprono con una chiamata a window.open()
Vado a vedere che metodi ha dialog che faccio prima XD
<script type="text/javascript">
$(function(){
$("a#open").click(function(){
$('#finestra').dialog("open");
return false;
});
$('#finestra').dialog({
autoOpen: false
open: function(){
$('#finestra').load('pages/scheda.inc.php?pg=NOME_PG')
}
});
});
</script>
20/05/2012 23:40:02
leoblacksoul ha scritto: Avevo dimenticato di aggiungere questo nel mio post precendente: NON SONO POPUP!
Dialog non crea popup, non sono finestre esterne alla principale, sono solamente dei <div> fluttuanti. I popup sono quelli che si aprono con una chiamata a window.open()
Vado a vedere che metodi ha dialog che faccio prima XD
<script type="text/javascript">
$(function(){
$("a#open").click(function(){
$('#finestra').dialog("open");
return false;
});
$('#finestra').dialog({
autoOpen: false
open: function(){
$('#finestra').load('pages/scheda.inc.php?pg=NOME_PG')
}
});
});
</script>
ho messo così
<div id="finestra">
</div>
<script type="text/javascript">
$(document).ready(function(){
$("a#open").click(function(){
$('#finestra').dialog("open");
return false;
});
$('#finestra').dialog({
autoOpen: false
open: function(){
$('#finestra').load('pages/scheda.inc.php?pg=$_SESSION['login']')
}
});
});
</script>
a cliccare sul tasto corrispondente, però, non succede assolutamente niente o.ò nel senso... non apre proprio alcuna finestra!
22/05/2012 23:34:54
Non saprei. Io fatto una prova scaricando dialog fresco fresco dal sito di jqueryui e mettendo insieme un paio di paginette al volo. Il codice che ho usato è questo e funziona perfettamente.
<html>
<head>
<title>Prova</title>
<link rel="stylesheet" type="text/css" href="./css/ui-lightness/jquery-ui.css" />
<script src="js/jquery.js" type="text/javascript"></script>
<script src="js/jquery-ui.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
$('#babba').dialog({
'autoOpen':false,
'open':function(){
$('#babba').load('page.html');
}
})
$('#show').click(function(){
$('#babba').dialog("open");
})
});
</script>
</head>
<body>
<div id="show">Ciao</div>
<div id="babba"></div>
</body>
</html>
Quando clicco su "Ciao" il dialog si apre e carica il contenuto della pagina page.html correttamente.
01/06/2012 19:40:05
Ringrazio Leo per le dritte e l'aiuto... riprendendo l'ultimo codice postato la dialog si apre xD
Ora però mi trovo a combattere con la struttura di gdrcd <.<" la scheda è una pagina inclusa e, mettendo semplicemente, dopo load, di aprire "scheda.inc.php", mi diceva che non era stato specificato il nome del pg.
Ora, andando a spulciare nel forum vari consigli del creatore del pacchetto, veniva indicato, come soluzione per mettere la scheda in pop up, di replicare la struttura del main, indicizzando e mettendo come innerpage la scheda. Ok, sembra turco, lo so. Esemplifico.
la mia funzione è
<script type="text/javascript">
$(function(){
$('#finestra').dialog({
width:750,
height: 575,
'autoOpen':false,
'open':function(){
$('#finestra').load('../scheda.php');
}
})
$('a#open').click(function(){
$('#finestra').dialog("open");
})
});
</script>
e la pagina scheda.php, semplicemente
<?php session_start(); ?>
<?php
//Includio i parametri, la configurazione, la lingua e le funzioni
include('includes/constant_values.inc.php');
include('config.inc.php');
include('vocabulary/'.$PARAMETERS['languages']['set'].'.vocabulary.php');
include('includes/functions.inc.php');
//Eseguo la connessione al database
$handleDBConnection = gdrcd_connect();
//Ricevo il tempo di reload
$i_ref_time = gdrcd_filter_get($_GET['ref']);
$strInnerPagez = 'scheda.inc.php';
$_REQUEST['pg'] = $_SESSION['login'];
?>
<?php /*print_r($_SESSION);*/ include('pages/'.$strInnerPagez); ?>
<?php include('footer.inc.php'); /*Footer comune*/?>
così mi si apre correttamente, nella pop up, la scheda del personaggio loggato.
Ora però sono impigliata su due scogli:
1) ma quello che ho usato è l'unico metodo con lo strumento a disposizione (gdrcd 5.1) per fare quel che voglio?
2) ...come faccio a far aprire in pop up anche le screde di... altri pg? ovvero, per esempio, dalla lista dei presenti estesi, cliccando su tizio far aprire la scheda di tizio?
grazie per ogni aiuto!
01/06/2012 21:08:26
Oh beh ora è semplice. Dato che la scheda viene caricata con una richiesta Ajax le due pagine sono completamente indipendenti. Semplicemente leva la riga che fa $_REQUEST['pg']=$_SESSION['Login'] e metti il solito "?pg=NOME_DEL_PLAYER" nella chiamata load() di javascript.
Volendo puoi tenere la riga che assegna il nome di sessione alla array Request, ma mettila dentro a un if; per fare in modo che quell'assegnamento avvenga solo se $_REQUEST['pg'] è vuota.
01/06/2012 21:45:27
leoblacksoul ha scritto: Oh beh ora è semplice. Dato che la scheda viene caricata con una richiesta Ajax le due pagine sono completamente indipendenti. Semplicemente leva la riga che fa $_REQUEST['pg']=$_SESSION['Login'] e metti il solito "?pg=NOME_DEL_PLAYER" nella chiamata load() di javascript.
Volendo puoi tenere la riga che assegna il nome di sessione alla array Request, ma mettila dentro a un if; per fare in modo che quell'assegnamento avvenga solo se $_REQUEST['pg'] è vuota.
ok, ho provato a fare come dici. Ho preso la pagina presenti estesi per far sì che la scheda, da quella lista, si apra in pop up. Ho sistemato quanto dovevo nel codice e ho trasformato così la funzione:
<script type="text/javascript">
$(function(){
$('#finestra').dialog({
width:750,
height: 575,
'autoOpen':false,
'open':function(){
$('#finestra').load('../scheda.php?pg='.$record['nome']);
}
})
$('a#open').click(function(){
$('#finestra').dialog("open");
})
});
</script>
il risultato è che la dialog si apre, ma è una magnifica pagina vuota ç.ç dove sbaglio? ç_ç"
02/06/2012 20:13:02
Stai mischiando Javascript e PHP. Con cosa scrivi codice? Dovresti usare un editor che ti evidenzia in modo diverso i vari linguaggi di programmazione, così ti accorgi subito quando stai cercando di scrivere PHP dentro a Javascript.
Uno script PHP inizia sempre con <?php e finisce sempre con ?>
Il tuo codice diventa:
$('#finestra').load('../scheda.php?pg=<?php echo gdrcd_filter('out',$record['nome']); ?>');
PHP può essere usato anche per generare javascript ;)
Discussione seguita da
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
AlterEgo ↗
Raja Dunia ↗
World of Warship ↗
War Thunder ↗
RAID Shadow Legends ↗
Exclusive Villa GdR ↗
Project Entropy ↗
Hero Wars ↗
Enlisted ↗
Fallen Gods ↗