Recordad que para pedir soporte alguno, debéis facilitar los datos de soporte oportunos por favor, mirad aquí y leer las Normas generales del foro, esto nos servirá de ayuda para dar el mejor soporte..

Gracias.

La Administración de phpBB España.

Problema al crear una función

Foros donde podréis dejar vuestras dudas sobre phpBB 3.0.x
Cerrado
barje
Observador/a
Mensajes: 16
Registrado: 06 Feb 2010, 18:53

Problema al crear una función

#1

Mensaje 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?
Datos de soporte
Spoiler
URL: http://www.vetforum.es
Versión phpBB: phpBB3 (3.0.7-PL1)
MODs Instalados: HighSlide Attachment & IMG MOD 4.1.8
Popup por defecto y Aviso en el header para Nuevos Privados
Cambiar botones de BBcodes de phpBB3 a botones con Imágenes
acp add user mod
advertisement management
anual stars
auto acp redirect
clickable rows
prime ban to group
user reminder
view or mark unreads
Signature Image Check
phpbb gallery
phpbb calendar
Plantilla(s) usada(s): AeroBlue
Servidor: Linux, de pago
Actualización desde otra versión: 3.0.6
Conversión desde otro sistema de foros: no

Avatar de Usuario
jakk
Ex Staff
Mensajes: 2201
Registrado: 14 Jun 2009, 08:57
Edad: 39

Re: Problema al crear una función

#2

Mensaje 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 -->
Antes de nada, lee las Normas de phpBB-Es, y el siempre útil Foro de guías sobre phpBB 3.
Consulta la Documentación de phpBB 2 y phpBB 3 y sus correspondientes FAQS de ayuda.
Administra, modifica, actualiza tu foro con el listado de Guías de nuestra Biblioteca.
Quizás tu duda esté resuelta, y todos ahorremos tiempo.
Si es sobre cómo Crear una Consulta SQL ya lo tienes explicado en el enlace.
En general, se recomienda Buscar antes de preguntar para no repetir preguntas y dudas resueltas.
Sólo tendrás Soporte si facilitas los datos correspondientes y si respetas completamente el Copyright de phpBB.
NOTA: No damos Soporte a los foros integrados en Nuke y derivados del mismo. Infórmate AQUÍ.

[hr]
No doy soporte por MP ni por MSN ni por el Chat
[hr]
© Jakk - www.ivemfinity.com | © chirri23 - www.mundoforeros.com | Foro de Pruebas

barje
Observador/a
Mensajes: 16
Registrado: 06 Feb 2010, 18:53

Re: Problema al crear una función

#3

Mensaje 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.
Datos de soporte
Spoiler
URL: http://www.vetforum.es
Versión phpBB: phpBB3 (3.0.7-PL1)
MODs Instalados: HighSlide Attachment & IMG MOD 4.1.8
Popup por defecto y Aviso en el header para Nuevos Privados
Cambiar botones de BBcodes de phpBB3 a botones con Imágenes
acp add user mod
advertisement management
anual stars
auto acp redirect
clickable rows
prime ban to group
user reminder
view or mark unreads
Signature Image Check
phpbb gallery
phpbb calendar
Plantilla(s) usada(s): AeroBlue
Servidor: Linux, de pago
Actualización desde otra versión: 3.0.6
Conversión desde otro sistema de foros: no

Avatar de Usuario
jakk
Ex Staff
Mensajes: 2201
Registrado: 14 Jun 2009, 08:57
Edad: 39

Re: Problema al crear una función

#4

Mensaje 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
Antes de nada, lee las Normas de phpBB-Es, y el siempre útil Foro de guías sobre phpBB 3.
Consulta la Documentación de phpBB 2 y phpBB 3 y sus correspondientes FAQS de ayuda.
Administra, modifica, actualiza tu foro con el listado de Guías de nuestra Biblioteca.
Quizás tu duda esté resuelta, y todos ahorremos tiempo.
Si es sobre cómo Crear una Consulta SQL ya lo tienes explicado en el enlace.
En general, se recomienda Buscar antes de preguntar para no repetir preguntas y dudas resueltas.
Sólo tendrás Soporte si facilitas los datos correspondientes y si respetas completamente el Copyright de phpBB.
NOTA: No damos Soporte a los foros integrados en Nuke y derivados del mismo. Infórmate AQUÍ.

[hr]
No doy soporte por MP ni por MSN ni por el Chat
[hr]
© Jakk - www.ivemfinity.com | © chirri23 - www.mundoforeros.com | Foro de Pruebas

barje
Observador/a
Mensajes: 16
Registrado: 06 Feb 2010, 18:53

Re: Problema al crear una función

#5

Mensaje 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.
Datos de soporte
Spoiler
URL: http://www.vetforum.es
Versión phpBB: phpBB3 (3.0.7-PL1)
MODs Instalados: HighSlide Attachment & IMG MOD 4.1.8
Popup por defecto y Aviso en el header para Nuevos Privados
Cambiar botones de BBcodes de phpBB3 a botones con Imágenes
acp add user mod
advertisement management
anual stars
auto acp redirect
clickable rows
prime ban to group
user reminder
view or mark unreads
Signature Image Check
phpbb gallery
phpbb calendar
Plantilla(s) usada(s): AeroBlue
Servidor: Linux, de pago
Actualización desde otra versión: 3.0.6
Conversión desde otro sistema de foros: no

Cerrado

Volver a “Foros de Soporte 3.0.x”