Problemas casilla multiselección en post_legacy

Nanda Seguir

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
19 May 2010
Mensajes
76
Problemas casilla multiselección en postbit_legacy

Yo tengo un problema relacionado con este campo.

Resulta que cree una casilla multi-selección para poner "Mis Grupos", y la lista de grupos, etc, todo bien por esa parte, los grupos aparecen en el perfil y todo.

Pero yo quiero que la lista de grupos a los que perteneces tb aparesca en el post_legacy, y puse esto en la plantilla:

HTML:
[IMG]file:///C:/DOCUME%7E1/ADMINI%7E1/CONFIG%7E1/Temp/moz-screenshot.png[/IMG][IMG]file:///C:/DOCUME%7E1/ADMINI%7E1/CONFIG%7E1/Temp/moz-screenshot-1.png[/IMG]<!--  Inicio Mis Grupos -->
<vb:if condition="$post[field9]">
<div class="pbit"> 
<dt>Mis Grupos ♥</dt> 
<dd>{vb:raw post.field9}</dd>
</div>
</vb:if>
<!-- Fin Mis Grupos -->
Pero lo que me sale es ésto:

Ver el archivo adjunto 3709

Osea, me sale unos numeros en lugar de los nombres de los grupos, qué estaré haciendo mal en la plantilla? D':

Gracias! <3
 

Marco

1
Zeta
Verificación en dos pasos activada
Suscripción a IA
Desde
1 Jul 2009
Mensajes
1.514
Umm, Analizando el codigo, todo lo veo bien, es raro.

Estas Segura que el Field es el 9 así como lo tienes? "field9"
Verifica

Por cierto, no es "post_legacy" el nombre de la plantilla, el Nombre de la plantailla es "postbit_legacy" ;)
 

Nanda

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
19 May 2010
Mensajes
76
Si, ya lo tengo revisado :D... pero aún así solo aparecen números T___T </3

Gracias por el dato :D
 

Nanda

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
19 May 2010
Mensajes
76
Ninguno [Renombrar]
2.
move_up.gif
move_down.gif
Karaoke Fan Club [Renombrar]
3.
move_up.gif
move_down.gif
Kanan [Renombrar]
4.
move_up.gif
move_down.gif
Umi no Kami [Renombrar]
5.
move_up.gif
move_down.gif
Mirotics [Renombrar]
6.
move_up.gif
move_down.gif
Musumérida [Renombrar]
7.
move_up.gif
move_down.gif
Amai Love [Renombrar]
8.
move_up.gif
IA Psychedelic Orchestra [Renombrar]
 

Andrés Durán

Xi
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
23 Abr 2009
Mensajes
4.371
Hola Nanda.

El problema con esos campos de perfil es que se almacenan en la base de datos utilizando un "esquema binario" para almacenar los valores seleccionados. El método convencional no te funcionará, tendrás que utilizar algo como esto:

Insertar CODE, HTML o PHP:
<!-- Inicio de Campo Multi selección -->

                    <vb:if condition="$comma = ''"></vb:if>
<dt>[COLOR=Red][B]Nombre del campo[/B][/COLOR]</dt> <dd>
                    <vb:if condition="$post['field[COLOR=Blue][B]X[/B][/COLOR]'] & 1">
                        {vb:raw comma} Karaoke Fan Club
                        <vb:if condition="$comma = ','"></vb:if>
                    </vb:if>
                    <vb:if condition="$post['field[COLOR=Blue][B]X[/B][/COLOR]'] & 2">
                        {vb:raw comma} Kanan
                        <vb:if condition="$comma = ','"></vb:if>
                    </vb:if>
                    <vb:if condition="$post['field[COLOR=Blue][B]X[/B][/COLOR]'] & 4">
                        {vb:raw comma} Umi no Kami
                        <vb:if condition="$comma = ','"></vb:if>
                    </vb:if>
                    <vb:if condition="$post['field[COLOR=Blue][B]X[/B][/COLOR]'] & 8">
                        {vb:raw comma} Mirotics
                        <vb:if condition="$comma = ','"></vb:if>
                    </vb:if>
                    <vb:if condition="$post['field[COLOR=Blue][B]X[/B][/COLOR]'] & 16">
                        {vb:raw comma} Musumérida
                        <vb:if condition="$comma = ','"></vb:if>
                    </vb:if>
                    <vb:if condition="$post['field[COLOR=Blue][B]X[/B][/COLOR]'] & 32">
                        {vb:raw comma} Amai Love
                        <vb:if condition="$comma = ','"></vb:if>
                    </vb:if>
                    <vb:if condition="$post['field[COLOR=Blue][B]X[/B][/COLOR]'] & 64">
                        {vb:raw comma} IA Psychedelic Orchestra
                        <vb:if condition="$comma = ','"></vb:if>
                    </vb:if>
                                        </dd>

<!-- Fin de Campo Multi selección -->

En donde Nombre del campo será el texto que desees mostrar (por ejemplo, Mensajes:), y X el ID del campo.

Saludos.
 

Nanda

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
19 May 2010
Mensajes
76
Entonces dejame entender... eso lo pongo en la plantilla postbit_legacy justo donde quiero que aparesca, y sustituyo los valores que mencionas?
 

Andrés Durán

Xi
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
23 Abr 2009
Mensajes
4.371
Ok, paso a explicarte, que ayer ya era un poco tarde :).

Los campos de selección múltiple presentan un problema cuando tratas de mostrar sus valores en el postbit. Si utilizas el método que has descrito en el primer mensaje de este tema, lo que obtendrás será un número en lugar de los valores seleccionados por los usuarios. Esto se debe al método que se utiliza para almacenar en la base de datos los valores seleccionados por el usuario.

Los campos de selección múltiple utilizan un esquema binario para almacenar los valores seleccionados. Cada opción está dada por un valor numérico, algo como esto:

Opción 1 = 2^0 = 1
Opción 2 = 2^1 = 2
Opción 3 = 2^2 = 4
Opción 4 = 2^3 = 8
Opción 5 = 2^4 = 16
Opción 6 = 2^5 = 32
Opción 7 = 2^6 = 64
Opción 8 = 2^7 = 128
Opción 9 = 2^8 = 256
Opción 10 = 2^9 = 512

etc.

Fíjate que cada número es una potencia de 2. Si miraras el valor almacenado para un campo de selección múltiple en formato binario natural, entonces cada bit representaría una de las opciones en el campo de selección múltiple. Por ejemplo, si un usuario seleccionó las opciones 2 y 6, entonces el valor almacenado sería la suma del resultado de las dos potencias para cada opción. Osea, según el esquema anterior, se sumaría 2 y 32. Éste será el número mostrado en el postbit.

Actualmente no existe una manera de "traducir" esos valores y mostrar en el postbit las opciones seleccionadas por el usuario, en lugar de un número. Sin embargo, existe la posibilidad de utilizar una serie de condiciones para revisar por cada bit almacenado en la base de datos, y posteriormente mostrar el código apropiado para cada opción. La condición (para vBulletin 4) sería:

Insertar CODE, HTML o PHP:
<vb:if condition="$post['field[B][COLOR=Red]X[/COLOR][/B]'] [B][COLOR=DarkGreen]&[/COLOR][/B] [B][COLOR=Blue]1[/COLOR][/B]">
    CÓDIGO A MOSTRAR SI LA OPCIÓN [B][COLOR=DarkRed]1[/COLOR][/B] HA SIDO SELECCIONADA
</vb:if>
<vb:if condition="$post['field[B][COLOR=Red]X[/COLOR][/B]'] [B][COLOR=DarkGreen]&[/COLOR][/B] [B][COLOR=Blue]2[/COLOR][/B]">
    CÓDIGO A MOSTRAR SI LA OPCIÓN [B][COLOR=DarkRed]2[/COLOR][/B] HA SIDO SELECCIONADA
</vb:if>
<vb:if condition="$post['field[B][COLOR=Red]X[/COLOR][/B]'] [B][COLOR=DarkGreen]&[/COLOR][/B] [B][COLOR=Blue]4[/COLOR][/B]">
    CÓDIGO A MOSTRAR SI LA OPCIÓN [B][COLOR=DarkRed]3[/COLOR][/B] HA SIDO SELECCIONADA
</vb:if>
<vb:if condition="$post['field[B][COLOR=Red]X[/COLOR][/B]'] [B][COLOR=DarkGreen]&[/COLOR][/B] [B][COLOR=Blue]8[/COLOR][/B]">
    CÓDIGO A MOSTRAR SI LA OPCIÓN [B][COLOR=DarkRed]4[/COLOR][/B] HA SIDO SELECCIONADA
</vb:if>
<vb:if condition="$post['field[B][COLOR=Red]X[/COLOR][/B]'] [B][COLOR=DarkGreen]&[/COLOR][/B] [B][COLOR=Blue]16[/COLOR][/B]">
    CÓDIGO A MOSTRAR SI LA OPCIÓN [B][COLOR=DarkRed]5[/COLOR][/B] HA SIDO SELECCIONADA
</vb:if>
<vb:if condition="$post['field[B][COLOR=Red]X[/COLOR][/B]'] [B][COLOR=DarkGreen]&[/COLOR][/B] [B][COLOR=Blue]32[/COLOR][/B]">
    CÓDIGO A MOSTRAR SI LA OPCIÓN [B][COLOR=DarkRed]6[/COLOR][/B] HA SIDO SELECCIONADA
</vb:if>
<vb:if condition="$post['field[B][COLOR=Red]X[/COLOR][/B]'] [B][COLOR=DarkGreen]&[/COLOR][/B] [B][COLOR=Blue]64[/COLOR][/B]">
    CÓDIGO A MOSTRAR SI LA OPCIÓN [B][COLOR=DarkRed]7[/COLOR][/B] HA SIDO SELECCIONADA
</vb:if>
<vb:if condition="$post['field[B][COLOR=Red]X[/COLOR][/B]'] [B][COLOR=DarkGreen]&[/COLOR][/B] [B][COLOR=Blue]128[/COLOR][/B]">
    CÓDIGO A MOSTRAR SI LA OPCIÓN [B][COLOR=DarkRed]8[/COLOR][/B] HA SIDO SELECCIONADA
</vb:if>
<vb:if condition="$post['field[B][COLOR=Red]X[/COLOR][/B]'] [B][COLOR=DarkGreen]&[/COLOR][/B] [B][COLOR=Blue]256[/COLOR][/B]">
    CÓDIGO A MOSTRAR SI LA OPCIÓN [B][COLOR=DarkRed]9[/COLOR][/B] HA SIDO SELECCIONADA
</vb:if>
<vb:if condition="$post['field[B][COLOR=Red]X[/COLOR][/B]'] [B][COLOR=DarkGreen]&[/COLOR][/B] [B][COLOR=Blue]512[/COLOR][/B]">
    CÓDIGO A MOSTRAR SI LA OPCIÓN [B][COLOR=DarkRed]10[/COLOR][/B] HA SIDO SELECCIONADA
</vb:if>
En el esquema anterior, esa serie de condiciones evalúan si la opción # ha sido seleccionada, leyendo el bit binario desde la base de datos. El símbolo Amperson ( & ) es un operador "bit a bit".

Cabe destacar que hay que especificar el ID del campo (la letra X, en el esquema anterior), de lo contrario se devolverá en la plantilla postbit una línea de código incorrecta.


Para tu caso, Nanda, yo he personalizado un poco el código que has de colocar en el postbit, para que cada opción a mostrar sea precedida por una "coma" ( , ). Paso a explicarlo:

Insertar CODE, HTML o PHP:
<!-- Inicio de Campo Multi selección -->

                    <vb:if condition="$comma = ''"></vb:if>
<dt>Nombre del campo</dt> <dd>
                    <vb:if condition="$post['fieldX'] & 1">
                        {vb:raw comma} Karaoke Fan Club
                        <vb:if condition="$comma = ','"></vb:if>
                    </vb:if>
                    <vb:if condition="$post['fieldX'] & 2">
                        {vb:raw comma} Kanan
                        <vb:if condition="$comma = ','"></vb:if>
                    </vb:if>
                    <vb:if condition="$post['fieldX'] & 4">
                        {vb:raw comma} Umi no Kami
                        <vb:if condition="$comma = ','"></vb:if>
                    </vb:if>
                    <vb:if condition="$post['fieldX'] & 8">
                        {vb:raw comma} Mirotics
                        <vb:if condition="$comma = ','"></vb:if>
                    </vb:if>
                    <vb:if condition="$post['fieldX'] & 16">
                        {vb:raw comma} Musumérida
                        <vb:if condition="$comma = ','"></vb:if>
                    </vb:if>
                    <vb:if condition="$post['fieldX'] & 32">
                        {vb:raw comma} Amai Love
                        <vb:if condition="$comma = ','"></vb:if>
                    </vb:if>
                    <vb:if condition="$post['fieldX'] & 64">
                        {vb:raw comma} IA Psychedelic Orchestra
                        <vb:if condition="$comma = ','"></vb:if>
                    </vb:if>
                                        </dd>

<!-- Fin de Campo Multi selección -->
Tú has especificado la siguiente lista de opciones (no sé si "Ninguno" es una opción):

  • Karaoke Fan Club (Valor binario = Opción 1 = 2^0 = 1)
  • Kanan (Valor binario = Opción 2 = 2^1 = 2)
  • Umi no Kami (Valor binario = Opción 3 = 2^2 = 4)
  • Mirotics (Valor binario = Opción 4 = 2^3 = 8)
  • Musumérida (Valor binario = Opción 5 = 2^4 = 16)
  • Amai Love (Valor binario = Opción 6 = 2^5 = 32)
  • IA Psychedelic Orchestra (Valor binario = Opción 7 = 2^6 = 64)


Tomaré una condición del esquema anterior como ejemplo:

Insertar CODE, HTML o PHP:
                    <vb:if condition="$post['field[B][COLOR=DarkSlateBlue]X[/COLOR][/B]'] & [B][COLOR=Purple]1[/COLOR][/B]">
                        [B]{vb:raw comma}[/B] [U]Karaoke Fan Club[/U]
                        [COLOR=DarkOrange]<vb:if condition="$comma = ','"></vb:if>[/COLOR]
                    </vb:if>
X será el ID del campo de perfil.
1 será el valor binario para la opción Karaoke Fan Club (que supongo fue la primer opción que especificaste en el listado).
{vb:raw comma} será la variable devuelta por la condición <vb:if condition="$comma = ','"></vb:if>
Karaoke Fan Club será el código mostrado en el postbit si el usuario ha elegido la opción 1.

Así que sí, solamente añade ese código en la ubicación del postbit que desees ;). Tienes que añadir tantas condiciones conforme vaya aumentando la cantidad de opciones que añadas en el campo.

Espero que te sea útil. Por favor me haces saber si necesitas alguna otra cosa.
Saludos cordiales. :)
 
Arriba