phpBB Italia chiude!
phpBB Italia ringrazia tutti gli utenti che hanno dato fiducia al nostro progetto per ben 9 anni, e che, grazie al grande lavoro fatto da tutto lo Staff (rigorosamente a titolo gratuito), hanno portato il portale a diventare il principale punto di riferimento italiano alla piattaforma phpBB.

Purtroppo, causa motivi personali, non ho più modo di gestirlo e portarlo avanti. Il forum viene ora posto in uno stato di sola lettura, nonché un archivio storico per permettere a chiunque di fruire di tutte le discussioni trattate.

Il nuovo portale di assistenza per l'Italia di phpBB diventa phpBB-Store.it, cui ringrazio per aver deciso di portare avanti questo grande progetto.

Grazie ancora,
Carlo - Amministratore di phpBB Italia

Codice php "Ultimi messaggi"

Supporto per phpBB 3.0.x.
Avatar utente
giova95
Utente
Utente
Messaggi: 81
Iscritto il: 28/07/2012, 14:38
Sesso: Maschio
Versione: 3.0.11
Server: UNIX/Linux
PHP: 5.3.3
Database: MySQL(i) 5.0.95-log
Località: Biella
Contatta:

Codice php "Ultimi messaggi"

Messaggio da giova95 » 09/08/2012, 8:27

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:
Immagine
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...

Avatar utente
giova95
Utente
Utente
Messaggi: 81
Iscritto il: 28/07/2012, 14:38
Sesso: Maschio
Versione: 3.0.11
Server: UNIX/Linux
PHP: 5.3.3
Database: MySQL(i) 5.0.95-log
Località: Biella
Contatta:

Re: Codice php "Ultimi messaggi"

Messaggio da giova95 » 09/08/2012, 9:05

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 :-)

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: Codice php "Ultimi messaggi"

Messaggio da Micogian » 09/08/2012, 9:41

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

Avatar utente
giova95
Utente
Utente
Messaggi: 81
Iscritto il: 28/07/2012, 14:38
Sesso: Maschio
Versione: 3.0.11
Server: UNIX/Linux
PHP: 5.3.3
Database: MySQL(i) 5.0.95-log
Località: Biella
Contatta:

Re: Codice php "Ultimi messaggi"

Messaggio da giova95 » 09/08/2012, 18:59

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:

Codice: Seleziona tutto

'LASTMEX' => $lastmex,
all'interno di

Codice: Seleziona tutto

$template->assign_vars(array(
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:

Codice: Seleziona tutto

<ul>{LASTMEX}</ul>

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.

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: Codice php "Ultimi messaggi"

Messaggio da Micogian » 09/08/2012, 20:44

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.

Avatar utente
giova95
Utente
Utente
Messaggi: 81
Iscritto il: 28/07/2012, 14:38
Sesso: Maschio
Versione: 3.0.11
Server: UNIX/Linux
PHP: 5.3.3
Database: MySQL(i) 5.0.95-log
Località: Biella
Contatta:

Re: Codice php "Ultimi messaggi"

Messaggio da giova95 » 09/08/2012, 21:02

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...

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: Codice php "Ultimi messaggi"

Messaggio da Micogian » 09/08/2012, 22:45

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.

Avatar utente
giova95
Utente
Utente
Messaggi: 81
Iscritto il: 28/07/2012, 14:38
Sesso: Maschio
Versione: 3.0.11
Server: UNIX/Linux
PHP: 5.3.3
Database: MySQL(i) 5.0.95-log
Località: Biella
Contatta:

Re: Codice php "Ultimi messaggi"

Messaggio da giova95 » 10/08/2012, 8:36

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 :D

Andrea RBR-W
Utente
Utente
Messaggi: 80
Iscritto il: 03/06/2012, 18:37
Sesso: Maschio
Versione: 3.0.10
Server: UNIX/Linux

Re: Codice php "Ultimi messaggi"

Messaggio da Andrea RBR-W » 10/08/2012, 14:02

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... ;)

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: Codice php "Ultimi messaggi"

Messaggio da Micogian » 10/08/2012, 14:22

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.

Rispondi

Torna a “[3.0.x] Forum di Supporto”

Chi c’è in linea

Visitano il forum: Nessuno e 25 ospiti