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
systemcrack
Utente
Utente
Messaggi: 399
Iscritto il: 15/05/2010, 22:50
Sesso: Maschio
Versione: 3.1.3
Server: UNIX/Linux
PHP: 5.2.17
Database: MySQL 5.1.49-community-log
Contatta:

Re: Topten Topics

Messaggio da systemcrack » 28/11/2013, 10:13

Si si, il settaggio è quello.. e "purtroppo" rimarrà tale perchè ci sono dei forum che non voglio siano letti dai non loggati e neanche che vengano rilevati tramite feed.
Effettivamente l'idea dell'escludere la mod agli ospiti è la più semplice e diretta..

Oppure non si potrebbe fare in modo che se è un ospite a visualizzare, la mod prende gli ultimi 10 topics, posts, ecc. però dalle categorie/forum che l'utente può visualizzare?

Intanto grazie Micogian, metterò un if per cominciare.. se ti dovesse capitare d'avere un pò di tempo e/o voglia di mettere mano al codice, sarò ben lieto di farti da cavia ;)

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 » 28/11/2013, 11:33

Potresti fare in if direttamente nel file mod_topten_topics.php che controlli l'utente.

Ad esempio questo determina i forum_id da associare all'utente "anonymous" che dovrebbe avere user_id=1:

Codice: Seleziona tutto

if ($user->data['user_id'] == '1' )
{
$forum_list = "1,2,3,4";
}else{
$forum_list = "1,2,3,4,5,6,7,8";
}
Poi le query cambiano, ad esempio:

Codice: Seleziona tutto

$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.forum_id IN(". $forum_list .")
    AND 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";
In pratica $forum_list è l'elenco dei forum_id da elaborare e cambiano a seconda dell'utente.
Il template rimane tale e quale.
Ovviamente questa modifica va fatta in tutte 3 le query.

Avatar utente
systemcrack
Utente
Utente
Messaggi: 399
Iscritto il: 15/05/2010, 22:50
Sesso: Maschio
Versione: 3.1.3
Server: UNIX/Linux
PHP: 5.2.17
Database: MySQL 5.1.49-community-log
Contatta:

Re: Topten Topics

Messaggio da systemcrack » 28/11/2013, 11:50

Micogian ha scritto:Potresti fare in if direttamente nel file mod_topten_topics.php che controlli l'utente.

Ad esempio questo determina i forum_id da associare all'utente "anonymous" che dovrebbe avere user_id=1:

Codice: Seleziona tutto

if ($user->data['user_id'] == '1' )
{
$forum_list = "1,2,3,4";
}else{
$forum_list = "1,2,3,4,5,6,7,8";
}
Quindi, ripeto per essere sicuro d'avere capito:
Copio i codici (nei punti giusti) ma devo modificare gli id dei forum, mettendo quelli che ho su io giusto o solo quelli che non voglio che vengano visti dall'utente non loggato..?
Micogian ha scritto: Poi le query cambiano, ad esempio:

Codice: Seleziona tutto

$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.forum_id IN(". $forum_list .")
    AND 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";
In pratica $forum_list è l'elenco dei forum_id da elaborare e cambiano a seconda dell'utente.
Il template rimane tale e quale.
Ovviamente questa modifica va fatta in tutte 3 le query.
Abbi pazienza, perchè me la cavicchio, ma mi ci vuole un attimo.. ;)

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 » 28/11/2013, 14:00

La prima variabile $forum_list è l'elenco (separato da una virgola) dei forum_id che possono vedere i visitatori (utente anonymous), la seconda è invece la lista dei forum_id che interessa gli iscritti, quindi più completa.
Ovviamente devi cambiare i numeri 1,2,3,4,.... e mettere quelli dei tuoi forum.
Il forum_id lo vedi nell'url che si visualizza quando passi sopra al forum.

Le query verranno elaborate a seconda che l'utente sia o non sia iscritto.

Nelle query la riga WHERE va modificata da

Codice: Seleziona tutto

WHERE  tt.topic_type = 0
a

Codice: Seleziona tutto

WHERE tt.forum_id IN(". $forum_list .")
    AND tt.topic_type = 0
Pertanto verrà elaborata la lista corrispondente a $forum_list.

Avatar utente
systemcrack
Utente
Utente
Messaggi: 399
Iscritto il: 15/05/2010, 22:50
Sesso: Maschio
Versione: 3.1.3
Server: UNIX/Linux
PHP: 5.2.17
Database: MySQL 5.1.49-community-log
Contatta:

Re: Topten Topics

Messaggio da systemcrack » 28/11/2013, 15:49

Grazie per le dritte, ma giusto per sapere.. invece che dire: "quelli che si e quelli che no", non si potrebbe dirgli: "tutti tranne".
Questo perchè è un "bello sbatti" dover elencare prima tutti i forum che gli ospiti non devono vedere e poi tutti quelli che invece gli iscritti possono vedere (sono abbastanza).. se in un futuro se ne dovessero aggiungere dovrei ricordarmi di andarli a inserire nel codice... non è molto pratico.
Spero che tu abbia compreso ciò che intendo...

P.s.
se non c'è altro modo mi ci metterò con calma.

P.P.S.
Quindi se il codice di partenza è questo:

Codice: Seleziona tutto

//---------- 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]   		= $user->format_date($row1['topic_time'], "|d M|");
			++$n1 ;          	
            }else{
			break ;
			}
        }
    }
//---------- 10 Topics più Recenti end -----------//
Diventerà così:

Codice: Seleziona tutto

//---------- 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.forum_id IN(". $forum_list .")
    AND 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'];
				}
				if ($user->data['user_id'] == '1' )
{
$forum_list = "1,2,3,4";
}else{
$forum_list = "1,2,3,4,5,6,7,8";
}
			$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]   		= $user->format_date($row1['topic_time'], "|d M|");
			++$n1 ;          	
            }else{
			break ;
			}
        }
    }
//---------- 10 Topics più Recenti end -----------//
Giusto per essere sicuro d'avere capito (ovviamente i numeri 1,2,3,.. non li ho cambiati qui nell'esempio).

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 » 28/11/2013, 17:11

L'assegnazione della variabile $forum_list devi metterla prima delle query, altrimenti non hai nessun risultato,
in pratica prima delle query ma dopo la parte di collegamento a phpbb che sono le prime righe.
Adesso non ho il codice sottomano ma puoi metterla subito dopo le variabili che assegnano il numero dei topics da elaborare e quelli da visualizzare, subito dopo la variabile $list_rec, ad esempio.

Questa è la parte che deve essere prima delle query, altrimenti che valore elabora la query se la metti dopo?:

Codice: Seleziona tutto

if ($user->data['user_id'] == '1' )
{
$forum_list = "1,2,3,4";
}else{
$forum_list = "1,2,3,4,5,6,7,8";
}

Si potrebbe anche aumentare il numero dei records da elaborare, in pratica il valore della variabile $list_rec che è il numero dei records da elaborare, tanto poi sono sempre 10 a entrare nelle liste, ma anche in questo caso non saresti sicuro che ci siano 10 topics visibili tra quelli elaborati. Se tu metti 50 e tra gli ultimi 50 topics non ci sono 10 topics "visibili" avresti sempre lo stesso problema.

Anche il "diverso da...." è più complicato perchè necessita di creare due query diverse, una per gli iscritti e una per i visitatori.
Ad esempio

Codice: Seleziona tutto

$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.forum_id <> '1'
    AND tt.forum_id <> '2'
    ...............e tutti gli altri forum_id da escludere
    AND tt.topic_type = 0
    AND tt.topic_moved_id = 0
Che ci vuole a creare una lista dei forums ?

Un'altra strada sarebbe sempre quella di fare due query diverse:

Codice: Seleziona tutto

if ($user->data['user_id'] == '1' )
{
// la query per i visitatori
$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.forum_id IN(1,2,3,4,5)
    AND 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";
}else{
//la query attuale
$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";
}
Così devi fare solo l'elenco dei forums per i visitatori.
A seguire il resto del codice (per ogni lista)

Resto comunque dell'idea che la soluzione di creare due variabili con l'elenco dei forum_id sia la più semplice.
Se poi i forum visibili e quelli riservati sono in Categorie separate si potrebbe usare il parent_id al posto del forum_id-
Il parent_id è il numero ID della Categoria. Ovviamente dipende da come è concepito il forum.

Avatar utente
systemcrack
Utente
Utente
Messaggi: 399
Iscritto il: 15/05/2010, 22:50
Sesso: Maschio
Versione: 3.1.3
Server: UNIX/Linux
PHP: 5.2.17
Database: MySQL 5.1.49-community-log
Contatta:

Re: Topten Topics

Messaggio da systemcrack » 28/11/2013, 22:26

Micogian ha scritto: Resto comunque dell'idea che la soluzione di creare due variabili con l'elenco dei forum_id sia la più semplice.
Si viste le tue opzioni e le mie conoscenze del php (cioè quasi nulle), seguirò il tuo consiglio e ti chiedo quest'ultima cosa, spero e poi non ti assillo più: siccome riesco a muovermi meglio con html e css ti pregherei di spiegarmi come modificare anche gli altri due WHERE

Ho riguardato come avevi modificato il primo, ma poi riguardando il secondo vedo che differisce.. non riuscendo a trovare analogie ed essendo un anlfabeta nel campo ..non riesco ad arrivarci.. scusami. :roll:

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 » 28/11/2013, 22:44

La prima versione è quella che sfrutta la variabile $forum_list e secondo me è la più semplice.
Bisogna che la dichiarazione "if" sia inserita prima delle query, ci metti l'elenco dei forum_id per i visitatori e quello per gli iscritti e questo vale per tutte le query.
Le query vanno modificate nella riga WHERE dove metterai la lista dei forum:

Codice: Seleziona tutto

WHERE tt.forum_id IN(1,2,3,4,5)
quello che c'era prima nella riga WHERE e cioè

Codice: Seleziona tutto

WHERE tt.topic_type = 0

lo sposti alla riga successiva utilizzando l'opzione AND

Codice: Seleziona tutto

AND tt.topic_type = 0
In sostanza diventa

Codice: Seleziona tutto

WHERE tt.forum_id IN(1,2,3,4,5)
AND tt.topic_type = 0
Non mi sembra difficile.
In pratica vuol dire: "elabora i records dove forum_id è compreso nei forum racchiusi nella lista tra parentesi
e dove topic_type è uguale a 0. (solo i topics normali)"

Il principio vale anche per le due altre query, stesso discorso per il WHERE mentre la condizione che c'era prima nella riga WHERE la metti nella riga successiva preceduta da AND.
Non occorre conoscere il php, è una semplice condizione che vuol dire: cerca i records che hanno queste caratteristiche (WHERE) e anche queste altre (AND)

Avatar utente
systemcrack
Utente
Utente
Messaggi: 399
Iscritto il: 15/05/2010, 22:50
Sesso: Maschio
Versione: 3.1.3
Server: UNIX/Linux
PHP: 5.2.17
Database: MySQL 5.1.49-community-log
Contatta:

Re: Topten Topics

Messaggio da systemcrack » 29/11/2013, 10:21

Micogian ha scritto:La prima versione è quella che sfrutta la variabile $forum_list e secondo me è la più semplice.
Bisogna che la dichiarazione "if" sia inserita prima delle query, ci metti l'elenco dei forum_id per i visitatori e quello per gli iscritti e questo vale per tutte le query.
Le query vanno modificate nella riga WHERE dove metterai la lista dei forum:

Codice: Seleziona tutto

WHERE tt.forum_id IN(1,2,3,4,5)
quello che c'era prima nella riga WHERE e cioè

Codice: Seleziona tutto

WHERE tt.topic_type = 0

lo sposti alla riga successiva utilizzando l'opzione AND

Codice: Seleziona tutto

AND tt.topic_type = 0
In sostanza diventa

Codice: Seleziona tutto

WHERE tt.forum_id IN(1,2,3,4,5)
AND tt.topic_type = 0
Non mi sembra difficile.
In pratica vuol dire: "elabora i records dove forum_id è compreso nei forum racchiusi nella lista tra parentesi
e dove topic_type è uguale a 0. (solo i topics normali)"

Il principio vale anche per le due altre query, stesso discorso per il WHERE mentre la condizione che c'era prima nella riga WHERE la metti nella riga successiva preceduta da AND.
Non occorre conoscere il php, è una semplice condizione che vuol dire: cerca i records che hanno queste caratteristiche (WHERE) e anche queste altre (AND)
Ciao Micogian, buon giorno, probabilmente non mi sono spiegato bene:
Il procedimento alla prima parte l'avevo già compreso 2 o 3 posts fa... quello che ti chiedevo ieri era la modifica delle altre due query o passaggi, cioè se il primo è così (abbrevio):

Codice: Seleziona tutto

//---------- 10 Topics più Recenti start -----------//
....
WHERE tt.topic_type = 0
.....
//---------- 10 Topics più Recenti end -----------//
che diventa così

Codice: Seleziona tutto

//---------- 10 Topics più Recenti start -----------//
....
WHERE tt.forum_id IN(". $forum_list .")
    AND tt.topic_type = 0
.....
//---------- 10 Topics più Recenti end -----------//
Il secondo nella voce where è differente:

Codice: Seleziona tutto

//---------- 10 Topics più Visti start -----------//
...
 WHERE tt.forum_id = ft.forum_id
...
//---------- 10 Topics più visti end -----------//
al terzo ci arrivavo anche io perchè invece è similare:

Codice: Seleziona tutto

//---------- 10 Ultimi posts start -----------//
....
WHERE tt.topic_type = 0
....
//---------- 10 Ultimi posts end -----------//
Spero che tu ora capisca cosa intendo per "analogie nel codice" ;)

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 » 29/11/2013, 11:11

Lo avevo capito ma avevo anche spiegato: "Cambia la riga WHERE e porta quello che c'era nella riga dopo con un AND"
In pratica

Codice: Seleziona tutto

//---------- 10 Topics più Visti start -----------//
...
 WHERE tt.forum_id = ft.forum_id
...
//---------- 10 Topics più visti end -----------//
diventa

Codice: Seleziona tutto

//---------- 10 Topics più Visti start -----------//
...
 WHERE tt.forum_id IN(" . $forum_list . ")
AND tt.forum_id = ft.forum_id
...
//---------- 10 Topics più visti end -----------//
Non farti fuorviare dal codice tt.forum_id = ft.forum_id
Dato che vengono utilizzate sia la tebella Topics che la tabella forums quella riga di codice significa che il record
deve avere lo stesso forum_id (tt.forum_id è nella tabella topics, ft.forum_id è nella tabella forums)
Quando in una query si usano due o più tabelle ci deve essere qualcosa in comune tra le due e questo è appunto forum_id.

Rispondi

Torna a “Database MODs”

Chi c’è in linea

Visitano il forum: Nessuno e 40 ospiti