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.

Mostrar valores en viewtopicTema Solucionado

Foros donde podréis dejar vuestras dudas sobre phpBB 3.0.x

0
No hay votos
 
Votos totales: 0

Nisakar
Usuario/a
Mensajes: 65
Registrado: 11 Mar 2007, 16:38
Edad: 33

Mostrar valores en viewtopic

#1

Mensaje por Nisakar »

URL: http://www.woc.shinobiswar.com/forums/
Versión phpBB: phpBB3 (3.0.8)
MODs Instalados:
Advanced BBCode Box 3 - Categorize Announcements and Stickies
Default Topic Icon - External Links in Rokbox
Genders - Legend Repositioning
Live Preview - Log connections
Login After Activation - Moderator Needed
NV advanced last topic titles - Post Expire
Post First Before Voting - Prime Instant Redirect
Prime Links - Share Topic
Show Banned Status - Simple Profile Comments
User's notes - jQuery Quick Edit
Plantilla(s) usada(s): prosilver
Servidor: Linux, gratuíto
Actualización desde otra versión: No
Conversión desde otro sistema de foros: No

Buenas, llevo la tarde intentando hacer algo que segun yo, era muy sencillo...pero el propio código de phpbb3 me lo ha complicado todo o no se que es lo que puñetas hace. Quizás es la consulta que no la estoy haciendo bien pero bueno, aqui dejo el código PHP:

Código: Seleccionar todo

	if( $row['fx_id'] != $poster_id ) {
		$user->add_lang('mods/ficha');
		
		$sql = 'SELECT u.user_id, u.username, u.user_sheet, f.* 
				FROM ' . USER_FICHA . ' as f
				LEFT JOIN ' . USERS_TABLE . ' as u ON f.fx_id = u.user_id
				WHERE fx_id = ' . $poster_id;
		$result = $db->sql_query($sql);
		$row = $db->sql_fetchrow($result);
			$ficha = $row['user_sheet'];
			$fuerza = ( is_null($row['fx_fuerza']) ) ? '0' : $row['fx_fuerza'];
			
			$template->assign_vars(array(
				'FICHA'			=> "Ficha de Personaje",
				'FUERZA'		=> $fuerza,
				'DESTREZA'		=> $row['fx_destreza'],
				'RESISTENCIA'	=> $row['fx_resistencia'],
				'INTELIGENCIA'	=> $row['fx_inteligencia'],
				'VOLUNTAD'		=> $row['fx_voluntad'],
				'VIDA'			=> $row['fx_fuerza'] + $row['fx_destreza'] + $row['fx_resistencia'],
				'CHAKRA'		=> $row['fx_inteligencia'] + $row['fx_perspicacia'] + $row['fx_voluntad'])
			);
	} else {
		$template->assign_vars(array(
				'FICHA'			=> "No tiene ficha")
		);
	}
Lo que pretendo hacer es mostrar eso, en el perfil al ver un tema. El caso es que la variable $row devuelve todo un valor NULL, seguramente porque la consulta la hago bien (nunca se me a dado bien utilizar el LEFT JOIN) pero pense en dejarlo para luego y hice el if que está allí:

Código: Seleccionar todo

$fuerza = ( is_null($row['fx_fuerza']) ) ? '0' : $row['fx_fuerza'];
Entonces, se supone que al poner en el template {FUERZA} deberia salir un 0 pero no sale nada! En el propio archivo PHP he hecho lo siguiente:

Código: Seleccionar todo

var_dump($fuerza);
die();
Y si sale el valor 0! Porque no muestra el valor en la plantilla? Si la de {FICHA} si que lo imprime...

Código: Seleccionar todo

			<dd style="padding-left: 10px; font-size: 12px;"><strong>{FICHA}</strong/></dd>
				<hr>
			<dd>{L_DESTREZA}</dd>
			<dd><strong>{L_FUERZA}</strong> {FUERZA}</dd>
Ese es el código HTML, por si el error esta allí aunque no creo e__e y como dije, FICHA si se muestra pero FUERZA no...las de lenguaje tambien se muestran...

A ver si alguien puede ayudarme, algo tengo que estar haciendo mal...aunque no tengo ni idea de el que y llevo horas probando cosas distintas...

Avatar de Usuario
leviatan21
Ex Staff
Mensajes: 8279
Registrado: 26 Mar 2008, 20:06
Género:
Edad: 55

Mostrar valores en viewtopic

#2

Mensaje por leviatan21 »

Intenta comprobando si el campo fx_fuerza tiene valor, de esta forma :

Código: Seleccionar todo

'FUERZA'        => (isset($row['fx_fuerza']) && ($row['fx_fuerza'])) ? $row['fx_fuerza'] : '0', 
Normas de phpBB España | Normas de Soporte
No doy soporte por privado : tenga en cuenta que su problema, también puede ser el problema de otro usuario.
Cualquier mensaje privado no solicitado será ignorado :twisted:

"Education is what remains after one has forgotten everything he learned in school" - Albert Einstein

Nisakar
Usuario/a
Mensajes: 65
Registrado: 11 Mar 2007, 16:38
Edad: 33

Re: Mostrar valores en viewtopic

#3

Mensaje por Nisakar »

Me cawen la leche, ahora entro y si que sale? En fin...despues de estar toda la tarde probando cosas, borrando cache, hasta la del navegador y ahora abri la página y funciona ._.

En cuanto a la consulta, sabrias decirme si ves algo mal? Porque puede ser que devuelva valor NULL? Si imprimo la consulta, sale todo bien, incluida la variable del poster...asi al menos soluciono algo y no me siento como un tonto, es la primera vez que me pasa esto...

Avatar de Usuario
leviatan21
Ex Staff
Mensajes: 8279
Registrado: 26 Mar 2008, 20:06
Género:
Edad: 55

Re: Mostrar valores en viewtopic

#4

Mensaje por leviatan21 »

En general el código está correcto, mucho de como comprobar el valor de fx_fuerza va a depender de que tipo de columna es, numérica, logica, etc
Normas de phpBB España | Normas de Soporte
No doy soporte por privado : tenga en cuenta que su problema, también puede ser el problema de otro usuario.
Cualquier mensaje privado no solicitado será ignorado :twisted:

"Education is what remains after one has forgotten everything he learned in school" - Albert Einstein

Nisakar
Usuario/a
Mensajes: 65
Registrado: 11 Mar 2007, 16:38
Edad: 33

Re: Mostrar valores en viewtopic

#5

Mensaje por Nisakar »

Los he hecho integers con un valor por defecto de 0, asi que deberia mostrar un 0 en lugar de NULL pero en fin, no entiendo nada xD no veo que este nada mal como para devolver NULL

Avatar de Usuario
leviatan21
Ex Staff
Mensajes: 8279
Registrado: 26 Mar 2008, 20:06
Género:
Edad: 55

Mostrar valores en viewtopic

#6

Mensaje por leviatan21 »

Prueba mostrarlo así :

Código: Seleccionar todo

                'FUERZA'        => (int) $row['fx_fuerza'], 
O reemplazando :

Código: Seleccionar todo

			$fuerza = ( is_null($row['fx_fuerza']) ) ? '0' : $row['fx_fuerza'];
por esto :

Código: Seleccionar todo

			$fuerza = (isset($row['fx_fuerza'])) ? (int) $row['fx_fuerza'] : 0;
Normas de phpBB España | Normas de Soporte
No doy soporte por privado : tenga en cuenta que su problema, también puede ser el problema de otro usuario.
Cualquier mensaje privado no solicitado será ignorado :twisted:

"Education is what remains after one has forgotten everything he learned in school" - Albert Einstein

Nisakar
Usuario/a
Mensajes: 65
Registrado: 11 Mar 2007, 16:38
Edad: 33

Re: Mostrar valores en viewtopic

#7

Mensaje por Nisakar »

Uhmm, ahora muestra un 0 en lugar de dejarlo vacio pero continua el mismo problema. Todos los valores que devuelve la consulta son NULL, veo que (int) lo que hace es darle un numero entero entonces al ser NULL muestra el 0 pero el valor por defecto de fuerza lo he cambiado a 1 y sigue mostrando 0 e__e lo que busco es que deje de devolver NULL y que devuelva lo que tiene que devolver.

Tambien he probado esto

Código: Seleccionar todo

	$sql = 'SELECT * FROM ' . USER_FICHA;
	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	echo 'asd' . $row['fx_nexp'];
para ver si el problema estaba en el LEFT JOIN, que lo estaba haciendo mal de alguna forma o algo asi pero tambien devuelve NULL :S asi que ya no entiendo nada.

Avatar de Usuario
leviatan21
Ex Staff
Mensajes: 8279
Registrado: 26 Mar 2008, 20:06
Género:
Edad: 55

Mostrar valores en viewtopic

#8

Mensaje por leviatan21 »

Puede ser que la consulta no de resultados, que es lo que puede suceder si en esta parte, no hay coincidencias :

Código: Seleccionar todo

WHERE fx_id = ' . $poster_id;
Habría que agregar un chequeo extra, algo así :

Código: Seleccionar todo

    if( $row['fx_id'] == $poster_id )
    {
        $user->add_lang('mods/ficha');
        
        $sql = 'SELECT u.user_id, u.username, u.user_sheet, f.* 
                FROM ' . USER_FICHA . ' as f
                LEFT JOIN ' . USERS_TABLE . ' as u ON f.fx_id = u.user_id
                WHERE fx_id = ' . $poster_id;
        $row = $db->sql_fetchrow($result);
        $db->sql_freeresult($result);

        if ($row)
        {
            $fuerza = (isset($row['fx_fuerza'])) ? (int) $row['fx_fuerza'] : 0;

            $template->assign_vars(array(
                'FICHA'            => "Ficha de Personaje",
                'FUERZA'        => ((int) $row['fx_fuerza']) ? $row['fx_fuerza'] : '0',
                'FUERZA'        => (int) $row['fx_fuerza'],
                'FUERZA'        => $fuerza,
                'DESTREZA'        => $row['fx_destreza'],
                'RESISTENCIA'    => $row['fx_resistencia'],
                'INTELIGENCIA'    => $row['fx_inteligencia'],
                'VOLUNTAD'        => $row['fx_voluntad'],
                'VIDA'            => $row['fx_fuerza'] + $row['fx_destreza'] + $row['fx_resistencia'],
                'CHAKRA'        => $row['fx_inteligencia'] + $row['fx_perspicacia'] + $row['fx_voluntad'])
            );
        }
    }
    else
    {
        $template->assign_var('FICHA', "No tiene ficha");
    } 
Normas de phpBB España | Normas de Soporte
No doy soporte por privado : tenga en cuenta que su problema, también puede ser el problema de otro usuario.
Cualquier mensaje privado no solicitado será ignorado :twisted:

"Education is what remains after one has forgotten everything he learned in school" - Albert Einstein

Avatar de Usuario
leviatan21
Ex Staff
Mensajes: 8279
Registrado: 26 Mar 2008, 20:06
Género:
Edad: 55

Re: Mostrar valores en viewtopic

#9

Mensaje por leviatan21 »

Aunque debería preguntarte de donde sacas el primer valor de $row['fx_id'] para haces esto :

Código: Seleccionar todo

if( $row['fx_id'] == $poster_id )
Normas de phpBB España | Normas de Soporte
No doy soporte por privado : tenga en cuenta que su problema, también puede ser el problema de otro usuario.
Cualquier mensaje privado no solicitado será ignorado :twisted:

"Education is what remains after one has forgotten everything he learned in school" - Albert Einstein

Nisakar
Usuario/a
Mensajes: 65
Registrado: 11 Mar 2007, 16:38
Edad: 33

Re: Mostrar valores en viewtopic

#10

Mensaje por Nisakar »

leviatan21 escribió:Aunque debería preguntarte de donde sacas el primer valor de $row['fx_id'] para haces esto :

Código: Seleccionar todo

if( $row['fx_id'] == $poster_id )
Si, si, lo tenia de la otra forma para poder ver bien estadisticas y luego arriba hacia una consulta sin comparación que tambien me daba NULL...pero ya he hecho bien el IF y ahor asi funciona :\ Lo cual no entiendo porque la consulta sin WHERE y que estaba fuera del IF tambien daba NULL pero bueno...

El fx_id es para poder comparar con la id de usuario y asi mostrar las estadisticas solo del usuario que toca. Por eso comparaba en la consulta con $poster_id, para que se viera las estadisticas de cada user...el problema es que se muestra las estadisticas del primero, en todos los usuarios...supongo que tendre que hacer un bucle. Me tocará ir probando a ver si consigo que funcione bien esto...

Gracias por la ayuda leviatan ^^

Avatar de Usuario
leviatan21
Ex Staff
Mensajes: 8279
Registrado: 26 Mar 2008, 20:06
Género:
Edad: 55

Mostrar valores en viewtopic

#11

Mensaje por leviatan21 »

Nisakar escribió:el problema es que se muestra las estadisticas del primero, en todos los usuarios...supongo que tendre que hacer un bucle. Me tocará ir probando a ver si consigo que funcione bien esto...
Imagino que esto es para el archivo viewtopic.php

Prueba de esta manera :

Buscar :

Código: Seleccionar todo

    // Dump vars into template 
Antes, agregar :

Código: Seleccionar todo

    if ($row['fx_id'] == $poster_id)
    {
    //    $user->add_lang('mods/ficha');

        $sql_fx = 'SELECT u.user_id, u.username, u.user_sheet, f.* 
                FROM ' . USER_FICHA . ' as f 
                    LEFT JOIN ' . USERS_TABLE . ' as u ON f.fx_id = u.user_id
                WHERE fx_id = ' . (int) $poster_id;
        $result_fx = $db->sql_query($sql_fx);
        $row_fx = $db->sql_fetchrow($result_fx);
        $db->sql_freeresult($result_fx);

        if ($row_fx)
        {
            $fuerza = (isset($row['fx_fuerza'])) ? (int) $row['fx_fuerza'] : 0;

            $fx_row = array(
                'FICHA'            => "Ficha de Personaje",
                'FUERZA'        => $fuerza,
                'DESTREZA'        => $row['fx_destreza'],
                'RESISTENCIA'    => $row['fx_resistencia'],
                'INTELIGENCIA'    => $row['fx_inteligencia'],
                'VOLUNTAD'        => $row['fx_voluntad'],
                'VIDA'            => $row['fx_fuerza'] + $row['fx_destreza'] + $row['fx_resistencia'],
                'CHAKRA'        => $row['fx_inteligencia'] + $row['fx_perspicacia'] + $row['fx_voluntad'],
            );

            $postrow = array_merge($postrow, $fx_row);
        }
        else
        {
            $template->assign_var('FICHA', "No tiene ficha");
        }
    } 
Y en la plantilla lo utilizas como otro campo del usuario :

Código: Seleccionar todo

postrow.FICHA

Código: Seleccionar todo

postrow.FUERZA
etc
Normas de phpBB España | Normas de Soporte
No doy soporte por privado : tenga en cuenta que su problema, también puede ser el problema de otro usuario.
Cualquier mensaje privado no solicitado será ignorado :twisted:

"Education is what remains after one has forgotten everything he learned in school" - Albert Einstein

Nisakar
Usuario/a
Mensajes: 65
Registrado: 11 Mar 2007, 16:38
Edad: 33

Re: Mostrar valores en viewtopic

#12

Mensaje por Nisakar »

No salen los valores, no hay que usar IF o BEGIN o algo asi tambien en la plantilla? Esque yo llevo un rato tanteando con esto pero no consigo que funcione. He puesto todo tal y como me has dicho y he corregido un errorcillo que creo que se te a pasado, en el array te olvidaste cambiar $row por $row_fx, nop?

En cualquier caso, no funciona >.< no sale nada

Avatar de Usuario
leviatan21
Ex Staff
Mensajes: 8279
Registrado: 26 Mar 2008, 20:06
Género:
Edad: 55

Re: Mostrar valores en viewtopic

#13

Mensaje por leviatan21 »

Nisakar escribió:No salen los valores, no hay que usar IF o BEGIN o algo asi tambien en la plantilla? Esque yo llevo un rato tanteando con esto pero no consigo que funcione. He puesto todo tal y como me has dicho y he corregido un errorcillo que creo que se te a pasado, en el array te olvidaste cambiar $row por $row_fx, nop?

En cualquier caso, no funciona >.< no sale nada
Si olvidé cambiar todos los $row por $row_fx :oops:

Si pudieras pasarme un backup de esa tabla solamente, puedo hacer una prueba mas real, así en el aire es un poco difícil, lo mismo que el código donde sacas el código que comoenté antes :

Código: Seleccionar todo

if( $row['fx_id'] == $poster_id )
Normas de phpBB España | Normas de Soporte
No doy soporte por privado : tenga en cuenta que su problema, también puede ser el problema de otro usuario.
Cualquier mensaje privado no solicitado será ignorado :twisted:

"Education is what remains after one has forgotten everything he learned in school" - Albert Einstein

Nisakar
Usuario/a
Mensajes: 65
Registrado: 11 Mar 2007, 16:38
Edad: 33

Re: Mostrar valores en viewtopic

#14

Mensaje por Nisakar »

http://www.phpbb-es.com/foro/pastebin.p ... view&s=173

Ahí tienes toda la tabla, no esta completa, faltan más campos por crear pero como vi que no funcionaba no los añadí XD igualmente solo necesitas ver los que estoy usando en el perfil, nop? Asi que tampoco creo que importe o,o

Gracias, me estas ayudando bastante ^^ Yo ya habia posteado aqui por el agobio que tenia encima, no me sale ni a patadas esto...
Última edición por Nisakar el 04 Ene 2011, 02:50, editado 1 vez en total.

Avatar de Usuario
leviatan21
Ex Staff
Mensajes: 8279
Registrado: 26 Mar 2008, 20:06
Género:
Edad: 55

Mostrar valores en viewtopic  Tema Solucionado

#15

Mensaje por leviatan21 »

Aquí tienes algo que te puede llegar a servir, es una función que emula los campos personalizados del ACP :
Primero olvida todo el código anterior, borrarlo del archivo y de tu mente

Buscar :

Código: Seleccionar todo

	// Display not already displayed Attachments for this post, we already parsed them. ;)
Antes, agregar :

Código: Seleccionar todo

    $fx_row = get_user_ficha($poster_id);
    if (isset($fx_row) && sizeof($fx_row))
    {
        foreach ($fx_row as $fx_name => $fx_data)
        {
            $template->assign_block_vars('postrow.ficha', array (
                'NAME'    => $fx_name,
                'VALUE'    => $fx_data,
            ));
        }
    }
    unset($fx_row);
 
Buscar : ( al final del archivo )

Código: Seleccionar todo

 
Antes, agregar :

Código: Seleccionar todo

function get_user_ficha($poster_id)
{
	global $db;

	$poster_id = (int) $poster_id;

	$fx_fields = array();

	$sql_fx = 'SELECT u.user_id, u.username, f.* 
		FROM ' . USERS_TABLE. ' u 
			LEFT JOIN ' . USER_FICHA  . ' f 
				ON f.fx_id = u.user_id
		WHERE fx_id = ' . (int) $poster_id;
	$result_fx = $db->sql_query($sql_fx);
	$row_fx = $db->sql_fetchrow($result_fx);
	$db->sql_freeresult($result_fx);

	if ($row_fx)
	{
		$fx_fields = array(
			'NOMBRE'		=> $row_fx['fx_nombre'],
			'FUERZA'		=> (isset($row_fx['fx_fuerza'])) ? (int) $row_fx['fx_fuerza'] : 0,
			'DESTREZA'		=> $row_fx['fx_destreza'],
			'RESISTENCIA'	=> $row_fx['fx_resistencia'],
			'EXPERIENCIA'	=> $row_fx['fx_exp'],
			'VOLUNTAD'		=> $row_fx['fx_voluntad'],
			'VIDA'			=> $row_fx['fx_fuerza'] + $row_fx['fx_destreza'] + $row_fx['fx_resistencia'],
		);
	}

	return $fx_fields;
}

Abrir :
raíz/styles/TU_ESTILO/template/viewtopic_body.html
Buscar :

Código: Seleccionar todo

        <!-- END custom_fields --> 
Después, agregar :

Código: Seleccionar todo

        <!-- IF .postrow.ficha -->
            <dd>&nbsp;</dd>
            <dd><strong>{L_TIENE_FICHA}:</strong></dd>
            <!-- BEGIN ficha -->
            <!-- IF postrow.ficha.NAME --><dd><strong>{postrow.ficha.NAME}:</strong> {postrow.ficha.VALUE}</dd><!-- ENDIF -->
            <!-- END ficha -->
        <!-- ELSE -->
            <dd>&nbsp;</dd>
            <dd><strong>{L_NO_TIENE_FICHA}:</strong></dd>
        <!-- ENDIF --> 
Espero que te guste y que captes la idea ;)
Normas de phpBB España | Normas de Soporte
No doy soporte por privado : tenga en cuenta que su problema, también puede ser el problema de otro usuario.
Cualquier mensaje privado no solicitado será ignorado :twisted:

"Education is what remains after one has forgotten everything he learned in school" - Albert Einstein

Cerrado

Volver a “Foros de Soporte 3.0.x”