Página 1 de 2

Ultimos Post selectivos

Publicado: 07 Abr 2011, 20:46
por Alfredo.S
URL: http://spotterpoint.org/foro
Versión phpBB: phpBB3 (3.0.8)
MODs Instalados: Ninguno
Plantilla(s) usada(s): Prosilver
Servidor:
Actualización desde otra versión: No
Conversión desde otro sistema de foros: No

Utilizo un codigo para mostrar mis ultimos post en el index de una web externa.
todo bien, el problema es que quiero seleccionar que temas quiero que se muestren y el codigo que tengo los muestra todos.
pego el codigo.

Código: Seleccionar todo

<?php 

// Amount of active topics to show 
define("TOPIC_COUNT", 6); 

// Path to the phpBB 3.0 root directory 
define("PHPBB_PATH", "../foro/"); 

// URL to the phpBB 3.0 installation 
define("PHPBB_LOCATION", "http://spotterpoint.org/foro/"); 

// Time format to output the date/time (for format see PHP manual) 
define("TIME_FORMAT", "d/m/Y"); 

// php extension using
$phpEx = "php";

// No Editing unless you know what your doing
if ( !defined('IN_PHPBB') ) 
{
	define('IN_PHPBB', true);
}


// Get the needed phpbb files, thank you phpbb =]
include($phpbb_root_path  . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/bbcode.' . $phpEx);

$user->session_begin();
$auth->acl($user->data);
$user->setup();

// HTML header start 

?> 
<style>
a:link, 
a:visited {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	color: #496c9f;	
	text-decoration: none;	
}

a:hover {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	color: #496c9f;	
	text-decoration: underline;
}

a:active {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	color: #496c9f;	
	text-decoration: none; 	
}
</style>
<table border="0" cellpadding="1" cellspacing="1" width="100%"> 
<tr> 
<th align="center" bgcolor="#DFE6EF"><font color="#5F5757" size="2">Mensajes del Foro</font></th> 
<th align="center" bgcolor="#DFE6EF"><font color="#5F5757" size="2">Visitas</font></th> 
<th align="center" bgcolor="#DFE6EF"><font color="#5F5757" size="2">Respuesta</font></th> 
<th align="center" bgcolor="#DFE6EF"><font color="#5F5757" size="2">Ultimos mensajes</font></th> 
<th align="center" bgcolor="#DFE6EF"><font color="#5F5757" size="2">Fecha</font></th> 
</tr> 
<?php 

// HTML header end 

$sql = "SELECT DISTINCT t.topic_title, t.topic_id,t.topic_views,t.topic_replies, t.topic_last_post_id, 

p.post_time,p.poster_id, f.forum_name, u.user_id, u.username 
FROM " . TOPICS_TABLE . " AS t, " . POSTS_TABLE . " AS p, " . FORUMS_TABLE . " AS f, " . USERS_TABLE . " AS u 
WHERE 
t.forum_id = f.forum_id

AND p.topic_id = t.topic_id 
AND p.poster_id = u.user_id 
AND p.post_id = t.topic_last_post_id 
ORDER BY p.post_time DESC LIMIT " . TOPIC_COUNT; 
$nt_result = $db->sql_query($sql); 

if(!$nt_result) 
{ 
die("Failed obtaining list of active topics".mysql_error()); 
} 
else 
{ 
$nt_data = $db->sql_fetchrowset(); 
} 

if ( count($nt_data) == 0 ) 
{ 
die("No topics found"); 
} 
else 
{ 
$cq = 1; 
$cc = FFFFFF; 
// $nt_data contains all interesting data 
for ($i = 0; $i < count($nt_data); $i++) 
{ 
$title = $nt_data[$i]['topic_title']; 
$Turl = PHPBB_LOCATION . 'viewtopic.' . $phpEx . "?t=" . $nt_data[$i]['topic_id']; 
$LPurl = PHPBB_LOCATION . 'viewtopic.' . $phpEx . "?p" . "=" . $nt_data[$i]['topic_last_post_id'] . "#p" . $nt_data[$i]['topic_last_post_id']; 

$on_forum = 'Forum ' . $nt_data[$i]['forum_Edicion']; 
$post_time = date(TIME_FORMAT, $nt_data[$i]['post_time']); 
//Profile profile.php?mode=viewprofile&u=23 
$profile = PHPBB_LOCATION . 'memberlist.' . $phpEx . "?mode=viewprofile&u=" . $nt_data[$i]['poster_id'] ; 
$usrname = $nt_data[$i]['username']; 
// Item HTML start 

if($cq%2 == 0){$cc = E8EFF4;$cq++;} else{$cc = E8EFF4;$cq++;}?> 
<tr> 
<td bgcolor="#<?php echo $cc;?>" align="left"><a href="<?php echo $LPurl; ?>" title="<?php echo $on_forum; ?>" 

target="_parent"><font face="verdana" color="#496C9F" size="1"><B><?php echo $title; ?></B></font></a></td> 
<td bgcolor="#<?php echo $cc;?>" align="left"><div align="center"><font face="verdana" color="#5B5B5B" size="1"><?php echo 

$nt_data[$i]['topic_views'] ?></div></td> 
<td bgcolor="#<?php echo $cc;?>" align="left"><font face="verdana" color="#5B5B5B" size="1"><div align="center"><?php echo 

$nt_data[$i]['topic_replies'] ?></div></td> 
<td align="center" bgcolor="#<?php echo $cc;?>" align="left"><font face="verdana" color="#666666" size="1"><a href="<?php 

echo $profile; ?>" target="_parent"><font face="verdana" color="#496C9F" size="1"><B><?php echo $usrname?></B></a></td>
<td bgcolor="#<?php echo $cc;?>" align="left"><font face="verdana" color="#5B5B5B" size="1"><div align="center"><?php echo 

$post_time ?></div></td> 
</tr> 
<?php 

// Item HTML end 

} 
} 

// Footer HTML start 

?>

Re: Ultimos Post selectivos

Publicado: 07 Abr 2011, 21:14
por Alorse
Para escoger que temas quieres mostrar seria otra modificación y no esa que tienes, además tendrías que estar editando el archivo cada vez que hallan nuevos temas que quieres mostrar.
Te dejo esta guía que tal vez te pueda servir, no dice como mostrar temas en especifico pero si como mostrar temas de un foro en especifico.
http://www.phpbb-es.com/foro/guias-phpb ... 25012.html
Si no te sirve nos avisas y miramos que mas podemos hacer, pero como te digo, lo que tu requieres no es que sea muy eficiente.
Por otro lado; de donde sacaste ese código?

Re: Ultimos Post selectivos

Publicado: 07 Abr 2011, 21:21
por Alfredo.S
Buenas tardes .
Gracias por responder tan rapido.
Ese enlace ya lo he visto, pero lo que ocurre es que me gusta bastante la estetica de este codigo, he probado los de el enlace que pones y tiene varios inconvenientes para mi.
lo que nesesito es 4 temas concretos que no voy a cambiar nunca, por lo que no tendre que estar modificandolo siempre.

Saludos.

Re: Ultimos Post selectivos

Publicado: 07 Abr 2011, 22:33
por Alorse
He modificado un poco ese código ya que tiene demasiados errores, no se los he quitado todos, pero bueno, al menos funciona ya mas optimo.

Te lo dejo para que veas:

Código: Seleccionar todo

<?php
// Amount of active topics to show
define('TEMAS','5,6,7,8,9,10');
define("TIME_FORMAT", "d/m/Y");
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../foro/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/bbcode.' . $phpEx);

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

// HTML header start
?>
<style>
    a:link,
    a:visited {
        font-family: Verdana, Arial, Helvetica, sans-serif;
        color: #496c9f;
        text-decoration: none;
    }

    a:hover {
        font-family: Verdana, Arial, Helvetica, sans-serif;
        color: #496c9f;
        text-decoration: underline;
    }

    a:active {
        font-family: Verdana, Arial, Helvetica, sans-serif;
        color: #496c9f;
        text-decoration: none;
    }
</style>
<table border="0" cellpadding="1" cellspacing="1" width="100%">
    <tr>
        <th align="center" bgcolor="#DFE6EF"><font color="#5F5757" size="2">Mensajes del Foro</font></th>
        <th align="center" bgcolor="#DFE6EF"><font color="#5F5757" size="2">Visitas</font></th>
        <th align="center" bgcolor="#DFE6EF"><font color="#5F5757" size="2">Respuesta</font></th>
        <th align="center" bgcolor="#DFE6EF"><font color="#5F5757" size="2">Ultimos mensajes</font></th>
        <th align="center" bgcolor="#DFE6EF"><font color="#5F5757" size="2">Fecha</font></th>
    </tr>
<?php
// HTML header end
$sql = "SELECT DISTINCT t.*,
p.post_time,p.poster_id, f.forum_name, u.user_id, u.username
FROM " . TOPICS_TABLE . " AS t, " . POSTS_TABLE . " AS p, " . FORUMS_TABLE . " AS f, " . USERS_TABLE . " AS u
WHERE t.forum_id = f.forum_id
AND p.topic_id = t.topic_id
AND t.topic_id IN (" . TEMAS . ")
AND p.poster_id = u.user_id
AND p.post_id = t.topic_last_post_id
ORDER BY t.topic_id ASC";
$nt_result = $db->sql_query($sql);

if (!$nt_result) {
    die("Failed obtaining list of active topics" . mysql_error());
} else {
    $nt_data = $db->sql_fetchrowset();
}

if (count($nt_data) == 0) {
    die("No topics found");
} else {
    $cq = 1;
    $cc = 'FFFFFF';
// $nt_data contains all interesting data
    for ($i = 0; $i < count($nt_data); $i++) {
        $title = $nt_data[$i]['topic_title'];
        $Turl =append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $nt_data[$i]['forum_id'] . '&t=' . $nt_data[$i]['topic_id']);
        $LPurl = $phpbb_root_path . 'viewtopic.' . $phpEx . "?p" . "=" . $nt_data[$i]['topic_last_post_id'] . "#p" . $nt_data[$i]['topic_last_post_id'];

        $post_time = date(TIME_FORMAT, $nt_data[$i]['post_time']);
//Profile profile.php?mode=viewprofile&u=23
        $profile = $phpbb_root_path . 'memberlist.' . $phpEx . "?mode=viewprofile&u=" . $nt_data[$i]['poster_id'];
        $usrname = $nt_data[$i]['username'];
// Item HTML start

        if ($cq % 2 == 0) {
            $cc = 'E8EFF4';
            $cq++;
        } else {
            $cc = 'E8EFF4';
            $cq++;
        } ?>
        <tr>
            <td bgcolor="#<?php echo $cc; ?>" align="left"><a href="<?php echo $Turl; ?>" title="<?php echo $on_forum; ?>"

                                                             target="_parent"><font face="verdana" color="#496C9F" size="1"><B><?php echo $title; ?></B></font></a></td>
            <td bgcolor="#<?php echo $cc; ?>" align="left"><div align="center"><font face="verdana" color="#5B5B5B" size="1"><?php echo

        $nt_data[$i]['topic_views'] ?></div></td>
            <td bgcolor="#<?php echo $cc; ?>" align="left"><font face="verdana" color="#5B5B5B" size="1"><div align="center"><?php echo

        $nt_data[$i]['topic_replies'] ?></div></td>
        <td align="center" bgcolor="#<?php echo $cc; ?>" align="left"><font face="verdana" color="#666666" size="1"><a href="<?php echo $profile; ?>" target="_parent"><font face="verdana" color="#496C9F" size="1"><B><?php echo $usrname ?></B></a></td>
        <td bgcolor="#<?php echo $cc; ?>" align="left"><font face="verdana" color="#5B5B5B" size="1"><div align="center"><?php echo

                    $post_time ?></div></td>
    </tr>
                <?php
// Item HTML end
                }
            }

// Footer HTML start
?>
Si te fijas una de las primeras lineas es esta:

Código: Seleccionar todo

define('TEMAS','5,6,7,8,9,10');
Solo debes cambiar esos numero por los ids, de los temas que quieres que se muestren.

Ejemplo :
Tenemos este tema de tu foro:
Fallos o Sugerencias => http://spotterpoint.org/foro/viewtopic.php?f=1&t=4
el ID del tema es la parte de la URL que dice t=x, en este caso 4.

Espero haberme hecho entender, puedes poner tantos ids como quieras separados por coma ( , ) cualquier cosa nos avisas.

Re: Ultimos Post selectivos

Publicado: 07 Abr 2011, 23:38
por Alfredo.S
Gracias el Codigo funciona bien con el único inconveniente que yo me he confundido, lo que queria que se mostrara eran los foros y no los temas.

Es decir en el ejemplo:

http://spotterpoint.org/foro/viewtopic.php?f=1&t=4

f=1 en lugar de t=4

Perdona por no expresarme bien.

Saludos

Re: Ultimos Post selectivos

Publicado: 07 Abr 2011, 23:47
por Alorse
mmm pues el asunto dice post y el mensaje que dejaste también, igual eso requiere un cambio muy diferente, ahora voy de salida así que cuando vuelva si puedo hago el otro script.

Re: Ultimos Post selectivos

Publicado: 08 Abr 2011, 00:07
por Alorse
Ahora que lo pienso mejor, porque simplemente no coges el html de ese código y le pues las URLs de los foros que quieres mostrar y listo?
Seria mucho mas fácil.

Re: Ultimos Post selectivos

Publicado: 08 Abr 2011, 00:35
por Alfredo.S
Pero no se actualizaria automaticamente, y lo que quiero es cada vez que refrescas la web chequea los ultimos post.

Re: Ultimos Post selectivos

Publicado: 08 Abr 2011, 00:54
por Alorse
Como así que últimos post!!! al fin que mensajes o foros?
Si quieres explícanos bien que es lo que quieres hacer y ya vemos como ayudarte, porque me tienes como enredado.

Re: Ultimos Post selectivos

Publicado: 08 Abr 2011, 01:53
por Alfredo.S
Bueno disculpad mi ignorancia.

El Codigo que puse en un principio muestra los ultimos post del Foro(todos los ultimos post), actualmente tengo 4 foros publicos y uno de administracion.
la idea es que solo se muestren los ultimos post de los foros publicos y no los ultimos post de el foro de administracion .

espero que con eso que de claro, lo que ocurre es que no tenia claro los terminos foro,tema,post etc..

Re: Ultimos Post selectivos

Publicado: 08 Abr 2011, 02:58
por Alorse
Ahora si nos entendemos he reorganizado toda la consulta SQL para que muestre los mensajes según los permisos del usuario, por ejemplo si tu eres administrador, la lista mostrara también los temas del foro de administración, pero si eres usuario normal y no tienes permiso para entrar a dicho foro, mostrara los temas de los foros que el puede ver no mas, además de otros cambios :ok:

Código: Seleccionar todo

<?php
// Amount of active topics to show
define("TOPIC_COUNT", 6);
define("TIME_FORMAT", "d/m/Y");
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../foro/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/bbcode.' . $phpEx);

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

// HTML header start
?>
<style>
    a:link,
    a:visited {
        font-family: Verdana, Arial, Helvetica, sans-serif;
        color: #496c9f;
        text-decoration: none;
    }

    a:hover {
        font-family: Verdana, Arial, Helvetica, sans-serif;
        color: #496c9f;
        text-decoration: underline;
    }

    a:active {
        font-family: Verdana, Arial, Helvetica, sans-serif;
        color: #496c9f;
        text-decoration: none;
    }
</style>
<table border="0" cellpadding="1" cellspacing="1" width="100%">
    <tr>
        <th align="center" bgcolor="#DFE6EF"><font color="#5F5757" size="2">Mensajes del Foro</font></th>
        <th align="center" bgcolor="#DFE6EF"><font color="#5F5757" size="2">Visitas</font></th>
        <th align="center" bgcolor="#DFE6EF"><font color="#5F5757" size="2">Respuesta</font></th>
        <th align="center" bgcolor="#DFE6EF"><font color="#5F5757" size="2">Ultimos mensajes</font></th>
        <th align="center" bgcolor="#DFE6EF"><font color="#5F5757" size="2">Fecha</font></th>
    </tr>
<?php
    $posts_ary = array(
        'SELECT' => 'f.*, t.*, u.username, u.user_colour',
        'FROM' => array(
            TOPICS_TABLE => 't',
        ),
        'LEFT_JOIN' => array(
            array(
                'FROM' => array(USERS_TABLE => 'u'),
                'ON' => 'u.user_id = t.topic_poster'
            ),
            array(
                'FROM' => array(FORUMS_TABLE => 'f'),
                'ON' => 't.forum_id = f.forum_id'
            ),
        ),
        'WHERE' => $db->sql_in_set('t.forum_id', array_keys($auth->acl_getf('f_read', true))) . '
        AND t.topic_status <> ' . ITEM_MOVED . '
        AND t.topic_approved = 1
        OR t.forum_id = 0', //OR t.forum_id = 0, esta linea es para que muestre tambien los globales ya que el id del foro de estos es 0
        'ORDER_BY' => 't.topic_id DESC',
    );

$posts = $db->sql_build_query('SELECT', $posts_ary);

$nt_result = $db->sql_query_limit($posts, TOPIC_COUNT);

if (!$nt_result) {
    die("Failed obtaining list of active topics" . mysql_error());
} else {
    $nt_data = $db->sql_fetchrowset();
}

if (count($nt_data) == 0) {
    die("No topics found");
} else {
// $nt_data contains all interesting data
    for ($i = 0; $i < count($nt_data); $i++) {
        $title = $nt_data[$i]['topic_title'];
        $Turl =append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $nt_data[$i]['forum_id'] . '&t=' . $nt_data[$i]['topic_id']);
        $LPurl = $phpbb_root_path . 'viewtopic.' . $phpEx . "?p" . "=" . $nt_data[$i]['topic_last_post_id'] . "#p" . $nt_data[$i]['topic_last_post_id'];
        $post_time = date(TIME_FORMAT, $nt_data[$i]['topic_time']);
        $profile = get_username_string('full', $nt_data[$i]['topic_last_poster_id'], $nt_data[$i]['topic_first_poster_name'], $nt_data[$i]['topic_first_poster_colour']);

// Item HTML start
 ?>
        <tr>
            <td bgcolor="#E8EFF4" align="left"><a href="<?php echo $Turl; ?>" title="<?php echo $title; ?>" target="_parent"><font face="verdana" color="#496C9F" size="1"><B><?php echo $title; ?></B></font></a></td>
            <td bgcolor="#E8EFF4" align="left"><div align="center"><font face="verdana" color="#5B5B5B" size="1"><?php echo $nt_data[$i]['topic_views'] ?></div></td>
            <td bgcolor="#E8EFF4" align="left"><font face="verdana" color="#5B5B5B" size="1"><div align="center"><?php echo $nt_data[$i]['topic_replies'] ?></div></td>
                <td align="center" bgcolor="#E8EFF4" align="left"><font face="verdana" color="#666666" size="1"><?php echo $profile ?></td>
                <td bgcolor="#E8EFF4" align="left"><font face="verdana" color="#5B5B5B" size="1"><div align="center"><?php echo $post_time ?></div></td>
            </tr>
                <?php
// Item HTML end
                }
            }

// Footer HTML start
?>
</table>
Cuando lo tengas listo por favor muéstranos donde lo has puesto a funcionar para que futuros usuarios puedan ver lo que hace el código.

Re: Ultimos Post selectivos

Publicado: 08 Abr 2011, 10:42
por Alfredo.S
Buenos dias .

Lo he puesto en la web, http://spotterpoint.org (entre los dos banner de publicidad)
se puede observar que da el siguiente error, [phpBB Debug] PHP Notice: in file /includes/session.php on line 1024: Cannot modify header information - headers already sent by (output started at /topic.php:9)

Esto sucede si no estoy autentificado en el foro, pero en el foro no es nesesario estar autentificado para verlo solo para escribir. http://spotterpoint.org/foro

si me autentifico en el foro si se ve. a ver si tiene solucion,
Gracias.

Re: Ultimos Post selectivos

Publicado: 08 Abr 2011, 17:34
por Alorse
La verdad no tengo idea a que se deba ese error, ya que yo también lo estoy probando y funciona correctamente, además el error que saca no tiene que ver con el código del script, de igual manera, si lo vas a usar en en el root de la pagina, has lo siguientes cambios.

Cambia esto:

Código: Seleccionar todo

$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../foro/'; 
Por esto:

Código: Seleccionar todo

$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './foro/'; 
Y esto:

Código: Seleccionar todo

$user->setup('viewforum'); 
Por esto:

Código: Seleccionar todo

$user->setup(); 
Tu le hiciste algún cambio al código?

Re: Ultimos Post selectivos

Publicado: 08 Abr 2011, 22:40
por Alfredo.S
Buenas noches,

Ahora aparece el siguiente error,
Warning: include(./foro/common.php) [function.include]: failed to open stream: No such file or directory in /homepages/16/d357940266/htdocs/foro/topic.php on line 16

Warning: include() [function.include]: Failed opening './foro/common.php' for inclusion (include_path='.:/usr/lib/php5') in /homepages/16/d357940266/htdocs/foro/topic.php on line 16

lleva tela la cosa ..

Re: Ultimos Post selectivos

Publicado: 09 Abr 2011, 02:01
por Alorse
Ya deberás jugar con la ruta de donde esta el foro editando esta linea:

Código: Seleccionar todo

    $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../foro/';
Fijándote porque es que no entra y revisando los permisos del archivo, crea uno nuevo haber si es que ese tiene algun conflicto, por mi parte no se que mas decirte ya que yo he probado ese script en local y funciona perfectamente.
Cambia ./foro/ por /foro/ haber si puede ser eso.