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

Top 10

Supporto MODs generale.
Avatar utente
peter6777
Utente Pro
Utente Pro
Messaggi: 93
Iscritto il: 26/02/2010, 23:06
Versione: 3.0.6
Server: UNIX/Linux

Re: Top 10

Messaggio da peter6777 » 09/03/2010, 15:18

avete guardato come è strutturato il codice php della mod Top_five? L'ho postato nel primo messaggio. Secondo me li in mezzo c'è la soluzione ma io non ci capisco una ceppa...

Avatar utente
peter6777
Utente Pro
Utente Pro
Messaggi: 93
Iscritto il: 26/02/2010, 23:06
Versione: 3.0.6
Server: UNIX/Linux

Re: Top 10

Messaggio da peter6777 » 09/03/2010, 15:29

Ho cambiato il codice in index.php:

Non è cambiato nulla Bingo, io da amministratore vedo i 10 topic più visti, se provo i permessi di un utente, ne vedo soltanto 6.

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: Top 10

Messaggio da Micogian » 09/03/2010, 15:59

peter6777 ha scritto:Ho cambiato il codice in index.php:

Non è cambiato nulla Bingo, io da amministratore vedo i 10 topic più visti, se provo i permessi di un utente, ne vedo soltanto 6.
Aspetta un pò, io non l'ho mai provata questa, vediamo dove può esserci il problema.
Secondo me nel valore di $x che aumenta solo se la condizione è corretta.
Forse è sbagliato in quella posizione.
Prova così:

Codice: Seleziona tutto

// Controlla gli ultimi 50 topics, elimina quelli senza permesso di lettura e crea un array limitato a 10 records.

$sql4 = "SELECT pt.topic_id, pt.forum_id, pt.topic_title, pt.topic_time, pt.topic_type, pt.topic_moved_id, pt.topic_last_poster_name, pp.post_id, pp.post_time
FROM " . TOPICS_TABLE . " pt ," . POSTS_TABLE . " pp
WHERE pt.topic_id = pp.topic_id
AND pt.topic_type = 0
AND pt.topic_moved_id = 0
ORDER BY pp.post_time DESC LIMIT 0,50";
    $result4 = $db->sql_query($sql4);
    $topic_cor = '' ;
$x = 0 ;
    while ($row4 = $db->sql_fetchrow($result4))
    {
       if ($auth->acl_get('f_read', $row4['forum_id']) == 1) {
       if( $row4['topic_id'] <> $topic_cor && $x < 11 ){
      $x = ++$x ; 
           $template->assign_block_vars('last_posts_list', array(
              'VIEW_LINK'    => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=" . $row4['forum_id'] . "&t=" . $row4['topic_id']),
              'VIEW_TITOLO'    => $row4['topic_title'],
              'VIEW_AUTHOR'    => $row4['topic_last_poster_name'],
              'VIEW_VIEWS'     => $row4['topic_views'],
              'LAST_DATA'      => date("d.m.Y",$row4['post_time'])
               ));
              }
       }
       $topic_cor = $row4['topic_id'] ;
    }
    $db->sql_freeresult($result4);
La condizione dice: se il Forum ha i permessi di lettura e se il topic è diverso da quello precedente e comunque il numero dei records non sia superiore a 10 crea le variabili e aumenta il valore di $x.
In teoria non fa una grinza, l'importante è che il numero $x non aumenti se non viene creata la variabile e quindi ne dovrebbe creare 10, salvo che tra i 50 posts non ci siano 44 riservati.

Ma, dovrei provarla, poi ti so dire.

Avatar utente
peter6777
Utente Pro
Utente Pro
Messaggi: 93
Iscritto il: 26/02/2010, 23:06
Versione: 3.0.6
Server: UNIX/Linux

Re: Top 10

Messaggio da peter6777 » 09/03/2010, 18:01

Questa proprio non funziona... nella tabella non viene mostrato nulla.

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: Top 10

Messaggio da Micogian » 09/03/2010, 20:06

Ho fatto qualche ritocco, come l'ordinamento per Topic_id, altrimenti ripeteva i Topics perchè i posts erano odinati per data enon per topics.
Il problema è che se il post corrente è simile al precedente non lo inseisce ma se il post non è conseguente lo rimette.

Prova questo file, chiamala prova.php o come vuoi e vedi cosa ti dà. Non serve il template che è escluso.
Il file fornisce l'elenco dei Topics che finiscono nella lista (ne ho messi 100 di topic da controllare)

Se funziona devi inserire la parte della query escludendo la riga echo.....

Codice: Seleziona tutto

<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);

// Configure style, language, etc.
$user->setup('viewforum');
// Controlla gli ultimi 100 topics, elimina quelli senza permesso di lettura e crea un array limitato a 10 records.

$sql4 = "SELECT pt.topic_id, pt.forum_id, pt.topic_title, pt.topic_time, pt.topic_type, pt.topic_moved_id, pt.topic_last_poster_name, pp.post_id, pp.post_time
FROM " . TOPICS_TABLE . " pt ," . POSTS_TABLE . " pp
WHERE pt.forum_id > 0
AND pt.topic_id = pp.topic_id
AND pt.topic_type = 0
AND pt.topic_moved_id = 0
ORDER BY pp.topic_id, pp.post_time DESC LIMIT 0,100";
    $result4 = $db->sql_query($sql4);
    $topic_cor = '' ;
$x = 0 ;
    while ($row4 = $db->sql_fetchrow($result4))
    {
	       if ($auth->acl_get('f_read', $row4['forum_id']) == 1) {
       if( $row4['topic_id'] <> $topic_cor && $x < 10 ){
		$topic_cor = $row4['topic_id'] ;
           $template->assign_block_vars('last_posts_list', array(
              'VIEW_LINK'    => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=" . $row4['forum_id'] . "&t=" . $row4['topic_id']),
              'VIEW_TITOLO'    => $row4['topic_title'],
              'VIEW_AUTHOR'    => $row4['topic_last_poster_name'],
              'VIEW_VIEWS'     => $row4['topic_views'],
              'LAST_DATA'      => date("d.m.Y",$row4['post_time'])
               ));
echo $x . " - " . $row4['topic_title'] . " - " .$row4['forum_id'] . "<br>";
		$x = ++$x ;
              }
       }
       
    }
    $db->sql_freeresult($result4);

//page_header('pagina di prova');

//$template->set_filenames(array(
//	'body' => 'mod_page_body.html')
//);

//make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
//page_footer();

?>
A me ha funzionato

Avatar utente
peter6777
Utente Pro
Utente Pro
Messaggi: 93
Iscritto il: 26/02/2010, 23:06
Versione: 3.0.6
Server: UNIX/Linux

Re: Top 10

Messaggio da peter6777 » 09/03/2010, 23:11

Ciao Bingo, ho provato anch'io questa query ma il problema non è risolto,c'è qualcosa che tocca, nel senso che come tutte le altre tiene conto dei permessi utente ma semplicemente elimina i posts che l'utente non può vedere senza aggiungerne altri....inotre questa query non mostra i posts in ordine di visite! sono a caso e la lista non rispetta la realtà delle visite (nel forum ad esempio ho un post con più di 200 visite e in questa lista non compare neanche).

Non voglio essere ripetitivo ma nella query che ho postato nel primo post (quella della Mod Top_Five) sicuramente c'è la soluzione al mio problema perchè in quella mod i messaggi sono sempre 10 a seconda dei permessi utente.....solo che io non ci capisco molto e non riesco a trovare le differenze con le tue query...


per scrupolo e scaramanzia ti riposto la query che mostra glii ultimi 5 (che io ho fatto diventare 10) posts inseriti, io la guardo e la riguardo ma non capisco proprio...

Codice: Seleziona tutto

if (!defined('INCLUDES_TOP_FIVE_PHP'))
{
	define('INCLUDES_TOP_FIVE_PHP', true);
	
	global $auth, $cache, $config, $user, $db, $phpbb_root_path, $phpEx, $template;

    $user->add_lang('mods/top_five');

	// grab auths that allow a user to read a forum
	$forum_array = array_unique(array_keys($auth->acl_getf('!f_read', true)));

	// we have auths, change the sql query below
	$sql_and = '';
	if (sizeof($forum_array))
	{
		$sql_and = ' AND ' . $db->sql_in_set('p.forum_id', $forum_array, true);
	}

	// grab all posts that meet criteria and auths
	$sql_ary = array(
		'SELECT'	=> 'MAX(p.post_time) as post_time, u.user_id, u.username, u.user_colour, t.topic_title, t.forum_id, t.topic_last_post_id',
		'FROM'		=> array(TOPICS_TABLE => 't', POSTS_TABLE => 'p'),
		'LEFT_JOIN'	=> array(
			array(
				'FROM'	=> array(USERS_TABLE => 'u'),
				'ON'	=> 'p.poster_id = u.user_id',
   			),
		),
		'WHERE'		=> 'p.topic_id = t.topic_id
			   AND p.post_approved = 1
			   AND t.topic_moved_id = 0' . $sql_and,
		'GROUP_BY'	=> 't.topic_id',
		'ORDER_BY'	=> 'post_time DESC',
	);

	$result = $db->sql_query_limit($db->sql_build_query('SELECT', $sql_ary), 5);

    while( $row = $db->sql_fetchrow($result) )
    {
   
		$view_topic_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $row['forum_id'] . '&p=' . $row['topic_last_post_id'] . '#p' . $row['topic_last_post_id']);
		$topic_title = censor_text($row['topic_title']);

       	$template->assign_block_vars('top_five_topic',array(
       		'U_TOPIC' 		=> $view_topic_url,
       		'USERNAME_FULL'	=> $user->lang['BY'] . ' ' . get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),
       		'TOPIC_TITLE' 	=> $user->lang['IN'] . ' ' . $topic_title));
    }

    $db->sql_freeresult($result);

	// an array of user types we dont' bother with
	// could add board founder (USER_FOUNDER) if wanted
	$ignore_users = array(USER_IGNORE, USER_INACTIVE);
	
	// top five posters
	if (($user_posts = $cache->get('_top_five_posters')) === false)
	{
	    $user_posts = array();

		// grab users with most posts
	    $sql = 'SELECT user_id, username, user_colour, user_posts
	       	FROM ' . USERS_TABLE . '
			WHERE ' . $db->sql_in_set('user_type', $ignore_users, true) . '
				AND user_posts <> 0
	       ORDER BY user_posts DESC';
		$result = $db->sql_query_limit($sql, 5);

		while ($row = $db->sql_fetchrow($result))
		{
			$user_posts[$row['user_id']] = array(
				'user_id'		=> $row['user_id'],
                'username'		=> $row['username'],
                'user_colour'	=> $row['user_colour'],
				'user_posts'    => $row['user_posts'],
			);
		}
        $db->sql_freeresult($result);

		// cache this data for 5 minutes, this improves performance
		$cache->put('_top_five_posters', $user_posts, 300);
	 }

	 foreach ($user_posts as $row)
	 {
		$username_string = get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']);

		$template->assign_block_vars('top_five_active',array(
			'S_SEARCH_ACTION'	=> append_sid("{$phpbb_root_path}search.$phpEx", 'author_id=' . $row['user_id'] . '&sr=posts'),
			'POSTS' 			=> $row['user_posts'],
			'USERNAME_FULL'		=> $username_string)
	   );
    }

Avatar utente
peter6777
Utente Pro
Utente Pro
Messaggi: 93
Iscritto il: 26/02/2010, 23:06
Versione: 3.0.6
Server: UNIX/Linux

Re: Top 10

Messaggio da peter6777 » 10/03/2010, 17:27

Carlo, Bingo?........ho chiesto troppo?...
:?

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: Top 10

Messaggio da Micogian » 10/03/2010, 18:00

peter6777 ha scritto:Carlo, Bingo?........ho chiesto troppo?...
:?
No, solo che sia io che Carlo abbiamo qualche impegno di troppo e non sempre si arriva dappertutto.

A volte è difficile intervenire sullo script di un'altro, bisogna avere una grande dimestichezza.
In informatica spesso si ottiene lo stesso risultato seguendo vie diverse, in base alle rispettive conoscenze e approccio al problema.

Ho provato la mia mod, sono d'accordo che c'è il problema di un ordinamento sbagliato dovuto al fatto che l'approccio, appunto, era quello di controllare se il Topic corrente fosse uguale al precedente e quindi da non considerare. Se metto in ordine di Posts, cosa che sarebbe giusta, i topics non sono più in ordine col rischio che vengano inseriti più volte, l'ordine per Post non consente questo controllo.
Devo vedere, sto meno a studiare il mio script piuttosto che capire quello di Carlo, senza dubbio sono io ad avere delle lacune.

Resta il fatto che il mio script, per le prove che ho fatto, al di la dell'ordinamento non corretto, estrae sempre 10 Titoli.

Avatar utente
peter6777
Utente Pro
Utente Pro
Messaggi: 93
Iscritto il: 26/02/2010, 23:06
Versione: 3.0.6
Server: UNIX/Linux

Re: Top 10

Messaggio da peter6777 » 10/03/2010, 18:49

Vi stimo sempre e comunque per l'impegno e l'esperienza che ci mettete. Questo è indubbio.

Rispondi

Torna a “Supporto MODs”

Chi c’è in linea

Visitano il forum: Nessuno e 38 ospiti