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

Topten Topics

Forum contenente i topic di tutte le MODs rilasciate nel nostro forum.
Possono essere scaricate anche tramite phpBBItalia.net Downloader.
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: Topten Topics

Messaggio da Micogian » 20/05/2011, 15:15

MarcoG ha scritto:quando al secondo problema, non conosco bene come funzioni, ma prima adoperavo questa mod...
http://www.phpbb.com/community/viewtopi ... 0&t=573680
forse puoi ricavare la query che viene adoperata...
Bisogna distinguere tra "gli ultimi topics" e "gli ultimi posts".
Sembrano due cose uguali ma non è così. Negli "ultimi topics" si controlla la tabella "topics" e la cosa non ha particolari problemi se non quello dei Topics non accessibili.
Per gli "ultimi posts" invece il problema è più complesso, il risultato è diverso perchè tra gli ulyimo posts potrebbe esserci un topic vecchio ma che ha uan risposta recente.
In questo caso i records vanno estratti dalal tabella posts ma dato che un Topic potrebbe contenere numerose risposte il numero da estrarre è più elevato.
Poi ci vuole un controllo che tenga per buono solo l'ultimo post di ciascun Topic, inoltre serve il nome dell'user che nella tabella posts non c'è.
Probabilmente questi controlli sono quelli che allungano i tempi della query.
Io l'avevo risolto con una unica query con un join su 4 tabelle diverse, probabilmente è meglio dividere la ricerca in due fasi, prima estrarre i 10 records da visualizzare e poi i dati mancanti (username e forum_name) di ciascun record.

MarcoG
Utente
Utente
Messaggi: 90
Iscritto il: 13/01/2011, 22:56
Sesso: Maschio
Versione: 3.0.9
Server: UNIX/Linux
PHP: 5.3.8
Database: MySQL(i) 5.1.58

Re: Topten Topics

Messaggio da MarcoG » 20/05/2011, 16:39

si questo lo avevo capito..

ma la mod che ti ho linkato fa una cosa un po' particolare...

praticamente ti fa vedere solo gli ultimi 5 argomenti "in cui hanno scritto"... cioè non mostra gli ultimi topic, ma gli ultimi topic in cui c'è stato un post..

per farti capire ho momentaneamente riabilitato quella mod (che appare prima della lista forum).. dagli uno sguardo..
http://www.omnicomprensivo.it/forum

ho pensato che potessi trovarla utile perché in qualche modo questa mod rintraccia il topic dove è stato inserito un post, quindi indirettamente rintraccia il post, salvo che, naturalmente, non ci sia un semplice contatore "data" per i topic da qualche parte... anche se, dell'ultimo post, rintraccia anche autore e data (ma non genera il link)...

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: Topten Topics

Messaggio da Micogian » 20/05/2011, 17:37

Un'occhiata ce la posso dare ma una soluzione ce l'ho in testa e presumo sia la stessa usata da questa Mod: utilizzare il campo "topic_last_post_time" nella tabella topics.
A questo punto si ottiene una lista dei topics aggiornati di recente, basta solo recuperare i dati mancanti che mi sembra essere solo forum_name, visto che il nome dell'utente è ricavato da topic_last_poster_name.
L'unica problema che sul momento mi viene in testa è che non abbiamo il post_id e quindi il link porterebbe al topic e non all'ultimo post.

EDIT: l'ultimo post_id c'è, è il campo topic_last_post_id

MarcoG
Utente
Utente
Messaggi: 90
Iscritto il: 13/01/2011, 22:56
Sesso: Maschio
Versione: 3.0.9
Server: UNIX/Linux
PHP: 5.3.8
Database: MySQL(i) 5.1.58

Re: Topten Topics

Messaggio da MarcoG » 20/05/2011, 17:45

direi perfetto allora... se vuoi sono disponibile per qualsiasi prova ;)

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: Topten Topics

Messaggio da Micogian » 20/05/2011, 20:33

Ho modificato la query "ultimi posts".
Sostituire il file mod_topten_topics.php con questo:

Codice: Seleziona tutto

<?php
// MOD Topten Topics : Topics più recenti, Topics più visti e Posts più recenti 
// created by Micogian
if (!defined('IN_PHPBB'))
{
   exit;
}
// configurazione: numero dei recods da visualizzare nella Lista
$list_rec = 20 ;   // numero di records da estrarre dalla tabella (alcuni topics potrebbero non aver il permesso di lettura)
$list_view = 10 ;  // sostituire il numero della variabile $lista se si desidera diminuire/aumentare il numero dei Topics 
//$list_post = 70 ;  // numero di posts da estrarre dalla tabella (il numero è più alto perchè viene inserito un solo post per topic)

function mod_data($data_cor)
{
$data_cor = str_replace("Jan","gen", $data_cor);
$data_cor = str_replace("Feb","feb", $data_cor);
$data_cor = str_replace("Mar","mar", $data_cor);
$data_cor = str_replace("Apr","apr", $data_cor);
$data_cor = str_replace("May","mag", $data_cor);
$data_cor = str_replace("Jun","giu", $data_cor);
$data_cor = str_replace("Jul","lug", $data_cor);
$data_cor = str_replace("Aug","ago", $data_cor);
$data_cor = str_replace("Sep","set", $data_cor);
$data_cor = str_replace("Oct","ott", $data_cor);
$data_cor = str_replace("Nov","nov", $data_cor);
$data_cor = str_replace('Dec','dic', $data_cor);
return $data_cor ;
}
//---------- 10 Topics più Recenti start -----------//
$sql1 = "SELECT tt.topic_id, tt.forum_id, tt.topic_title, tt.topic_time, tt.topic_moved_id, tt.topic_first_poster_name,
    ft.forum_id, ft.forum_name
    FROM " . TOPICS_TABLE . " tt, " . FORUMS_TABLE . " ft 
    WHERE tt.topic_type = 0
    AND tt.topic_moved_id = 0
    AND tt.forum_id = ft.forum_id
    ORDER BY tt.topic_time DESC LIMIT 0,$list_rec";
$result1 = $db->sql_query($sql1);
    $n1 = 0;
    while ($row1 = $db->sql_fetchrow($result1))
    {
       	if ($auth->acl_get('f_read', $row1['forum_id']) == 1) 
        {
            if ($n1 < $list_view)
			{
				if (strlen($row1['topic_title']) > 28)
				{
				$topic_title1 = substr($row1['topic_title'],0,27) . "...";
				}else{
				$topic_title1 = $row1['topic_title'];
				}
			$last_topic_link[$n1]   		= append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=" . $row1['forum_id'] . "&t=" . $row1['topic_id']);
            $last_topic_title[$n1]  		= $row1['topic_title'];
			$last_topic_title_short[$n1]  	= $topic_title1;
			$last_topic_forum[$n1]  		= $row1['forum_name'];
            $last_topic_author[$n1] 		= $row1['topic_first_poster_name'];
            $last_topic_data[$n1]   		= date("d M",$row1['topic_time']);
			$last_topic_data[$n1]   		= mod_data($last_topic_data[$n1]);
          	++$n1 ;          	
            }else{
			break ;
			}
        }
    }
//---------- 10 Topics più Recenti end -----------//


//---------- 10 Topics più Visti start -----------//

$sql2 = "SELECT tt.topic_id, tt.forum_id, tt.topic_title, tt.topic_first_poster_name, tt.topic_views,
    ft.forum_id, ft.forum_name 
    FROM " . TOPICS_TABLE . " tt, " . FORUMS_TABLE . " ft
    WHERE tt.forum_id = ft.forum_id
    ORDER BY tt.topic_views DESC LIMIT 0,$list_rec";
$result2 = $db->sql_query($sql2);
    $n2 = 0 ;
    while ($row2 = $db->sql_fetchrow($result2))
    {
		if ($auth->acl_get('f_read', $row2['forum_id']) == 1)
		{
			if ($n2 < $list_view)
			{
				if (strlen($row2['topic_title']) > 28)
				{
				$topic_title2 = substr($row2['topic_title'],0,27) . "...";
				}else{
				$topic_title2 = $row2['topic_title'];
				}
			$view_topic_link[$n2]   		= append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=" . $row2['forum_id'] . "&t=" . $row2['topic_id']);
			$view_topic_title[$n2]			= $row2['topic_title'];
			$view_topic_title_short[$n2]  	= $topic_title2;	
			$view_topic_forum[$n2]  		= $row2['forum_name'];		
			$view_topic_author[$n2] 		= $row2['topic_first_poster_name'];
			$view_topic_views[$n2]  		= $row2['topic_views'];
			++$n2 ;
			}else{
			break ;
			}
		}
	}
//---------- 10 Topics più visti end -----------//

//---------- 10 Ultimi posts start -----------//
$sql4 = "SELECT tt.topic_id, tt.forum_id, tt.topic_moved_id, tt.topic_last_post_id, tt.topic_last_poster_id, tt.topic_last_poster_name, tt.topic_last_post_subject, tt.topic_last_post_time,
    ft.forum_id, ft.forum_name
    FROM " . TOPICS_TABLE . " tt, " . FORUMS_TABLE . " ft 
    WHERE tt.topic_type = 0
    AND tt.topic_moved_id = 0
    AND tt.forum_id = ft.forum_id
    ORDER BY tt.topic_last_post_time DESC LIMIT 0,$list_rec";
$result4 = $db->sql_query($sql4);
    $n4 = 0;
    while ($row4 = $db->sql_fetchrow($result4))
    {
       	if ($auth->acl_get('f_read', $row4['forum_id']) == 1) 
        {
            if ($n4 < $list_view)
			{
				$post_subject = str_replace("Re: ", "", $row4['topic_last_post_subject']) ;
				if (strlen($post_subject) > 28)
				{
				$post_title = substr($post_subject,0,25) . "...";
				}else{
				$post_title = $post_subject ;
				}
			$last_post_link[$n4]		= append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=" . $row4['forum_id'] . "&t=" . $row4['topic_id'] . "#p" . $row4['topic_last_post_id']);
			$last_post_title[$n4] 		= $row4['topic_last_post_subject'];
			$last_post_title_short[$n4] = $post_title;
			$last_post_forum[$n4]  		= $row4['forum_name'];
			$last_post_author[$n4] 		= $row4['topic_last_poster_name'];
			++$n4 ;          	
			}else{
			break ;
			}
        }
    }
//---------- 10 Ultimi posts end -----------//

// Crea l'array "topten_list" che contiene le Variabili per il Template
for ($x = 0; $x < $list_view; ++$x)
{
 $template->assign_block_vars('topten_list',array(
	'LAST_TOPIC_LINK'			=> $last_topic_link[$x],
	'LAST_TOPIC_TITLE'			=> $last_topic_title[$x],
	'LAST_TOPIC_TITLE_SHORT'	=> $last_topic_title_short[$x],
	'LAST_TOPIC_FORUM'			=> $last_topic_forum[$x],
	'LAST_TOPIC_AUTHOR'			=> $last_topic_author[$x],
	'LAST_TOPIC_DATA'			=> $last_topic_data[$x],

	'VIEW_TOPIC_LINK'			=> $view_topic_link[$x],
	'VIEW_TOPIC_TITLE'			=> $view_topic_title[$x],
	'VIEW_TOPIC_TITLE_SHORT'	=> $view_topic_title_short[$x],
	'VIEW_TOPIC_FORUM'			=> $view_topic_forum[$x],
	'VIEW_TOPIC_AUTHOR'			=> $view_topic_author[$x],
	'VIEW_TOPIC_VIEWS'			=> $view_topic_views[$x],

	'LAST_POST_LINK'			=> $last_post_link[$x],
	'LAST_POST_TITLE'			=> $last_post_title[$x],
	'LAST_POST_TITLE_SHORT'		=> $last_post_title_short[$x],
	'LAST_POST_FORUM'			=> $last_post_forum[$x],
	'LAST_POST_AUTHOR'			=> $last_post_author[$x],
	));
}
?>
E' modificata solo la parte riguardante "gli ultimi posts".
La ricerca avviene nella tabella topics e a questo punto non serve più la variabile $list_post che stabiliva il numero dei posts da elaborare ma basta quella relativa alle altre query, cioè $list_rec.
Penso che 20 records siano sufficienti per estrarre 10 Posts.

Il Template non cambia, visto che le variabili non cambiano nome.

MarcoG
Utente
Utente
Messaggi: 90
Iscritto il: 13/01/2011, 22:56
Sesso: Maschio
Versione: 3.0.9
Server: UNIX/Linux
PHP: 5.3.8
Database: MySQL(i) 5.1.58

Re: Topten Topics

Messaggio da MarcoG » 21/05/2011, 1:19

ho fatto la mod e funziona tutto (non genera più i link ai post, ma solo ai topic)... però a me andava bene anche prima, quindi deve provare qualcuno di quelli che avevano rallentamenti..

per il resto di segnalo una cosa: il mese di maggio continua ad apparire in inglese (May).. non so se sia voluto o sia un problema, io non faccio visualizzare proprio quelle info..

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: Topten Topics

Messaggio da Micogian » 21/05/2011, 6:14

Il link per aprire l'ultimo post dovrebbe essere questo:

Codice: Seleziona tutto

$last_post_link[$n4]		= append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=" . $row4['forum_id'] . "&t=" . $row4['topic_id'] . "#p" . $row4['topic_last_post_id']);
Adesso dovrebbe essere a posto anche la function mod_data()

Le modifiche sono già state fatte nel codice postato, attendo per farlo nella Mod.

MarcoG
Utente
Utente
Messaggi: 90
Iscritto il: 13/01/2011, 22:56
Sesso: Maschio
Versione: 3.0.9
Server: UNIX/Linux
PHP: 5.3.8
Database: MySQL(i) 5.1.58

Re: Topten Topics

Messaggio da MarcoG » 21/05/2011, 10:27

fatto.. ora funziona tutto perfettamente... :ugeek:

e si, hai risolto anche il problema della data... ora la traduzione è corretta :D

ottimo lavoro davvero, grazie infinite ;)

cavani7matador
Utente
Utente
Messaggi: 33
Iscritto il: 29/04/2011, 0:03
Sesso: Maschio
Versione: 3.0.8

Re: Topten Topics

Messaggio da cavani7matador » 21/05/2011, 20:12

ragazzi ma funziona solo su proosilver io ho un altro tema!! quindi manca un file html fatemi sapere!! cioe non posso midificare il secondo file perche non esiste "subsilver"

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: Topten Topics

Messaggio da Micogian » 21/05/2011, 20:21

cavani7matador ha scritto:ragazzi ma funziona solo su proosilver io ho un altro tema!! quindi manca un file html fatemi sapere!! cioe non posso midificare il secondo file perche non esiste "subsilver"
Se si guardasse meglio l'allegato alla Mod si vedrebbe che c'è una cartella styles e in questa cartella ci sono i template sia dello stile Prosilver che quello per Subsilver2.
La seconda cosa è che ho ben specificato che le modifiche riguardano il file php e che il template resta sempre lo stesso e pertanto nessuna modifica da fare sul file html..

Rispondi

Torna a “Database MODs”

Chi c’è in linea

Visitano il forum: Nessuno e 60 ospiti