Página 1 de 1

Problema al crear una función

Publicado: 30 May 2010, 19:27
por barje
Buenas. Estoy tratando de crear una función que recoja la información de los foros a los que se ha suscrito un usuario para que al pulsar un enlace que he creado (por ej, foros suscritos) muestre sólo los foros a los que ese usuario se ha suscrito. Se trataría, en esencia, de sustituir la página de inicio por una página en la que sólo se muestren los foros a los que esté suscrito.
Para ello he creado esta función:

Código: Seleccionar todo

function subscribed()
{	
	global $config, $db, $user, $auth, $template, $phpbb_root_path, $phpEx;
	$forbidden_forums = $auth->acl_getf('!f_read', true);
	$forbidden_forums = array_unique(array_keys($forbidden_forums));
	$sql_array = array(
	'SELECT'	=> 'f.*',
	'FROM'		=> array(
		FORUMS_WATCH_TABLE	=> 'fw',
		FORUMS_TABLE		=> 'f'
	),
	'WHERE'		=> 'fw.user_id = ' . $user->data['user_id'] . '
		AND f.forum_id = fw.forum_id
		AND ' . $db->sql_in_set('f.forum_id', $forbidden_forums, true, true),
	'ORDER BY'	=> 'left_id'
	);
	$sql = $db->sql_build_query('SELECT', $sql_array);
	$result = $db->sql_query($sql);
	while($row = $db->sql_fetchrow($result))
	{
		$res=$row['forum_id'];
	}
	$db->sql_freeresult($result);
}
Sé que la función funciona porque recoge la información. $row muestra todos los datos del foro suscrito y $res muestra los forum_id de esos foros. El problema que tengo es que no sé como hacer para que se muestre esta información.
Intento pasar esta información a una plantilla mediante:

Código: Seleccionar todo

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

$template->assign_var(array(
	'S_SUBSCRIBED'		=> $s_subscribed,
));	
$template->set_filenames(array(
	'body' => 'subscribed.html'
	)
);
pero no pasa la información.
subscribed.html es una copia de forumlist_body.html en la que he añadido condicionales <!-- IF S_SUBSCRIBED --> en algunas partes del código. Mis conocimientos son limitados, aún así creo que se debe a que $template->assign_var(array('S_SUBSCRIBED' => $s_subscribed,)); no ofrece ningún resultado.

¿Alguna ayuda?

Re: Problema al crear una función

Publicado: 31 May 2010, 07:03
por jakk
tu estas usando esto:

Código: Seleccionar todo

<!-- IF S_SUBSCRIBED -->
como tu dices es una condicional, pero para que condicione debes pasarle un parametro, o true o false
y la forma de darle la salida seria

Código: Seleccionar todo

$template->assign_var('S_SUBSCRIBED', true);
de todas formas no se veria nada, ya que lo que hace es condicionar a que si esta subscrito se lo muestre , pero debe tener otra variable con el contenido

creo que en tu caso seria

Código: Seleccionar todo

$template->assign_vars(array(
   'S_SUBSCRIBED'      => $s_subscribed,
));   
y dandole una salida en el html del tipo

Código: Seleccionar todo

{S_SUBSCRIBED}
solo con esta segunda parte deberia funcionarte, si quieres hacerlo completo debes declarar 2 variables, una para la condicional y otra para el contenido
espero que me hayas entendido algo
seria algo como esto

Código: Seleccionar todo

$template->assign_vars(array(
  'S_USER_SUBSCRIBED' => true,
   'S_SUBSCRIBED'      => $s_subscribed,
));   
y en el html

Código: Seleccionar todo

<!-- IF S_USER_SUBSCRIBED -->
{S_SUBSCRIBED}
<!-- ENDIF -->
o incluso podrias hacer un else

Código: Seleccionar todo

<!-- IF S_USER_SUBSCRIBED -->
{S_SUBSCRIBED}
<!-- ELSE -->
y aqui lo que fuera
<!-- ENDIF -->

Re: Problema al crear una función

Publicado: 01 Jun 2010, 00:00
por barje
Hola jakk, te agradezco enormemente tu ayuda, sin embargo no funciona.
El primer problema es que al hacer que 'S_USER_SUBSCRIBED' => true se va a mostrar contenido siempre puesto que la información que pasa es que todos los usuarios están suscritos. En realidad este tema ya lo tenía solucionado con otra función, que calcula si el usuario está suscrito al menos a un foro:

Código: Seleccionar todo

// función para saber si el usuario está suscrito a algún foro
function subscribedf()
{	
	global $user, $db, $auth;
	$sql_array = array(
	'SELECT'	=> 'forum_id',
	'FROM'		=> array(
		FORUMS_WATCH_TABLE	=> 'fw'
	),
	'WHERE'		=> 'fw.user_id = ' . $user->data['user_id']
	);
	$sql = $db->sql_build_query('SELECT', $sql_array);
	$result = $db->sql_query($sql);
	if ($row = $db->sql_fetchrow($result))
	{
		return true;
	}
	$db->sql_freeresult($result);
}
$s_subscribedf = subscribedf();
// fin de la función
Con esta función sí puedo pasar la información mediante 'S_USER_SUBSCRIBED' => $s_subscribedf, puesto que devuelve true o false. He comprobado que funciona perfectamente, aunque sería ideal no tener que utilizar dos funciones con dos consultas a la base de datos.

Así que sigo con el mismo problema, cómo pasar la información que calcula la función subscribed(). En este caso me encuentro con dos dificultades. Tal y como está escrita sólo pasaría la información del último foro al que se haya suscrito, no sé como hacer un array con la información de todos los subforos suscritos. La segunda dificultad es pasar la información necesaria al html, que en realidad lo que debe mostrar es {L_FORUM}, {L_TOPICS}, {L_POSTS} o {L_LAST_POST} entre otras.

Re: Problema al crear una función

Publicado: 01 Jun 2010, 00:41
por jakk
es en lo que me quede pensando ayer despues de irme, que no te funcionaria, puesto que debes pasar cada valor a mostrar en una variable diferente
que seria algo de este estilo
$template->assign_vars(array(
'S_FORUM' => $row['forum_id'],
'S_TOPICS' => $row['topic_id']
y seguiria , pero debes pasarle todos los parametros a usar
));

pero hay algo que no me queda demasiado claro, la funcion esta en un archivo diferente al que intentas pasar la funcion?, me refiereo a por ejemplo si la funcion esta en includes/functions.php y tu estas intentando usar esa funcion por ejemplo en el viewforum.php o la funcion esta en el mismo archivo en la que intentas usarla?

yo tampoco soy ningun experto, por eso tampoco puedo decirte la solucion con la exactitud que me gustaria, puedes consultar la documentacion de phpbb, aunke esta en ingles, pero igual te sirve de algo , o sino mirarte algun tutorial de php

Re: Problema al crear una función

Publicado: 01 Jun 2010, 11:57
por barje
jakk escribió:pero hay algo que no me queda demasiado claro, la funcion esta en un archivo diferente al que intentas pasar la funcion?, me refiereo a por ejemplo si la funcion esta en includes/functions.php y tu estas intentando usar esa funcion por ejemplo en el viewforum.php o la funcion esta en el mismo archivo en la que intentas usarla?

yo tampoco soy ningun experto, por eso tampoco puedo decirte la solucion con la exactitud que me gustaria, puedes consultar la documentacion de phpbb, aunke esta en ingles, pero igual te sirve de algo , o sino mirarte algun tutorial de php
Lo primero que he hecho es crear un enlace en el index hacia una página que se llama /subscribed.php. Esa página es una copia de /index.php con la única modificación de solicitar una plantilla llamada subscribed.html (en vez de index_body.html), que llama mediante include a forumlist_subscribed_body.html, que es una copia modificada de forumlist_body.html. La función está en subscribed.php, no en includes/functions.php.

He estado leyendo la documentación de phpbb y consultando manuales de php pero no me aclaro demasiado. Y lo gracioso es que lo que intento hacer ya lo hace phpbb3, pero en otro sitio. En el UCP hay un apartado donde se muestran los foros a los que uno está suscrito. Es decir, que lo único que quiero es cambiar el modo de presentación que hace el UCP de los foros suscritos, lo que yo quiero es que se muestren como en el index. Seguro que es una chorrada y que alguien con un poco de experiencia lo resuelve en 5 minutos, pero yo llevo liado más de un mes y me veo incapaz.

Gracias por la ayuda.