Pagina 1 di 4
					
				Codice php "Ultimi messaggi"
				Inviato: 09/08/2012, 8:27
				da giova95
				Originariamente inviato da giova95 
Ciao a tutti, ci sto impazzendo dietro!
Ho trovato questo codice in rete:
Codice: Seleziona tutto
<?php
include('config.php'); /*Collegamento al file di configurazione di phpBB*/
    $connessione = mysql_connect("$dbhost", "$dbuser", "$dbpasswd");
    if (!$connessione) {
        echo "Impossibile connettersi al DB: " . mysql_error();
        exit;
    }
    if (!mysql_select_db("$dbname")) {
        echo "Impossibile selezionare database: " . mysql_error();
        exit;
    }
    $query = "SELECT pp.post_id, pp.topic_id,pp.forum_id, post_time, topic_title, pf.forum_name, pp.poster_id, pu.username, pf.forum_id
            FROM   phpbb_posts pp, phpbb_topics pt, phpbb_forums pf, phpbb_users pu
			WHERE  pp.topic_id = pt.topic_id
			AND pu.user_id = pp.poster_id
			AND pf.forum_id = pp.forum_id
			AND pp.forum_id = pt.forum_id
			AND pp.post_id = pt.topic_last_post_id
			GROUP BY pp.topic_id
			ORDER BY post_time DESC LIMIT 0,10"; /*L'ultimo numero (il 10) va cambiato in base al numero di ultimi topic che si vuole estrarre*/         
    $risultato = mysql_query($query);
    if (!$risultato) {
        echo "Fallimento nell'esecuzione della query ($sql) dal DB: " . mysql_error();
        exit;
    }
    if (mysql_num_rows($risultato) == 0) {
        echo "Nessuna riga trovata, niente da stampare quindi si esce";
        exit;
    }
    while ($dati = mysql_fetch_assoc($risultato)) {
        echo "<li><b><a href='viewtopic.php?p=$dati[post_id]#p$dati[post_id]'>$dati[topic_title]</a></b><p style='color:#999'>
      Inviato il " . date("j/n/y", $dati[post_time]) . " alle ore: " . date("H:m", $dati[post_time]) . "<br>Da <a href='memberlist.php?mode=viewprofile&u=" . $dati[poster_id] . "'>" . $dati[username] ."</a> su <a href='viewforum.php?f=" . $dati[forum_id] . "'> " . $dati[forum_name] ."</a></p></li>";
    }
    mysql_free_result($risultato);
?>
  
Non riesco a farlo funzionare, viene fuori sempre e soltanto 1 solo topic, che per di più è già stato cancellato!
Ecco cosa appare:

Il link "benvenuto su phpbb3" è il link di un vecchio topic che oramai è stato cancellato, così come il link di "Il tuo primo forum", è una sezione del forum cancellata da tempo!
L'altro link, quello con il mio nome, è esatto...
Qualcuno può aiutarmi? magari è solo un piccolo errore nel codice, ma io non lo trovo...
[EDIT]
A quanto ho letto sembra che il codice fosse stato creato per phpbb2, non è possibile tramite qualche piccola modifica adattarlo al 3?
So che ci sono delle mod che fanno la stessa cosa.. tipo topten topics, ma a me serve solamente un box con gli ultimi messaggi, tutto il resto non mi serve...
 
			 
			
					
				Re: Codice php "Ultimi messaggi"
				Inviato: 09/08/2012, 9:05
				da giova95
				Ce l'ho fatta, l'errore era nel nome delle tabelle del database.
Nel mio forum le tabele iniziano tutte con avphpbb_*** mentre nel codice c'era phpbb_***
Ecco il codice che ora utilizzo, nel caso posa servire a qualcun'altro:
Codice: Seleziona tutto
<?php
include('config.php'); /*Collegamento al file di configurazione di phpBB*/
    $connessione = mysql_connect("$dbhost", "$dbuser", "$dbpasswd");
    if (!$connessione) {
        echo "Impossibile connettersi al DB: " . mysql_error();
        exit;
    }
    if (!mysql_select_db("$dbname")) {
        echo "Impossibile selezionare database: " . mysql_error();
        exit;
    }
    $query = "SELECT pp.post_id, pp.topic_id,pp.forum_id, post_time, topic_title, pf.forum_name, pp.poster_id, pu.username, pf.forum_id
            FROM   avphpbb_posts pp, avphpbb_topics pt, avphpbb_forums pf, avphpbb_users pu
			WHERE  pp.topic_id = pt.topic_id
			AND pu.user_id = pp.poster_id
			AND pf.forum_id = pp.forum_id
			AND pp.forum_id = pt.forum_id
			AND pp.post_id = pt.topic_last_post_id
			GROUP BY pp.topic_id
			ORDER BY post_time DESC LIMIT 0,10"; /*L'ultimo numero (il 10) va cambiato in base al numero di ultimi topic che si vuole estrarre*/         
    $risultato = mysql_query($query);
    if (!$risultato) {
        echo "Fallimento nell'esecuzione della query ($sql) dal DB: " . mysql_error();
        exit;
    }
    if (mysql_num_rows($risultato) == 0) {
        echo "Nessuna riga trovata, niente da stampare quindi si esce";
        exit;
    }
    while ($dati = mysql_fetch_assoc($risultato)) {
        echo "<li><b><a href='viewtopic.php?p=$dati[post_id]#p$dati[post_id]'>$dati[topic_title]</a></b><p style='color:#999'>
      Inviato il " . date("j/n/y", $dati[post_time]) . " alle ore: " . date("H:m", $dati[post_time]) . "<br>Da <a href='memberlist.php?mode=viewprofile&u=" . $dati[poster_id] . "'>" . $dati[username] ."</a> su <a href='viewforum.php?f=" . $dati[forum_id] . "'> " . $dati[forum_name] ."</a></p></li>";
    }
    mysql_free_result($risultato);
?>
Ovviamente è necessario cambiare i link del file config.php e anche i link dei file viewforum.php, memberlist.php, viewtopic.php in base alla cartella nella quale risiede il file php nel quale inserite il codice
Saluti 

 
			 
			
					
				Re: Codice php "Ultimi messaggi"
				Inviato: 09/08/2012, 9:41
				da Micogian
				Funziona ma è un approccio sbagliato in PHPBB.
Il PHPBB prevede un file php che ha il compito di connettersi al database, creare le variabili necessarie e passare questi dati al template che è un file HTML.
L'esempio di questo funzionamento è ben spiegato nella Guida 
Creare una pagina personalizzata
Altri esempi di come creare le query sono nella Guida 
Interrogare il database in una Custom Page 
			 
			
					
				Re: Codice php "Ultimi messaggi"
				Inviato: 09/08/2012, 18:59
				da giova95
				Si scusate, è stata una mia svista, il codice postato è un codice "primitivo".. ovviamente l'ho modificato con le variabili e tutto il resto.
Il codice finale è il seguente (inserito in index.php):
Codice: Seleziona tutto
include('config.php'); /*Collegamento al file di configurazione di phpBB*/
    $connessione = mysql_connect("$dbhost", "$dbuser", "$dbpasswd");
    if (!$connessione) {
        $lastmex = "Impossibile connettersi al DB: " . mysql_error();
        exit;
    }
    if (!mysql_select_db("$dbname")) {
        $lastmex = "Impossibile selezionare database: " . mysql_error();
        exit;
    }
    $query = "SELECT pp.post_id, pp.topic_id,pp.forum_id, post_time, topic_title, pf.forum_name, pp.poster_id, pu.username, pf.forum_id
            FROM   avphpbb_posts pp, avphpbb_topics pt, avphpbb_forums pf, avphpbb_users pu
			WHERE  pp.topic_id = pt.topic_id
			AND pu.user_id = pp.poster_id
			AND pf.forum_id = pp.forum_id
			AND pp.forum_id = pt.forum_id
			AND pp.post_id = pt.topic_last_post_id
			GROUP BY pp.topic_id
			ORDER BY post_time DESC LIMIT 0,10"; /*L'ultimo numero (il 10) va cambiato in base al numero di ultimi topic che si vuole estrarre*/         
    $risultato = mysql_query($query);
    if (!$risultato) {
        $lastmex = "Fallimento nell'esecuzione della query ($sql) dal DB: " . mysql_error();
        exit;
    }
    if (mysql_num_rows($risultato) == 0) {
        $lastmex = "Nessuna riga trovata, niente da stampare quindi si esce";
        exit;
    }
    while ($dati = mysql_fetch_assoc($risultato)) {
        $lastmex = $lastmex ."<li><b><a href='viewtopic.php?p=$dati[post_id]#p$dati[post_id]'>$dati[topic_title]</a></b><p style='color:#999'>
      Inviato il " . date("j/n/y", $dati[post_time]) . " alle ore: " . date("H:m", $dati[post_time]) . "<br>Da <a href='memberlist.php?mode=viewprofile&u=" . $dati[poster_id] . "'>" . $dati[username] ."</a> su <a href='viewforum.php?f=" . $dati[forum_id] . "'> " . $dati[forum_name] ."</a></p></li>";
    }
Inoltre bisogna anche aggiungere la seguente stringa di codice:
 all'interno di 
E poi infine bisogna richiamare dal file index_body.html
 (se volete inserire la lista degli ultimi messaggi direttamente in home) la variabile LASTMEX inserendo nel punto in cui volete posizionare la lista questo codice:
Ah, una domanda, sarebbe comodo differenziare i nuovi post dai post con risposte inserendo "Re:" prima del titolo del post. 
Faccio un esempio:
Se un post è intitolato "esempio", quando viene creato, viene visualizzato nella lista come "esempio".
Nel momento in cui, dopo alcuni giorni, qualcuno risponde al post, questo torna in cima alla lista ma c'è comunque scritto "esempio", mentre sarebbe comodo che leggere "Re: esempio", per evidenziare il fatto che è una risposta.
 
			 
			
					
				Re: Codice php "Ultimi messaggi"
				Inviato: 09/08/2012, 20:44
				da Micogian
				Ho l'impressione che tu non abbia guardato le Guide indicate.
Il file index.php ha già la connessione al DB, a che serve un'altra connessione ?
La query corretta sarebbe:
Codice: Seleziona tutto
$query = "SELECT pp.post_id, pp.topic_id,pp.forum_id, pp.post_time, pp.topic_title, pf.forum_name, pp.poster_id, pu.username, pf.forum_id
            FROM   " . POSTS_TABLE . " pp, " . TOPICS_TABLE . " pt, " . FORUMS_TABLE . " pf, " . USERS_TABLE . " pu
         WHERE  pp.topic_id = pt.topic_id
         AND pu.user_id = pp.poster_id
         AND pf.forum_id = pp.forum_id
         AND pp.forum_id = pt.forum_id
         AND pp.post_id = pt.topic_last_post_id
         GROUP BY pp.topic_id
         ORDER BY pp.post_time DESC LIMIT 0,10"; 
Anche l'assegnazione delle variabli non è corretta, bisogna creare un array.
Codice: Seleziona tutto
 $template->assign_block_vars('nome_array',array(
	'LASTMEX'			=> "<a href='viewtopic.php?p=$dati[post_id]#p$dati[post_id]'>$dati[topic_title]</a>",
	......
	));
e nel template usare il ciclo 
Codice: Seleziona tutto
<!-- BEGIN nome_array -->
le variabili sono {nome_array.LASTMEX} ecc.
<!-- END nome_array -->
Tutto questo c'è nelle Guide indicate.
 
			 
			
					
				Re: Codice php "Ultimi messaggi"
				Inviato: 09/08/2012, 21:02
				da giova95
				Ok, grazie, ora ho cancellato la parte relativa alla connessione del database.
Per quanto riguarda l'assegnazione delle variabili... "non è corretta" in che senso? nel senso che potrebbero esserci problemi in futuro oppure semplicemente non è il modo migliore per farlo?
Te lo chiedo perchè così come ho fatto funziona egregiamente e non vorrei andare a modificare per poi trovarmi con cose più complesse, più che altro perchè non ho ancora studiato il php e qualsiasi modifica mi viene difficile...
			 
			
					
				Re: Codice php "Ultimi messaggi"
				Inviato: 09/08/2012, 22:45
				da Micogian
				La differenza è che con il tuo codice crei una sola variabile che contiene i dati di tutti i 10 topics, in phpbb di solito si crea un array che contiene 10 variabili separate che vengono visualizzate tramite un ciclo BEGIN.
Inoltre con il tuo sistema inserisci nella variabile anche i tag come <li><b><p>.
Io preferisco avere le variabili pulite e gestire i tag con il CSS nel template, ma se preferisci usare il tuo sistema che comunque il risultato lo dà lo stesso per me non è un problema.
Io avrei fatto diversamente.
Il codice stesso non va inserito nel file index.php ma avrei creato un file esterno e in index.php avrei messo il file esterno con un "include".
Stessa cosa per il template.
Guarda la mia Mod Topten Topics e vedrai com'è fatta.
			 
			
					
				Re: Codice php "Ultimi messaggi"
				Inviato: 10/08/2012, 8:36
				da giova95
				Perfetto grazie 

So cos'è un array... ma il problema è gestirlo in php perchè non lo conosco... ho intenzione di incominciare a studiarlo entro qualche settimana perchè mi serve, quindi seguirò i tuoi consigli modificando in futuro il codice, ma per ora devo dare un'aspetto accettabile al sito in fretta. È stato appena aperto e ci stiamo trasferendo da un altro sito... e vorrei che il trasferimento si concludesse in fretta, quindi capisci bene che l'importante ora è dare una parvenza grafica e di piccole "utility" come la lista degli ultimi messaggi, poi modificherò tutto in seguito con calma.
Per il fatto dei tag lo so... avevo intenzione di modificarli perchè così sono molto "restrittivi", preferire gestirli tramite css anche io.
Guarderò sicuramente la tua mod che avevo già, proprio per questo proposito, scaricato ma poi me ne sono scordato ^^'
Grazie ancora per i consigli  

 
			 
			
					
				Re: Codice php "Ultimi messaggi"
				Inviato: 10/08/2012, 14:02
				da Andrea RBR-W
				Micogian ha scritto:Ho l'impressione che tu non abbia guardato le Guide indicate.
Il file index.php ha già la connessione al DB, a che serve un'altra connessione ?
La query corretta sarebbe:
Codice: Seleziona tutto
$query = "SELECT pp.post_id, pp.topic_id,pp.forum_id, pp.post_time, pp.topic_title, pf.forum_name, pp.poster_id, pu.username, pf.forum_id
            FROM   " . POSTS_TABLE . " pp, " . TOPICS_TABLE . " pt, " . FORUMS_TABLE . " pf, " . USERS_TABLE . " pu
         WHERE  pp.topic_id = pt.topic_id
         AND pu.user_id = pp.poster_id
         AND pf.forum_id = pp.forum_id
         AND pp.forum_id = pt.forum_id
         AND pp.post_id = pt.topic_last_post_id
         GROUP BY pp.topic_id
         ORDER BY pp.post_time DESC LIMIT 0,10"; 
Anche l'assegnazione delle variabli non è corretta, bisogna creare un array.
Codice: Seleziona tutto
 $template->assign_block_vars('nome_array',array(
	'LASTMEX'			=> "<a href='viewtopic.php?p=$dati[post_id]#p$dati[post_id]'>$dati[topic_title]</a>",
	......
	));
e nel template usare il ciclo 
Codice: Seleziona tutto
<!-- BEGIN nome_array -->
le variabili sono {nome_array.LASTMEX} ecc.
<!-- END nome_array -->
Tutto questo c'è nelle Guide indicate.
 
tutto perfetto.. ma ti faccio una piccola modifica sul secondo...  
 
Codice: Seleziona tutto
 $template->assign_block_vars('nome_array',array(
	'LINK_MEX'			=> append_sid("{$phpbb_root_path}viewtopic.$phpEx","p=".$dati[post_id]."#".p$dati[post_id]')",
	'TEXT_MEX'		=> $dati[topic_title],
	......
	));
 
e nel template...
Codice: Seleziona tutto
<!-- BEGIN nome_array -->
<a href='{nome_array.LINK_MEX}'>{nome_array.TEXT_MEX}</a>
<!-- END nome_array -->
Questo x staccare ancora programmazione da stile...  

 
			 
			
					
				Re: Codice php "Ultimi messaggi"
				Inviato: 10/08/2012, 14:22
				da Micogian
				Si, va bene, anche se nel link manca il "title".
Il mio voleva solo essere un esempio e non mi ero interessato più di tanto delle variabili, mi interessava far presente il principio.