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

Visualizzare elementi phpbb su pagine esterne. Come?

Supporto MODs generale.
Avatar utente
oltrecomics
Utente
Utente
Messaggi: 73
Iscritto il: 08/10/2011, 16:24
Versione: 3.0.9
Server: UNIX/Linux

Re: Come posso visualizzare gli ultimi topic su pagine ester

Messaggio da oltrecomics » 05/11/2011, 18:27

Grazie :)

Prima di cercare il campo post_text, vorrei chiederti due cose riguardo la query ultimi post:
1) Come mai se scrivo un secondo o terzo post di un topic mi appaiono tutti e tre nel latest post (si trova in basso a sinistra, il riquadro si chiama OltreComics Universe News la pagina è: www.oltrecomics.com/homepage.php).
2) perchè la seguente stringa non funziona:

Codice: Seleziona tutto

$post_subject2 = str_replace("Re: ", "", $row2['topic_last_post_subject']) ;
La query è questa:

Codice: Seleziona tutto

$sql2 = "SELECT tt.topic_id, pt.post_id, pt.topic_id, tt.forum_id, tt.topic_poster, tt.topic_desc, 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, " . POSTS_TABLE . " pt 
    WHERE tt.topic_type = 0
    AND tt.forum_id = '6'
    AND tt.topic_moved_id = 0
    AND tt.forum_id = ft.forum_id
    AND pt.topic_id = tt.topic_id
    ORDER BY tt.topic_last_post_time DESC LIMIT 0,10";
$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 < 5)
			{
				$post_subject2 = str_replace("Re: ", "", $row2['topic_last_post_subject']) ;
				if (strlen($post_subject2) > 28)
				{
				$post_title2 = substr($post_subject2,0,25) . "...";
				}else{
				$post_title2 = $post_subject2 ;
				}
				
// accorcia la descrizione del topic
if (strlen($row2['topic_desc']) > 31)
{
$topic_desc2 = substr($row2['topic_desc'],0,30) . "...";
}else{
$topic_desc2 = $row2['topic_desc'];
}                        
                        
			$last_post_link_2[$n2]		= append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=" . $row5['forum_id'] . "&t=" . $row5['topic_id'] . "#p" . $row5['topic_last_post_id']);
			//$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']);
			$forum_id_2[$n2]  = $row2['forum_id'];
      $topic_last_post_id_2[$n2]  = $row2['topic_last_post_id'];
      $last_post_title_2[$n2] 		= $row2['topic_last_post_subject'];
			$last_post_title_short_2[$n2] = $post_title2;
			$last_post_forum_2[$n2]  		= $row2['forum_name'];
			$last_post_author_2[$n2] 		= $row2['topic_last_poster_name'];
			$topic_desc_2[$n2] = $row2['topic_desc']; 
      $desc_short_2[$n2] = $topic_desc2; 
			$topic_id_2[$n2] = $row2['topic_id'];
			$avatar_author_2[$n2] =  user_avatar($row2['topic_poster'], '20', '20') ;
			$topic_date_2[$n2] = $user->format_date($row2['topic_last_post_time']);
      $post_image_2[$n2] =  my_img($row2['post_id']);
			++$n2 ;          	
			}else{
			break ;
			}
        }
    }
In frontend ho inserito questo codice:

Codice: Seleziona tutto

<?php
for ($y = '0';$y < $n2;++$y)
{
// Lista degli ultimi topics
echo "<li class='row'>
		<dl class='icon'>
      <dt><a href=http://www.oltrecomics.com/forum/viewtopic.php?f=" . $forum_id_2[$y] . "&t=" . $topic_id_2[$y] . "#p" . $topic_last_post_id_2[$y] . "><img src=" . $post_image_2[$y] . " width='40' height='80' alt='' /></a></dt>			
			<dd class='lastpost'>
       <span><a href=http://www.oltrecomics.com/forum/viewtopic.php?f=" . $forum_id_2[$y] . "&t=" . $topic_id_2[$y] . "#p" . $topic_last_post_id_2[$y] . ">" . $last_post_title_short_2[$y] . "</a><br>" . $desc_short_2[$y] . "<br>" . $topic_date_2[$y] . "<br>" . $last_post_forum_2[$y] . "<br>" . $avatar_author_2[$y] . " By: " . $last_post_author_2[$y] . "</span></dd></dl></li>";       
   }
?>

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: Come posso visualizzare gli ultimi topic su pagine ester

Messaggio da Micogian » 05/11/2011, 18:54

oltrecomics ha scritto: 1) Come mai se scrivo un secondo o terzo post di un topic mi appaiono tutti e tre nel latest post
Perchè dal momento che interroghi la tabella Posts hai tutti i posts.
Guarda la mia Mod Topten Topic, gli ultimi posts, vedrai che viene creta una $lista_topics alla quale viene aggiunto il topic_id.
la procedura controlla con il comando strpos() se il topic_id è già presente e in questo caso lo salta, fino ad arrivare al numero dei records stabiliti.
2) perchè la seguente stringa non funziona:

Codice: Seleziona tutto

$post_subject2 = str_replace("Re: ", "", $row2['topic_last_post_subject']) ;
Perchè probabilmente devi usare $post_subject2[$n2]
In frontend ho inserito questo codice:

Codice: Seleziona tutto

<?php
for ($y = '0';$y < $n2;++$y)
{
// Lista degli ultimi topics
echo "<li class='row'>
		<dl class='icon'>
      <dt><a href=http://www.oltrecomics.com/forum/viewtopic.php?f=" . $forum_id_2[$y] . "&t=" . $topic_id_2[$y] . "#p" . $topic_last_post_id_2[$y] . "><img src=" . $post_image_2[$y] . " width='40' height='80' alt='' /></a></dt>			
			<dd class='lastpost'>
       <span><a href=http://www.oltrecomics.com/forum/viewtopic.php?f=" . $forum_id_2[$y] . "&t=" . $topic_id_2[$y] . "#p" . $topic_last_post_id_2[$y] . ">" . $last_post_title_short_2[$y] . "</a><br>" . $desc_short_2[$y] . "<br>" . $topic_date_2[$y] . "<br>" . $last_post_forum_2[$y] . "<br>" . $avatar_author_2[$y] . " By: " . $last_post_author_2[$y] . "</span></dd></dl></li>";       
   }
?>
Non ho capito questa storia del "frontend". Essendo una pagina php e non phpbb potrebbe essere una unica pagina (salvo eventuali "include"), nella parte <head> si mettono le query e nel body visualizzi il risultato.

Avatar utente
oltrecomics
Utente
Utente
Messaggi: 73
Iscritto il: 08/10/2011, 16:24
Versione: 3.0.9
Server: UNIX/Linux

Re: Come posso visualizzare gli ultimi topic su pagine ester

Messaggio da oltrecomics » 05/11/2011, 18:57

Se ho capito bene il contenuto del campo post_text dovrebbe essere questo:

Codice: Seleziona tutto

[lightbox=250:2ry16s6c]http&#58;//img291&#46;imageshack&#46;us/img291/6518/monkeymanandobrienashca&#46;jpg[/lightbox:2ry16s6c]
la pagina in questione è questa (prima immagine).
Monkeyman and O'Brien

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: Come posso visualizzare gli ultimi topic su pagine ester

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

Il problema è la dimensione, ritengo che non sia sempre "250".
Si potrebbe tralasciare la prima parte del bbcode.
I bbcode contengono sempre un codice casuale, il "bbcode_uid" che però è ricavabile dalla tabella posts.
Con questa variazione dovrebbe ritornare l'url contenuto in un bbcode "lightbox", da provare:

Codice: Seleziona tutto

function my_lightbox($post) // trova l'url del bbcode lightbox presente nel testo del post_id selezionato
{
global $db ;
$sql = "SELECT post_id, post_text, bbcode_uid
    FROM " . POSTS_TABLE . " 
    WHERE post_id = " . $post ;
    $result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
        $post_text_cor = $row['post_text'];
        $bbcode_uid_cor = $row['bbcode_uid'];
        $pattern_cor = "#:".$bbcode_uid_cor ."\](.*?)\[/lightbox:" . $bbcode_uid_cor ."\]#i";  
        preg_match($pattern_cor,$post_text_cor,$matches);  
        $bbcode_lightbox = isset($matches[1]) ? $matches[1] : ''; 

    return $bbcode_lightbox ;
} 
Ovviamente cambia il nome della function e pertanto vanno messe entrambi.
La function estrae solo il primo link di ciascun bbcode, se in un post ci sono entrambi i bbcode le immagini diventano 2.
In ogni caso bisogna poi fare in modo di controllare se le due function ritornano un risultato vuoto perche i bbcode non sono presenti nel post oppure un url. A questo punto bisogna scegliere la function che dà un un risultato.
Non è semplice la cosa.

Avatar utente
oltrecomics
Utente
Utente
Messaggi: 73
Iscritto il: 08/10/2011, 16:24
Versione: 3.0.9
Server: UNIX/Linux

Re: Come posso visualizzare gli ultimi topic su pagine ester

Messaggio da oltrecomics » 05/11/2011, 20:11

1) Non solo avevo aperto il file mod_topten_topics.php, ma ho anche copiato la query da li :)
La cosa strana è che nel riquadro a destra, chiamato "ALL NEWS", sembra che funzioni normalmente :(

2) Ho provato ad inserire "$n2"
Ma non succede nulla... Forse perchè non so dove metterlo e cos'altro aggiungere (controlla la query che ho postato).

PS: per frontend intendo la homepage.php


EDIT:

Ho modificato anche "All news"
Ho notato che l'errore si presenta quando aggiungo la tabella POST con i campi:
pt.post_id e pt.topic_id

Ho anche inserito la function my_lightbox sempre in All news, sembra che inserica un'immagine si e una no
In quella non funzionante (usando firebug) riporta il sequente codice:

Codice: Seleziona tutto

<img width="40" height="80" alt="" src="[lightbox=250:2ry16s6c]http://img291.imageshack.us/img291/6518/monkeymanandobrienashca.jpg">

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: Come posso visualizzare gli ultimi topic su pagine ester

Messaggio da Micogian » 05/11/2011, 23:28

Probabilmente c'è un bbcode_uid precedente. Se la dimensione fosse sempre 250 si potrebbe risolvere così:
$pattern_cor = "#\[lightbox=250:".$bbcode_uid_cor ."\](.*?)\[/lightbox:" . $bbcode_uid_cor ."\]#i";
allora l'url sarebbe corretto, ma se non è 250 non funziona.

Avatar utente
oltrecomics
Utente
Utente
Messaggi: 73
Iscritto il: 08/10/2011, 16:24
Versione: 3.0.9
Server: UNIX/Linux

Re: Come posso visualizzare gli ultimi topic su pagine ester

Messaggio da oltrecomics » 06/11/2011, 12:08

Purtroppo la dimensione è variabile, ed è impostata dall'utente.
infatti si presenta in questo modo "lightbox=x" dove X è la larghezza che viene assegnata...
Per escludere un bbcode da un altro non si potrebbe usare il condizionale "IF"?
Cioè se trovo solo il bbcode"img" visualizzo il primo di quelli postati (se ce ne sono più di uno), se trovo invece il bbcode"lightbox", escludo il bbcode "img", e visualizzo il primo tra quelli postati, se non trovo nulla lasciare vuoto...boh vabbè
Tralasciando questa cosa interessante ma laboriosa, il problema potrei escluderlo, chiedendo all'utente di utilizzare le cover di dimensioni prestabilite...sicuramente dovrò correggere vari post, pazienza.

Quello che mi preme invece (e poi chiudo questo post definitivamente), è:
la ripetizione dei post, che come ho detto avviene solo quando inserisco la tabella Post con i campi relativi
e la non funzionalità di questo:

Codice: Seleziona tutto

    $post_subject2 = str_replace("Re: ", "", $row2['topic_last_post_subject']) ;
Posto nuovamente la query

Codice: Seleziona tutto

        //---------- 10 Ultimi posts start -----------//
$sql4 = "SELECT pt.post_id, pt.topic_id, tt.topic_id, tt.forum_id, tt.topic_poster, tt.topic_desc, 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, " . POSTS_TABLE . " pt
    WHERE tt.topic_type = 0
    AND tt.topic_moved_id = 0
    AND tt.forum_id = ft.forum_id   
    AND pt.topic_id = tt.topic_id 
    ORDER BY tt.topic_last_post_time DESC LIMIT 0,20";
$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 < 28)
			{
				$post_subject = str_replace("Re: ", "", $row4['topic_last_post_subject']) ;
				if (strlen($post_subject) > 38)
				{
				$post_title = substr($post_subject,0,37) . "...";
				}else{
				$post_title = $post_subject ;
				}
				
// accorcia la descrizione del topic
if (strlen($row4['topic_desc']) > 38)
{
$topic_desc4 = substr($row4['topic_desc'],0,34) . "...";
}else{
$topic_desc4 = $row4['topic_desc'];
}                        
                        
			//$last_post_link_4[$n4]		= append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=" . $row4['forum_id'] . "&t=" . $row4['topic_id'] . "#p" . $row4['topic_last_post_id']);
			//$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']);
			$forum_id_4[$n4]  = $row4['forum_id'];
      $topic_last_post_id_4[$n4]  = $row4['topic_last_post_id'];
      $last_post_title_4[$n4] 		= $row4['topic_last_post_subject'];
			$last_post_title_short_4[$n4] = $post_title;
			$last_post_forum_4[$n4]  		= $row4['forum_name'];
			$last_post_author_4[$n4] 		= $row4['topic_last_poster_name'];
			$topic_desc_4[$n4] = $row2['topic_desc']; 
      $desc_short_4[$n4] = $topic_desc4; 
			$topic_id_4[$n4] = $row4['topic_id'];
			$avatar_author_4[$n4] =  user_avatar($row4['topic_poster'], '40', '40') ;
			$topic_date_4[$n4] = $user->format_date($row4['topic_last_post_time']);
     $post_image_4[$n4] =  my_img($row4['post_id']);
			++$n4 ;          	
			}else{
			break ;
			}
        }
    }
//---------- 10 Ultimi posts end -----------// 
E il codice che ho messo in homepage.php (nel sito, puoi vedere il risultato nel riquadro ALL NEWS)

Codice: Seleziona tutto

<?php
for ($y = '0';$y < $n4;++$y)
{
// Lista degli ultimi topics
echo "<li class='row'>
		<dl class='icon'>
      <dt><img src=" . $post_image_4[$y] . " width='40' height='80' alt='' />" . $avatar_author_4[$y] . "</dt>			
			<dd class='lastpost'>
       <span><a href=http://www.oltrecomics.com/forum/viewtopic.php?f=" . $forum_id_4[$y] . "&t=" . $topic_id_4[$y] . "#p" . $topic_last_post_id_4[$y] . ">" . $last_post_title_short_4[$y] . "</a><br>" . $desc_short_4[$y] . "<br>" . $topic_date_4[$y] . "<br>" . $last_post_forum_4[$y] . "<br>Autore: (" . $last_post_author_4[$y] . ")</span></dd></dl></li>";       
   }
?>

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: Come posso visualizzare gli ultimi topic su pagine ester

Messaggio da Micogian » 06/11/2011, 13:53

Così non può funzionare, dal momento che inserisci la tabella POSTS complichi le cose.
Probabilmente dovresti guardare la vecchia versione di Topten Topics, nella quale i Topics venivano estratti dalla tabella Posts e poi veniva fatto un controllo per non inserire doppioni.
La trovi qui: http://www.phpbbitalia.net/forum/mods-i ... t3225.html
ma è stata abbandonata ed aggiornata con la versione 1.0.4 che ha un altro sistema per trovare gli ultimi post, ma non avresti il contenuto dei posts che invece a te servono.
L'avevo modificata perchè la query portava via molto tempo, perchè vanno controllati un numero elevato di Posts, controllare se nel testo hanno il contenuto del bbcode e limitare a un solo post per Topic .
Si può fare ma è pesante. Vedi la vecchia Mod.

Avatar utente
oltrecomics
Utente
Utente
Messaggi: 73
Iscritto il: 08/10/2011, 16:24
Versione: 3.0.9
Server: UNIX/Linux

Re: Come posso visualizzare gli ultimi topic su pagine ester

Messaggio da oltrecomics » 06/11/2011, 17:20

Beh se è troppo pesante, è meglio lascar perdere :(
Una domanda:
Ho visto la tua view last pictures 2, che visualizza gli l'allegato del primo post di ogni topic, non è possibile fare la stessa cosa con il primo bbcode del primo post?

Edit
Ho notato in questo sito test visualizzano in un carousel anche le immagini tratte dai bbcode:
http://www.4seven.de/forum/media/index.php?w=1280&h=720

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: Come posso visualizzare gli ultimi topic su pagine ester

Messaggio da Micogian » 06/11/2011, 19:29

Tutto è possibile. A parte che 4seven non è l'ultimo arrivato, quello è un Test ed estrae le immagini da un Forum.
La differenza tra "allegati" e "bbcode" è questa: gli allegati sono memorizzati nella tabella attachments e quindi sono facilmente estraibili.
I bbcode sono contenuti nel testo dei posts, non è possibile saperlo a priori, quindi la tabella da elaborare è Posts, ma non solo, serve anche topics e forums per avere tutti i dati.
I dati vanno elaborati, scegliere solo il primo post di ogni Topic, controllare se all'interno del testo c'è un bbcode (tra l'altro tu ne usi più di uno) e nel caso di immagini troppo grandi vanno anche ridotte.
Tutto possibile ma certamente più complesso.
E' una questione di come viene strutturato un Forum, ognuno è libero di fare come crede ma poi saltano fuori i problemi.
Nei miei Forum si usa esclusivamente l'allegato, anche perchè se tu metti un link in un post e la pagina originale cambio o viene eliminata resti con il post senza immagini.

Comunque la procedura è quella indicata, usare la function che estrae l'url di un bbcode.

Rispondi

Torna a “Supporto MODs”

Chi c’è in linea

Visitano il forum: Nessuno e 48 ospiti