Foros del Web » Creando para Internet » Sistemas de gestión de contenidos »

Últimos posts en PHPBB3 (Solución completa) Pero problemas con carácteres especiales

Estas en el tema de Últimos posts en PHPBB3 (Solución completa) Pero problemas con carácteres especiales en el foro de Sistemas de gestión de contenidos en Foros del Web. hola, he leído algunos posts comentando el tema de "últimos comentarios" pero aún no he encontrado ninguno donde se pusiera la solución completa paso a ...
  #1 (permalink)  
Antiguo 11/04/2008, 12:39
 
Fecha de Ingreso: junio-2007
Ubicación: En mi casa
Mensajes: 82
Antigüedad: 16 años, 9 meses
Puntos: 2
Últimos posts en PHPBB3 (Solución completa) Pero problemas con carácteres especiales

hola, he leído algunos posts comentando el tema de "últimos comentarios" pero aún no he encontrado ninguno donde se pusiera la solución completa paso a paso de una forma fácil y simple, ahora voy a contar lo que he hecho de una forma muy elemental.

Conectarse por FTP al servidor y editar el index.php (en la zona donde quieras que se muestren los últimos mensajes) con este código que he encontrado en esta propia página:

Código:
// phpBB :: MOSTRAR ULTIMOS 10 MENSAJES
// ::  ::




$con=mysql_connect("TU BASE DE DATOS", USUARIO, PASSWORD);
mysql_select_db("NOMBRE DE LA BASE DE DATOS",$con);








// Cantidad de post a mostrar y prefijo de las tablas
$ultimos = 10;
$prefijo = "phpbb_";

// Consultas a la base
$result_mensaje=mysql_query("select * from $prefijo"."topics order by topic_id desc limit $ultimos",$con);
while($mostrar_m = mysql_fetch_array($result_mensaje)) {
$topic=$mostrar_m["topic_id"];
$forum_id=$mostrar_m["forum_id"];
$result_foro=mysql_query("select * from $prefijo"."forums where forum_id like $forum_id",$con);
$mostrar_f=mysql_fetch_array($result_foro);
$forum_name = $mostrar_f["forum_name"];
mysql_free_result($result_foro);
?>
<font face="verdana" size="2">&nbsp;<a href="viewtopic.php?t=<?=$topic;?>" target="_blank"><? echo $mostrar_m["topic_title"]; 

?></a><br>&nbsp;&nbsp;en <i><b><?=$forum_name;?></b></i></font><br>
<?
}
// Cerramos conexión
mysql_free_result($result_mensaje);
mysql_close($con);
El código fuente final de nuestro index.php podría quedar de esta forma (podéis hasta copiar todo este código y guardarlo en index.php solo cambiando lo que he puesto en negrita).

Código:
<?php

// phpBB :: MOSTRAR ULTIMOS 10 MENSAJES
// ::  ::

$con=mysql_connect("TU BASE DE DATOS", USUARIO, PASSWORD);
mysql_select_db("NOMBRE DE LA BASE DE DATOS",$con);

// Cantidad de post a mostrar y prefijo de las tablas
$ultimos = 10;
$prefijo = "phpbb_";

// Consultas a la base
$result_mensaje=mysql_query("select * from $prefijo"."topics order by topic_id desc limit $ultimos",$con);
while($mostrar_m = mysql_fetch_array($result_mensaje)) {
$topic=$mostrar_m["topic_id"];
$forum_id=$mostrar_m["forum_id"];
$result_foro=mysql_query("select * from $prefijo"."forums where forum_id like $forum_id",$con);
$mostrar_f=mysql_fetch_array($result_foro);
$forum_name = $mostrar_f["forum_name"];
mysql_free_result($result_foro);
?>
<font face="verdana" size="2">&nbsp;<a href="viewtopic.php?t=<?=$topic;?>" target="_blank"><? echo $mostrar_m["topic_title"]; 

?></a><br>&nbsp;&nbsp;en <i><b><?=$forum_name;?></b></i></font><br>
<?
}
// Cerramos conexión
mysql_free_result($result_mensaje);
mysql_close($con);



/**
*
* @package phpBB3
* @version $Id: index.php,v 1.176 2007/10/05 14:30:06 acydburn Exp $
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
*/

/**
* @ignore
*/
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);
$user->setup('viewforum');

display_forums('', $config['load_moderators']);

// Set some stats, get posts count from forums data if we... hum... retrieve all forums data
$total_posts	= $config['num_posts'];
$total_topics	= $config['num_topics'];
$total_users	= $config['num_users'];

$l_total_user_s = ($total_users == 0) ? 'TOTAL_USERS_ZERO' : 'TOTAL_USERS_OTHER';
$l_total_post_s = ($total_posts == 0) ? 'TOTAL_POSTS_ZERO' : 'TOTAL_POSTS_OTHER';
$l_total_topic_s = ($total_topics == 0) ? 'TOTAL_TOPICS_ZERO' : 'TOTAL_TOPICS_OTHER';

// Grab group details for legend display
if ($auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel'))
{
	$sql = 'SELECT group_id, group_name, group_colour, group_type
		FROM ' . GROUPS_TABLE . '
		WHERE group_legend = 1
		ORDER BY group_name ASC';
}
else
{
	$sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_type
		FROM ' . GROUPS_TABLE . ' g
		LEFT JOIN ' . USER_GROUP_TABLE . ' ug
			ON (
				g.group_id = ug.group_id
				AND ug.user_id = ' . $user->data['user_id'] . '
				AND ug.user_pending = 0
			)
		WHERE g.group_legend = 1
			AND (g.group_type <> ' . GROUP_HIDDEN . ' OR ug.user_id = ' . $user->data['user_id'] . ')
		ORDER BY g.group_name ASC';
}
$result = $db->sql_query($sql);

$legend = '';
while ($row = $db->sql_fetchrow($result))
{
	$colour_text = ($row['group_colour']) ? ' style="color:#' . $row['group_colour'] . '"' : '';

	if ($row['group_name'] == 'BOTS')
	{
		$legend .= (($legend != '') ? ', ' : '') . '<span' . $colour_text . '>' . $user->lang['G_BOTS'] . '</span>';
	}
	else
	{
		$legend .= (($legend != '') ? ', ' : '') . '<a' . $colour_text . ' href="' . 

append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;g=' . $row['group_id']) . '">' . (($row['group_type'] == 

GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']) . '</a>';
	}
}
$db->sql_freeresult($result);

// Generate birthday list if required ...
$birthday_list = '';
if ($config['load_birthdays'] && $config['allow_birthdays'])
{
	$now = getdate(time() + $user->timezone + $user->dst - date('Z'));
	$sql = 'SELECT user_id, username, user_colour, user_birthday
		FROM ' . USERS_TABLE . "
		WHERE user_birthday LIKE '" . $db->sql_escape(sprintf('%2d-%2d-', $now['mday'], $now['mon'])) . "%'
			AND user_type IN (" . USER_NORMAL . ', ' . USER_FOUNDER . ')';
	$result = $db->sql_query($sql);

	while ($row = $db->sql_fetchrow($result))
	{
		$birthday_list .= (($birthday_list != '') ? ', ' : '') . get_username_string('full', $row['user_id'], 

$row['username'], $row['user_colour']);

		if ($age = (int) substr($row['user_birthday'], -4))
		{
			$birthday_list .= ' (' . ($now['year'] - $age) . ')';
		}
	}
	$db->sql_freeresult($result);
}

// Assign index specific vars
$template->assign_vars(array(
	'TOTAL_POSTS'	=> sprintf($user->lang[$l_total_post_s], $total_posts),
	'TOTAL_TOPICS'	=> sprintf($user->lang[$l_total_topic_s], $total_topics),
	'TOTAL_USERS'	=> sprintf($user->lang[$l_total_user_s], $total_users),
	'NEWEST_USER'	=> sprintf($user->lang['NEWEST_USER'], get_username_string('full', $config['newest_user_id'], 

$config['newest_username'], $config['newest_user_colour'])),

	'LEGEND'		=> $legend,
	'BIRTHDAY_LIST'	=> $birthday_list,

	'FORUM_IMG'				=> $user->img('forum_read', 'NO_NEW_POSTS'),
	'FORUM_NEW_IMG'			=> $user->img('forum_unread', 'NEW_POSTS'),
	'FORUM_LOCKED_IMG'		=> $user->img('forum_read_locked', 'NO_NEW_POSTS_LOCKED'),
	'FORUM_NEW_LOCKED_IMG'	=> $user->img('forum_unread_locked', 'NO_NEW_POSTS_LOCKED'),

	'S_LOGIN_ACTION'			=> append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=login'),
	'S_DISPLAY_BIRTHDAY_LIST'	=> ($config['load_birthdays']) ? true : false,

	'U_MARK_FORUMS'		=> ($user->data['is_registered'] || $config['load_anon_lastread']) ? 

append_sid("{$phpbb_root_path}index.$phpEx", 'mark=forums') : '',
	'U_MCP'				=> ($auth->acl_get('m_') || $auth->acl_getf_global('m_')) ? 

append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=main&amp;mode=front', true, $user->session_id) : '')
);

// Output page
page_header($user->lang['INDEX']);

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

page_footer();

?>
Esta parte es la generación en HTML del título del mensaje, y la categoría del foro de los últimos mensajes, la podéis modificar a vuestro antojo, cambiando el tipo de letra, el tamaño, y sobretodo, también elegir el directorio de vuestro foro si os da problemas al clicar, puesto que esta linea por defecto se presupone que tenéis el PHPBB3 en la raíz del servidor, ejemplo www.hola.com/(los ficheros del PHPBB), con lo que si tienes tu foro en una carpeta por ejemplo llamada "phpbb" tendrías que añadir "phpbb/" delante de "viewtopic.php"

Código:
<font face="verdana" size="2">&nbsp;<a href="viewtopic.php?t=<?=$topic;?>" target="_blank"><? echo $mostrar_m["topic_title"]; 

?></a><br>&nbsp;&nbsp;en <i><b><?=$forum_name;?></b></i></font><br>
Podéis ver un ejemplo de como queda el foro con el index.php modificado de esta forma en la web que estoy haciendo *** Ahora el problema reside en los acentos, en mi foro se utilizará bastante la palabra "barça", pero aun agregando esta palabra en las censuras y reemplazándola por "barcelona" el script de "últimos mensajes" sigue escribiendo "bar(símbolo raro)a" yo me pregunto... existe alguna forma posible para poder evitar que se produzca este problema? He leído algunos cosas sobre una función de carácteres ascii que he encontrado mysql_query("SET character_set_connection=utf8, character_set_results=latin1, character_set_client=binary"); pero si meto esto me da error. Tambien decir que proximamente intentaré mejorar el script este de últimos mensajes adaptando la parter HTML para que se integre en el foro de forma que los últimos mensajes se encuentren dentro de las tablas azules del foro con el fondo de color gris y lo publicaré cuando lo termine. (aunque si alguien tiene un código que haga algo similar directamente pegándolo al index.php agradecería si me lo pudiera mandar por e-mail a: *** Gracias.

Última edición por alexfs; 17/05/2008 a las 05:13
  #2 (permalink)  
Antiguo 11/04/2008, 13:04
 
Fecha de Ingreso: junio-2007
Ubicación: En mi casa
Mensajes: 82
Antigüedad: 16 años, 9 meses
Puntos: 2
Re: Últimos posts en PHPBB3 (Solución completa) Pero problemas con carácteres especia

Ya está, acabo de solucionar el problema de los acentos y carácteres especiales con la función htmlentities, por lo que deberíamos reemplazar echo $mostrar_m["topic_title"]; por echo htmlentities($mostrar_m["topic_title"]); ahora el problema que he visto es, que meta donde meta el código, los últimos mensajes siempre aparecerán arriba de todo, se que la página principal del foro phpbb está compuesta por 3 partes principales: index_body.html, overall_header.html y overall_footer.html, pero es que por increible que parezca, puedo cambiar el nombre de estos archivos por FTP, meterles cualquier parte de código o lo que sea, que el foro siempre estará igual, no hace efecto si modifico estos archivos, y esto que miro bién de modificar los de mi tema (en este caso el prosilver). Gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 00:32.