[RISOLTO] [GDRCD 5.5.1] Griglia Lista Presenti, sfalsata
[RISOLTO] [GDRCD 5.5.1] Griglia Lista Presenti, sfalsata postato il 21/12/2022 18:08:28 nel forum programmazione, open source e hosting e modificato da clapton il 01/02/2023 11:38:50
Salve, eccoci qui a chiedere un aiutino. Speriamo di non dare troppo disturbo, ma se qualcuno avesse una dritta da condividere ve ne saremmo molto grati!
La premessa è che del codice del progetto me ne sto occupando io, ma essendo decisamente a digiuno di nozioni sulla programmazione sto cercando di non fare troppi danni e di andare un passetto per volta, quindi ci vuole un pochino di pazienza!
Allora, si tratta, come da titolo, della lista presenti.
Sono già riuscito a ottenere quasi del tutto il risultato che speravo, ma volendo far apparire anche i simboli delle gilde d'appartenenza dei personaggi, mi sono trovato di fronte a questo ostacolo:
In pratica, ogni personaggio può possedere da 1 a 3 simboli di gilda e nel caso in cui non abbia tutte e tre le gilde la cella della tabella che riguarda le eventuali icone mancanti, sparisce, facendo slittare le altre, verso il simbolo presente.
Penso che si tratti solo di sapere bene dove posizionare i <td> della tabella, ma non sono in grado di capire come. Magari sbaglio a mettere qualche apice. Non so. Mi si sono scervellato parecchio prima di disturbarvi, ma niente.
Vi lascio il codice che serve per fare apparire i simbolini, chissà che non possa servire.
?>
<?php //carico la gilda, a icona
$guilds=gdrcd_query("SELECT
ruolo.nome_ruolo,
ruolo.gilda,
ruolo.immagine,
gilda.visibile,
gilda.nome
AS nome_gilda
FROM clgpersonaggioruolo
LEFT JOIN ruolo ON ruolo.id_ruolo = clgpersonaggioruolo.id_ruolo
LEFT JOIN gilda ON ruolo.gilda = gilda.id_gilda
WHERE clgpersonaggioruolo.personaggio = '".gdrcd_filter('in',$record['nome'])."'", 'result');
if (gdrcd_query($guilds, 'num_rows')==0){
echo '<td class="caselle_due">'.gdrcd_filter('out',$MESSAGE['interface']['sheet']['profile']['uneployed']).'</td>';
}
else{
while ($row_guilds = gdrcd_query($guilds, 'fetch')){
if($row_guilds['gilda']==-1){
?> <td class="caselle_due"><a href="javascript:parent.parent.modalWindow('attivita', '', 'attivita.php?page=servizi_lavoro');"> <?php echo '<img class="miniliste_icon" src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/guilds/'.gdrcd_filter('out',$row_guilds['immagine']).'" alt="'.gdrcd_filter('out',$row_guilds['nome_ruolo'].' '.$row_guilds['nome_gilda']).'" title="'.gdrcd_filter('out',$row_guilds['nome_ruolo'].' '.$row_guilds['nome_gilda']).'">' ?> <?
echo '</a></td>';
}
else {
if(($row_quilds['visibile']==1)||($_SESSION['permessi']>=USER)){
?> <td class="caselle_due"><a href="javascript:parent.parent.modalWindow('attivita', '', 'attivita.php?page=servizi_gilde_home&id_gilda=<?php echo gdrcd_filter('out',$row_guilds['gilda'])?>');"> <?php echo '<img class="miniliste_icon" src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/guilds/'.gdrcd_filter('out',$row_guilds['immagine']).'" alt="'.gdrcd_filter('out',$row_guilds['nome_ruolo'].' - '.$row_guilds['nome_gilda']).'" title="'.gdrcd_filter('out',$row_guilds['nome_ruolo'].' - '.$row_guilds['nome_gilda']).'">' ?><?
echo '</a></td>';
}
}//else
}//while
gdrcd_query($guilds, 'free');
} //else ?>
Ringrazio già per l'aiuto che eventualmente potrete darmi!
Pagine → 1
25/12/2022 23:00:34 e modificato da clapton il 25/12/2022 23:02:34
Hey! Intanto grazie per aver risposto. Scusa per il ritardo nel postare, ma con le feste di mezzo sono rimasto incastrato tra una fetta di panettone e la famiglia. :D
Allora, ho fatto proprio così come hai detto:
1) ho raccolto tutte le icone nella stessa cella della tabella, spostando il td
2) ho inserito un div interno alla cella per dare una misura fissa
3) ho aggiunto uno sfondo al div che simulasse graficamente il tratteggio del bordo cella, anche per quelle che avrebbero dovuto apparire vuote
4) ho dato misure fisse anche alle icone, per fare in modo che si posizzionassero al posto giusto, rispetto lo sfondo del div
So che non è una soluzione “pulita”, come sarebbe potuta saltare fuori riuscendo a trovare il modo di fare apparire le celle vuote, ma in qualche modo ci siamo arrangiati!
Grazie ancora, sei stata davvero gentilissima e buone feste <3
26/01/2023 22:32:01
La soluzione "migliore" è quella di lasciare COMUNQUE un <td></td> vuoto nella posizione della icona mancante. Anche se non c'è propriamente contenuto al suo interno (quindi il controllo dell'immagine deve essere fatto subito dopo l'apertura del tag <td>), comunque viene creata una cella vuota che manterrà l'incolonnamento della tabella ed eviterà "buchi" laddove mancano le immagini da posizione.
Kasa.
26/01/2023 22:38:23
Ti lascio qui un esempio nello specifico:
https://codepen.io/kasui92/pen/KKBePMP ↗
Kasa.
28/01/2023 10:10:46 e modificato da kasa il 04/02/2023 13:24:35
sallys ha scritto: ...
Qui dipende un poco da quante celle vorresti mostrare nella tua tabella: una per ogni gilda/lavoro, una per i lavori e una per le gilde, una sola cella per tutti questi casi?
In base a questo, cambia la costruzione di queste colonne della tabella dei presenti e la complessità delle operazioni da fare. Ma, tendenzialmente, si tratta di separare sempre la costruzione della cella, il <td> per intenderci, dal suo contenuto e quindi riempirli in momenti diversi in modo da non avere eccesso o mancanze.
Qui ho ipotizzato che ti servisse la creazione di una cella per i lavori e di una cella per le gilde e quindi ho aggiornato il tuo codice in modo che possa prevedere questa situazione.
<?php
// Inizialiizzo la variabile che conterrà il nome della gilda
$ceilContent_guilds = '';
$ceilContent_jobs = '';
// Ottengo le gilde del personaggio
$guilds = gdrcd_query("SELECT ruolo.nome_ruolo, ruolo.gilda, ruolo.immagine, gilda.visibile, gilda.nome AS nome_gilda FROM clgpersonaggioruolo LEFT JOIN ruolo ON ruolo.id_ruolo = clgpersonaggioruolo.id_ruolo LEFT JOIN gilda ON ruolo.gilda = gilda.id_gilda WHERE clgpersonaggioruolo.personaggio = '".gdrcd_filter('in', $record['nome'])."'", 'result');
// Se il personaggio non appartiene ad alcuna gilda, allora mostro l'immagine di disoccupato
if(gdrcd_query($guilds, 'num_rows') == 0) {
$ceilContent_jobs = '<div class="sfondo-tab"><img class="profilo_img_gilda" src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/guilds/disoccupato.png" alt="disoccupato" title="disoccupato"></div>';
}
// Altrimenti carico le gilde visibili
else {
// Scorro i risultati
while($row_guilds = gdrcd_query($guilds, 'fetch')) {
// Se si tratta di un lavoro, allora mostro l'immagine del lavoro
if($row_guilds['gilda'] == -1) {
$ceilContent_jobs .= '<div class="sfondo-tab"><img class="profilo_img_gilda" src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/guilds/'.gdrcd_filter('out', $row_guilds['immagine']).'" alt="'.gdrcd_filter('out', $row_guilds['nome_ruolo']).'" title="'.gdrcd_filter('out', $row_guilds['nome_ruolo']).'" /></div>';
}
// Altrimenti è una gilda
else {
// Se la gilda è visibile e ho i permessi di visualizzazione, allora mostro l'immagine della gilda
if(($row_guilds['visibile'] == 1) || ($_SESSION['permessi'] >= USER)) {
$ceilContent_guilds .= '<div class="sfondo-tab"><a href="main.php?page=servizi_gilde&id_gilda='.$row_guilds['gilda'].'"><img class="profilo_img_gilda" src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/guilds/'.gdrcd_filter('out', $row_guilds['immagine']).'" alt="'.gdrcd_filter('out', $row_guilds['nome_ruolo'].' - '.$row_guilds['nome_gilda']).'" title="'.gdrcd_filter('out', $row_guilds['nome_ruolo'].' - '.$row_guilds['nome_gilda']).'" /></a></div>';
}
}
}
gdrcd_query($guilds, 'free');
}
// Avvio la creazione della cella per il lavoro
echo '<td>'.$ceilContent_jobs.'</td>';
// Avvio la creazione della cella per le gilde
echo '<td>'.$ceilContent_guilds.'</td>';
?>
Ho aggiunto diversi commenti in modo da spiegarti i passaggi, ma nel caso avessi qualche dubbio non farti problemi a chiedere.
Kasa.
01/02/2023 11:37:43
Mi aggiungo ai ringraziamenti! Grandissimo aiuto, senza il quale non sarei riuscito a risolvere. Grazie davvero, Kasa!
15/02/2023 16:19:24 e modificato da londonstar il 15/02/2023 16:20:06
Anche se è stato risolto dal buon Kasa, mi chiedo se qualcuno avesse provato ad aggiungere qualche cella al codice, creando lo spazio per una terza gilda, ad esempio. Io ho provato a fare qualcosa e mille esprimenti che non sto a postare in tutte le loro versioni ma intanto, partiamo dal codice di Kasa e poi in fondo aggiungo pezzo del mio.
<?php
// Inizialiizzo la variabile che conterrà il nome della gilda
$ceilContent_guilds = '';
$ceilContent_jobs = '';
// Ottengo le gilde del personaggio
$guilds = gdrcd_query("SELECT ruolo.nome_ruolo, ruolo.gilda, ruolo.immagine, gilda.visibile, gilda.nome AS nome_gilda FROM clgpersonaggioruolo LEFT JOIN ruolo ON ruolo.id_ruolo = clgpersonaggioruolo.id_ruolo LEFT JOIN gilda ON ruolo.gilda = gilda.id_gilda WHERE clgpersonaggioruolo.personaggio = '".gdrcd_filter('in', $record['nome'])."'", 'result');
// Se il personaggio non appartiene ad alcuna gilda, allora mostro l'immagine di disoccupato
if(gdrcd_query($guilds, 'num_rows') == 0) {
$ceilContent_jobs = '<div class="sfondo-tab"><img class="profilo_img_gilda" src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/guilds/disoccupato.png" alt="disoccupato" title="disoccupato"></div>';
}
// Altrimenti carico le gilde visibili
else {
// Scorro i risultati
while($row_guilds = gdrcd_query($guilds, 'fetch')) {
// Se si tratta di un lavoro, allora mostro l'immagine del lavoro
if($row_guilds['gilda'] == -1) {
$ceilContent_jobs .= '<div class="sfondo-tab"><img class="profilo_img_gilda" src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/guilds/'.gdrcd_filter('out', $row_guilds['immagine']).'" alt="'.gdrcd_filter('out', $row_guilds['nome_ruolo']).'" title="'.gdrcd_filter('out', $row_guilds['nome_ruolo']).'" /></div>';
}
// Altrimenti è una gilda
else {
// Se la gilda è visibile e ho i permessi di visualizzazione, allora mostro l'immagine della gilda
if(($row_guilds['visibile'] == 1) || ($_SESSION['permessi'] >= USER)) {
$ceilContent_guilds .= '<div class="sfondo-tab"><a href="main.php?page=servizi_gilde&id_gilda='.$row_guilds['gilda'].'"><img class="profilo_img_gilda" src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/guilds/'.gdrcd_filter('out', $row_guilds['immagine']).'" alt="'.gdrcd_filter('out', $row_guilds['nome_ruolo'].' - '.$row_guilds['nome_gilda']).'" title="'.gdrcd_filter('out', $row_guilds['nome_ruolo'].' - '.$row_guilds['nome_gilda']).'" /></a></div>';
}
}
}
gdrcd_query($guilds, 'free');
}
// Avvio la creazione della cella per il lavoro
echo '<td>'.$ceilContent_jobs.'</td>';
// Avvio la creazione della cella per le gilde
echo '<td>'.$ceilContent_guilds.'</td>';
?>
Benissimo, questo è il codice pulitissimo ed essenzialissimo di Kasa, a questo, ho aggiunto una mia variabile e anche un nuovo blocco cella e ho provato a replicare una parte del codice con la terza variabile ma nulla di fatto: mi ricopia la gilda già esistente al secondo slot.
Riporto di seguito, il mio codice:
<?php
// Inizialiizzo la variabile che conterrà il nome della gilda
$ceilContent_guilds = '';
$ceilContent_guilds_seconda = '';
$ceilContent_jobs = '';
// Ottengo le gilde del personaggio
$guilds = gdrcd_query("SELECT ruolo.nome_ruolo, ruolo.gilda, ruolo.immagine, gilda.visibile, gilda.nome AS nome_gilda FROM clgpersonaggioruolo LEFT JOIN ruolo ON ruolo.id_ruolo = clgpersonaggioruolo.id_ruolo LEFT JOIN gilda ON ruolo.gilda = gilda.id_gilda WHERE clgpersonaggioruolo.personaggio = '".gdrcd_filter('in', $record['nome'])."'", 'result');
// Se il personaggio non appartiene ad alcuna gilda, allora mostro l'immagine di disoccupato
if(gdrcd_query($guilds, 'num_rows') == 0) {
$ceilContent_jobs = '<div class="sfondo-tab"><img class="profilo_img_gilda" src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/guilds/disoccupato.png" alt="disoccupato" title="disoccupato"></div>';
}
// Altrimenti carico le gilde visibili
else {
// Scorro i risultati
while($row_guilds = gdrcd_query($guilds, 'fetch')) {
// Se si tratta di un lavoro, allora mostro l'immagine del lavoro
if($row_guilds['gilda'] == -1) {
$ceilContent_jobs .= '<div class="sfondo-tab"><img class="profilo_img_gilda" src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/guilds/'.gdrcd_filter('out', $row_guilds['immagine']).'" alt="'.gdrcd_filter('out', $row_guilds['nome_ruolo']).'" title="'.gdrcd_filter('out', $row_guilds['nome_ruolo']).'" /></div>';
}
// Altrimenti è una gilda
else {
// Se la gilda è visibile e ho i permessi di visualizzazione, allora mostro l'immagine della gilda
if(($row_guilds['visibile'] == 1) || ($_SESSION['permessi'] >= USER)) {
$ceilContent_guilds .= '<div class="sfondo-tab"><a href="main.php?page=servizi_gilde&id_gilda='.$row_guilds['gilda'].'"><img class="profilo_img_gilda" src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/guilds/'.gdrcd_filter('out', $row_guilds['immagine']).'" alt="'.gdrcd_filter('out', $row_guilds['nome_ruolo'].' - '.$row_guilds['nome_gilda']).'" title="'.gdrcd_filter('out', $row_guilds['nome_ruolo'].' - '.$row_guilds['nome_gilda']).'" /></a></div>';
}
if(($row_guilds['visibile'] == 1) || ($_SESSION['permessi'] >= USER)) {
$ceilContent_guilds_seconda .= '<div class="sfondo-tab"><a href="main.php?page=servizi_gilde&id_gilda='.$row_guilds['gilda'].'"><img class="profilo_img_gilda" src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/guilds/'.gdrcd_filter('out', $row_guilds['immagine']).'" alt="'.gdrcd_filter('out', $row_guilds['nome_ruolo'].' - '.$row_guilds['nome_gilda']).'" title="'.gdrcd_filter('out', $row_guilds['nome_ruolo'].' - '.$row_guilds['nome_gilda']).'" /></a></div>';
}
}
}
gdrcd_query($guilds, 'free');
}
// Avvio la creazione della cella per il lavoro
echo '<td>'.$ceilContent_jobs.'</td>';
// Avvio la creazione della cella per le gilde
echo '<td>'.$ceilContent_guilds.'</td>';
echo '<td>'.$ceilContent_guilds_seconda.'</td>';
?>
Ho provato anche a ricopiare l'intera parte di codice e sostituire il "guilds" con la nuova variabile, ovvero "guilds_seconda" ma mi raddoppia le gilde ma stampa sempre la stessa per due volte. Se qualcuno avesse voglia e tempo di aiutarmi, ringrazio infinitamente e spero di essermi spiegata più o meno sul risultato che vorrei ottenere.
15/02/2023 16:37:52
Si, si, tutto già cambiato. Infatti mi fa attribuire tre nuove affiliazioni per pg. Ho già provato :) però la cella non recuperare la terza variabile, per questo sono piuttosto sicura che ci sia un errore di codice ç_ç
15/02/2023 17:06:12 e modificato da kasa il 15/02/2023 21:05:19
londonstar ha scritto: ...
Il motivo per il quale si creava l'anomalia da te indicata è dovuto dal fatto che per ogni gilda assegnata all'utente lui va a ripopolare con lo stesso contenuto NON solo la variabile $ceilContent_guilds, ma anche $celContent_guilds_second, senza salvare in una o nell'altra il precedente valore.
Dovevo trovare un modo per far sì che dapprima popola la prima variabile e solo quella e quando prosegue il ciclo foreach controlla se la prima variabile è popolata e se questa lo è va a popolare la seconda, altrimenti popola solo la prima (lasciando così uno spazio vuoto).
In ogni caso, anche il metodo sopra esposto è un poco macchinoso e rischia di essere poco riusabile dovendo richiedere per ogni nuova cella della tabella l'intervento del programmatore nell'aggiungere un ulteriore controllo.
Visto che abbiamo la variabile $PARAMETERS['settings']['guilds_limit'] che indica il numero di gilde che possono essere associate ad account, tanto vale usarlo per fare un ciclo loop su quel valore e far sì che qualora si decidesse di ridurlo o aumentarlo in automatico si aggiungono le relative celle.
Qui lo snippet:
<?php
// Inizializzo la variabile che conterrà la cella del lavoro
$ceilContent_jobs = '';
// Inizializzo la variabile che conterrà le celle delle gilde
// La variabile è un ARRAY per permettere di contenere più di una gilda
$ceilContent_guilds = [];
// Ottengo le gilde del personaggio
$guilds = gdrcd_query("SELECT ruolo.nome_ruolo, ruolo.gilda, ruolo.immagine, gilda.visibile, gilda.nome AS nome_gilda FROM clgpersonaggioruolo LEFT JOIN ruolo ON ruolo.id_ruolo = clgpersonaggioruolo.id_ruolo LEFT JOIN gilda ON ruolo.gilda = gilda.id_gilda WHERE clgpersonaggioruolo.personaggio = '".gdrcd_filter('in', $record['nome'])."'", 'result');
// Se il personaggio non appartiene ad alcuna gilda, allora mostro l'immagine di disoccupato
if(gdrcd_query($guilds, 'num_rows') == 0) {
$ceilContent_jobs = '<div class="sfondo-tab"><img class="profilo_img_gilda" src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/guilds/disoccupato.png" alt="disoccupato" title="disoccupato"></div>';
}
// Altrimenti carico le gilde visibili
else {
// Scorro i risultati
while($row_guilds = gdrcd_query($guilds, 'fetch')) {
// Se si tratta di un lavoro, allora mostro l'immagine del lavoro
if($row_guilds['gilda'] == -1) {
$ceilContent_jobs .= '<div class="sfondo-tab"><img class="profilo_img_gilda" src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/guilds/'.gdrcd_filter('out', $row_guilds['immagine']).'" alt="'.gdrcd_filter('out', $row_guilds['nome_ruolo']).'" title="'.gdrcd_filter('out', $row_guilds['nome_ruolo']).'" /></div>';
}
// Altrimenti è una gilda
else {
// Se la gilda è visibile e ho i permessi di visualizzazione, allora mostro l'immagine della gilda
if(($row_guilds['visibile'] == 1) || ($_SESSION['permessi'] >= USER)) {
$ceilContent_guilds[] = '<div class="sfondo-tab"><a href="main.php?page=servizi_gilde&id_gilda='.$row_guilds['gilda'].'"><img class="profilo_img_gilda" src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/guilds/'.gdrcd_filter('out', $row_guilds['immagine']).'" alt="'.gdrcd_filter('out', $row_guilds['nome_ruolo'].' - '.$row_guilds['nome_gilda']).'" title="'.gdrcd_filter('out', $row_guilds['nome_ruolo'].' - '.$row_guilds['nome_gilda']).'" /></a></div>';
}
}
}
gdrcd_query($guilds, 'free');
}
// Avvio la creazione della cella per il lavoro
echo '<td>'.$ceilContent_jobs.'</td>';
// Avvio la creazione delle celle per le gilde
for ($i = 0; $i <= ((int)$PARAMETERS['settings']['guilds_limit'] - 2); $i++) {
echo '<td>'.$ceilContent_guilds[$i].'</td>';
}
// Libero lo spazio
unset($ceilContent_guilds);
?>
Kasa.
15/02/2023 19:01:44
Non so come ringraziarti, Kasa. Funziona perfettamente, è una soluzione a cui non sarei mai arrivata da sola perché conosco un po' il linguaggio del ciclo array ma applicarlo è tutt'altra cosa ç_ç grazie infinite!
E grazia anche a @sallys che si rende sempre disponibile per poter aiutare :)
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Crossout ↗
Tibia ↗
The Coven ↗
Seconda Era ↗
Neverness to Everness ↗
Hero Wars ↗
Wuthering Waves ↗
Cafuné ↗