[RISOLTO] Gdrc 5.5 funzione per richiamare oggetto in chat postato il nel forum programmazione, gdrcd, grafica e open source e modificato il 13/02/2022 11:41:26 da haruka
In function.inc.php sto cercando di creare una funzione che generi in chat una porzione di testo cliccabile - quello richiuso tra [] - che richiami il popup che carica la scheda dell'oggetto.
Allora, partendo da chatcolor - sono esperimenti, il nome della funzione verrà poi cambiato - sono riuscita a creare questa. Che funziona parzialmente.
function gdrcd_chatcolor3($str) {
$search = [
'#\[(.*?)\]#'
];
$fullString = $chat_message;
$sTest = $str;
preg_match('#\[(.*?)\]#', $sTest, $aMatches);
$artefatto = $aMatches[1];
$caricaoggetto = gdrcd_query("SELECT * FROM oggetto WHERE oggetto.nome='".$artefatto."'");
$urloggetto= "javascript:modalWindow('oggetto', 'Oggetto', 'popup.php?page=popupoggettonome&oggetto=". $caricaoggetto['nome'] ."', 800, 450);";
$replace = [
'<a href="' . $urloggetto . '"><span style="color: #c21616;">[$1]</span></a>',
];
return preg_replace($search, $replace, $str);
}
Leggendra.eu - Fantasy steampunk itinerante
https://www.leggendra.eu
03/02/2022 09:51:41 e modificato il 03/02/2022 10:59:13 da kasa
Hai ancora questa esigenza o sei riuscita a risolverla?
Nel caso, con molta pazienza, ci guardiamo.
Kasa.
GitHub: https://github.com/GDRCD/GDRCD
Discord: https://discord.com/invite/K2eWXpvu4M
GdR-O: https://www.gdr-online.com/readforum.asp?id=250579
03/02/2022 11:13:47
Ciao Kasa, ho "risolvicchiato" chiedendo aiuto su stackoverflow, anche se questo codice - che per ora sto comunque usando in land - presenta un bug noiosetto.
function gdrcd_chatcolor3($str) {
return preg_replace_callback('#\[([^][]*)\]#', function($aMatches) {
$caricaoggetto = gdrcd_query("SELECT * FROM oggetto WHERE oggetto.nome='".gdrcd_filter('get', $aMatches[1])."'");
$urloggetto= "javascript:modalWindow('oggetto', 'Oggetto', 'popup.php?page=popupitemconcheck&oggetto=". $caricaoggetto['id_oggetto'] ."', 800, 450);";
return '<a href="' . $urloggetto . '"><span style="color: #c21616;">['.$aMatches[1].']</span></a>';
}, $str);
}
$fullString = $chat_message;
$sTest = $chat_message;
/* preg_match("/\(([^\)]*)\)/", $sTest, $aMatches); */
/* il codice precedente è per le parentesi tonde. Quello a seguire per le parentesi quadre */
preg_match('#\[(.*?)\]#', $sTest, $aMatches);
$artefatto = $aMatches[1];
$caricaoggetto = gdrcd_query("SELECT * FROM oggetto JOIN clgpersonaggiooggetto ON oggetto.id_oggetto = clgpersonaggiooggetto.id_oggetto WHERE clgpersonaggiooggetto.nome='".$_SESSION['login']."' AND oggetto.nome='".$artefatto."'");
if ($caricaoggetto['posizione']>=1){
$m_type='F';
$_SESSION['tag']=$tag_n_beyond;
$chat_message= '<span class= "status">'. $stato .'</span>' .'<span class= "statotemp"> '. $statotemp .'</span> ' .$chat_message . '';
}
else {
$m_type='P';
$_SESSION['tag']=$tag_n_beyond;
$chat_message= '<span class= "status">'. $stato .'</span>' .'<span class= "statotemp"> '. $statotemp .'</span> ' .$chat_message . '';
}
$add_chat.= '<span class="chat_msg">'.gdrcd_chatme($_SESSION['login'], gdrcd_chatcolor(gdrcd_chatcolor3(gdrcd_filter('out',$row['testo'])))).'</span></div>';
Leggendra.eu - Fantasy steampunk itinerante
https://www.leggendra.eu
03/02/2022 18:38:17 e modificato il 04/02/2022 12:58:03 da haruka
kasa ha scritto:
Nel caso, con molta pazienza, ci guardiamo.
Leggendra.eu - Fantasy steampunk itinerante
https://www.leggendra.eu
03/02/2022 19:06:03 e modificato il 03/02/2022 20:13:16 da kasa
Figurati, è sempre un piacere aiutare!
Grazie a te per la pazienza e per i sorgenti condivisi.
Ottima spiegazione!
Kasa.
GitHub: https://github.com/GDRCD/GDRCD
Discord: https://discord.com/invite/K2eWXpvu4M
GdR-O: https://www.gdr-online.com/readforum.asp?id=250579
04/02/2022 10:19:44
Non so se la cosa sia voluta, se sia un Bug o meno ma ho riscontrato questo piccolo "problema"
In function alla riga:
$caricaoggetto = gdrcd_query("SELECT * FROM oggetto JOIN clgpersonaggiooggetto ON oggetto.id_oggetto = clgpersonaggiooggetto.id_oggetto WHERE clgpersonaggiooggetto.nome='Haruka' AND oggetto.nome='".gdrcd_filter('get', $aMatches[1])."'");
'".gdrcd_filter('in',$_SESSION['login'])."'
👻Discord: https://discord.gg/8KjbuS3 🧛 Home: https://shadowland.altervista.org/index.php💀
04/02/2022 10:25:14
Doh, è un refuso.
Appena arrivo al PC correggo!
Leggendra.eu - Fantasy steampunk itinerante
https://www.leggendra.eu
04/02/2022 11:05:46
Ieri nella fretta e nella "felicità" pensavo di aver risolto (e invece no!)
Allora, posto una veloce soluzione in attesa di risolvere il conflitto della funzione con chat_me
in function va:
function gdrcd_chat_loadItem(
$str,
$personaggio
) {
// Fix: evita di triggerare gdrcd_chatme
$personaggio_oggetto = $_SESSION['login'] != $personaggio ? $personaggio : NULL;
return
preg_replace_callback(
'#\[(.+?)\]#is',
function($aMatches) use($personaggio) {
$caricaoggetto = gdrcd_query("SELECT * FROM oggetto JOIN clgpersonaggiooggetto ON oggetto.id_oggetto = clgpersonaggiooggetto.id_oggetto WHERE clgpersonaggiooggetto.nome='".$personaggio."' AND oggetto.nome='".gdrcd_filter('get', $aMatches[1])."'");
if ($caricaoggetto['posizione']>0) {
$caricaoggetto = gdrcd_query("SELECT * FROM oggetto WHERE oggetto.nome='".gdrcd_filter('get', $aMatches[1])."'");
$urloggetto= 'javascript:modalWindow(\'oggetto\', \'Oggetto\', \'popup.php?page=popupitemconcheck&pg='.$personaggio.'&oggetto='. $caricaoggetto['id_oggetto'] .'\', 800, 450);';
return '<a href="' . $urloggetto . '"><span style="color: #c21616;">['.$aMatches[1].']</span></a>' ;
}
else {
return '<span style="color: #000;">['.$aMatches[1].']</span>';
}
},
$str);
}
$add_chat .= '<span class="chat_msg">'.gdrcd_chatcolor( gdrcd_chat_loadItem(gdrcd_filter('out', $row['testo']), $row['mittente'])).'</span>';
Leggendra.eu - Fantasy steampunk itinerante
https://www.leggendra.eu
04/02/2022 12:45:18
Con questa toppa sembra funzionare per il momento.
Credo manchi soltanto una cosa al codice, la possibilità di visualizzare anche il commento dell'oggetto che viene riportato dal possessore dello stesso (la descrizione personale per intenderci) :)
👻Discord: https://discord.gg/8KjbuS3 🧛 Home: https://shadowland.altervista.org/index.php💀
04/02/2022 12:56:44
Ho risolto anche la questione del conflitto con chat_me.
A questo punto, il controllo sulla proprietà viene effettuato direttamente dalla funzione, per cui non è necessario passare al popup il possessore.
Inizio a modificare la mia risposta "errata" e posto i vari pezzi :)
Grazie per la pazienza.
Leggendra.eu - Fantasy steampunk itinerante
https://www.leggendra.eu
04/02/2022 13:04:05 e modificato il 04/02/2022 13:22:26 da haruka
Dunque, mettetevi comodi xD
in functions.inc.php dopo la funzione gdrcd_chatcolor, e prima di gdrcd_chatme, va aggiunta questa funzione:
function gdrcd_chat_loadItem(
$str,
$personaggio
) {
return
preg_replace_callback(
'#\[(.+?)\]#is',
function($aMatches) use($personaggio) {
$caricaoggetto = gdrcd_query("SELECT * FROM oggetto JOIN clgpersonaggiooggetto ON oggetto.id_oggetto = clgpersonaggiooggetto.id_oggetto WHERE clgpersonaggiooggetto.nome='".$personaggio."' AND oggetto.nome='".gdrcd_filter('get', $aMatches[1])."'");
if ($caricaoggetto['posizione']>0) {
$caricaoggetto = gdrcd_query("SELECT * FROM oggetto WHERE oggetto.nome='".gdrcd_filter('get', $aMatches[1])."'");
$urloggetto= 'javascript:modalWindow(\'oggetto\', \'Oggetto\', \'popup.php?page=popupitem&oggetto='. $caricaoggetto['id_oggetto'] .'\', 800, 450);';
return '<a href="' . $urloggetto . '"><span style="color: #c21616;">['.$aMatches[1].']</span></a>' ;
}
else {
return '<span style="color: #000;">['.$aMatches[1].']</span>';
}
},
$str);
}
$add_chat .= '<span class="chat_msg">'.gdrcd_chatme($_SESSION['login'], gdrcd_chatcolor(gdrcd_filter('out', $row['testo']))).'</span>';
$add_chat .= '<span class="chat_msg">'.gdrcd_chatme($_SESSION['login'], gdrcd_chatcolor( gdrcd_chat_loadItem(gdrcd_filter('out', $row['testo']), $row['mittente']))).'</span>';
<?php
/*Caricamento oggetti*/
$id_oggetto = gdrcd_filter('num', $_GET['oggetto']);
$loaded_item = gdrcd_query("SELECT * FROM oggetto WHERE id_oggetto = ".$id_oggetto."");
?>
<table id="lista" class="sortable">
<tbody>
<tr>
<td> Nome </td>
<td> Descrizione </td>
<tr>
<!-- Oggetto, immagine, quantità -->
<td class="casella_elemento" id="info" style="vertica-align:top;">
<div class="inventario_riga_descrizione" id="riga1" style="height:1000px;">
<div class="inventario_nome"><?php echo gdrcd_filter('out', $loaded_item['nome']);
?>
</div>
<div class="inventario_img">
<img src="themes/<?php echo $PARAMETERS['themes']['current_theme'] ?>/imgs/items/<?php echo gdrcd_filter('out', $loaded_item['urlimg']); ?>" />
</div>
</div>
</td>
<td class="casella_elemento" id="info" style="min-height: 1200px;;">
<div class="inventario_riga_descrizione" style="width:98% !important" id="riga2" >
<?php echo gdrcd_filter('out', $loaded_item['descrizione']); ?>
<br>
</div>
</td>
</tr>
</table>
Leggendra.eu - Fantasy steampunk itinerante
https://www.leggendra.eu
Discussione seguita da:
Non puoi scrivere in questo Forum
Aggiungi Discussione ai Preferiti
Inoltra Discussione
Forum Programmazione, GDRCD, Grafica e Open Source
Torna alla lista Forum
✋😟
Abbiamo rilevato che stai usando un software per bloccare la pubblicità!
L'utilizzo di GDR-online.com è gratuito da oltre 17 anni ma è necessario coprire i costi per mantenerlo online... ti chiediamo di aiutarci disabilitando il blocco dei banner pubblicitari.
Togliere il blocco significa fare in modo che GDR-online.com possa continuare a far conoscere piccoli giochi amatoriali gratuitamente e offrire un servizio sempre migliore e adatto alle esigenze dei suoi giocatori!
Se questo avviso continua ad apparire nonostante tu abbia autorizzato il portale:
- Verifica nelle opzioni che venga disattivato AdBlock in tutto il dominio gdr-online.com e non solo in una pagina
- Controlla di non avere fra le estensioni installate altre analoghe ad AdBlock, come AdBlock Plusbr, ublock origin, ecc.
- Probabilmente sul tuo PC è installato un Antivirus che ha anche funzioni di blocco pubblicità
- Se usi Firefox impostare il "Blocco Contenuti" su "Normale" e non su "Restrittivo". Per farlo clicca sull'icona dello scudo vicino all'URL e clicca su "Disattiva Blocco per questo sito"
- Prova a premere CTRL + F5, riloggarti e vedi se il problema persiste