News:

Want to get involved in developing SMF, then why not lend a hand on our github!

Main Menu

SOLO ENTENDIDOS: Problema con dos errores que no puedo solucionar

Started by - = Orfeo = -, November 21, 2009, 02:43:21 AM

Previous topic - Next topic

- = Orfeo = -

Hola amigos SMFianos, tengo dos problemas, esperando que alguno me pueda dar una mano porque yo ya no sé que mas hacer .... :(

Comienzo a detallar ambos:

1) El primero me figura en el log de registro de errores lo siguiente:

2: Invalid argument supplied for foreach()
Archivo: /home/vol10/myhost.com/myuser/mywebpage.com/htdocs/forum/Sources/ArcadeSigsStats_v2.php
Línea: 235


Cuando el campo alrededor de la línea es 235 es el siguiente:
}

}

}

return;

}



function arcade_champs_sig($message)


donde la línea 235 es específicamente la parte "return;", alguien me puede explicar qué me quiere decir dicho texto? o qué esta mal?




2) El segundo problema es el siguiente: En el log de errores figura este error:

8: Undefined index: bbc_before
Archivo: /home/vol10/myhost.com/myuserhost/mywebpage.com/htdocs/forum/Themes/default/languages/Post.spanish_latin.php (main sub template - eval?)
Línea: 1087


Y no entiendo este error, porque este archivo no contiene línea 1087, creo que se queda en la 200 y algo si no mal recuerdo, alguien sabe a qué se debe? y creo que se inicia cuando quiero hacer algún preview en una respuesta, de esos preview que se realizan sin actualizar la página (F5), la verdad no entiendo ambos errores... Uso SMF 1.1.10 y estoy en la duda con ambos :S ayuda por favor!  :'(

Pedi que me borren

Borra el log de errores y pone el foro en ingles...y enm un rato volve a mirar el log

- = Orfeo = -

Gracias el bar@ por responder, lo hice y aparecen nuevos errores (igualmente eso no me preocupa ya que el inglés lo tengo deshabilitado y justamente los errores se deben al cambio de idioma), los errores anteriores siguen allí, así que el problema persiste....:S

PD: El problema de Arcadesigsstats será por el smf arcade, pero el otro problema ni me doy una idea, tengo otro error de previsualización de cualquier preview que se haga en la misma página en la que estoy (sea cuando hago una respuesta normal o una modificación del tema en la misma página, todo lo que requiera una actualización sin necesidad de cargar la página en su totalidad no me funciona), lo probé con el foro en inglés pero se queda en el mismo punto de "obteniendo previsualización..." :S

Wkr

Para el segundo error hay dos opciones: o te falta la traducción en español (posiblemente de algún Mod) en Post.spanish_latin.php (mira el Post.english.php a ver si te aparece algo que te falte) o sino mira en Sources/Post.php porque casi seguramente fale algo relativo a la variable "bbc_before".


vicram10

El primero es por que en algun lado de ese archivo de tu mod arcade seria..

hay una asignacion por ejemplo

$blabla = &$context['blabla'][];

y en otro lado en la parte donde visualizas los resultados de esa variable $blabla

esta asi

for each($context['blabla'] as $blabla)

hay 2 posibilidades si no le controlas que siempre este "cargado" esa variable $blabla si por ejemplo esa variable viene vacio (puede ser que la tabla de donde trae los valores para esa variable este vacio aun) entonce arrojara ese error que aparece ahi en tu post...

Si es que el resultado de alguna consulta arrojo resultado y ese mismo se agrega dentro de la variable $blabla entonces no arrojara errores, por que tiene valores que mostrar...

Ese puede ser el posible fallo de esa parte por tal motivo arroja ese error, me suele suceder cuando estoy desarrollando algun mod que tenga estas caracteristicas, y ese error que muestras aparece cuando se cumple asi como te dije mas arriba..

Es un error comun que no daña.. y es por desatencion del creador del mod, al no controlar que suceda o no tal o cual situacion..

- = Orfeo = -

Gracias Wkr y vicram10! ahora mismo me pongo a analizar el tema y a poner en uso sus comentarios! :D y comento cómo va el asunto :)

Y el bar @ que url? :S

- = Orfeo = -

vicram10! mira, esta es la función donde trae el problema:

function arcade_champs_post_profile($message)

{
global $context, $settings, $scripturl,$sourcedir,$arcSettings, $txt, $user_info;

if($user_info['id']!=0)
{
$icon_type=$arcSettings['arcade_champion_pp'];

if(!$message['member']['is_guest'])
{
echo'&nbsp;<a href="#" onclick="window.open(\'',$scripturl,'?action=arcade;sa=pro_stats;ta=',$message['member']['id'],'\',\'PopupWindow\',\'height=300,width=700,scrollbars=1\');return false;"><img src="'. $settings['images_url']. '/arc_icons/arc.gif" width="18" height="18" border="0" alt="Stats" title="' . $txt['arcade_champions_stats'] . '" ></a>';

if($icon_type !=2)
{
if(@is_array($context['arcade']['championsGold'][ $message['member']['id'] ]))
{
$k=0;
$j=0;
echo $icon_type==1 ? "<br /><br />" . $txt['arcade_champions_cho'].'<br />'  :"<br /><br />". $txt['arcade_champions_tro'].'<br />';

foreach($context['arcade']['championsGold'][ $message['member']['id'] ] as $tmp)

{
if ($icon_type==0)
{
echo '<a href="',$tmp['url'],'"><img src="'. $settings['images_url']. '/arc_icons/gold.gif" border="0" alt="cup" title="' . $txt['arcade_champions_play'] .' ', $tmp['game_name'],'"></a>&nbsp;';
$j++;
$k++;

if($j==6)// change the 6 to how many cups to display across each row
{
echo'<br />';
$j=0;
}

if($k==$arcSettings['arcade_champions_in_post'])
{
echo'<br /><a href="#" onclick="window.open(\'',$scripturl,'?action=arcade;sa=pro_stats;ta=',$message['member']['id'],'\',\'PopupWindow\',\'height=300,width=700,scrollbars=1\');return false;">More>></a>';

break;
}
}

elseif($icon_type==1)
{
if($tmp['thumbnail'] != '')
{
echo '<a href="',$tmp['url'],'"><img border="0" src="', $tmp['thumbnail'], '" alt="" width="20" height="20" title="', $txt['arcade_champions_play'],' ', $tmp['game_name'],'"></a>&nbsp;';
$j++;
$k++;

if($j==4)// change the 4 to how many icons to display across each row
{
echo'<br />';
$j=0;
}
}
if($k==$arcSettings['arcade_champions_in_post'])

{
echo'<br /><a href="#" onclick="window.open(\'',$scripturl,'?action=arcade;sa=pro_stats;ta=',$message['member']['id'],'\',\'PopupWindow\',\'height=300,width=700,scrollbars=1\');return false;">More>></a>';

break;
}
}
}
}
}
}
}
return;
}


Veo que por lo que me dices el foreach se asocia con $tmp pero no veo ninguna aclaración de la variable, será este el error? :S

PD2:  Wkr, mira, el bbc_before hace referencia al siguiente mod:

http://custom.simplemachines.org/mods/index.php?mod=408

El cual funciona perfectamente, por eso no entiendo el problema :S

vicram10

Generalmente ya esta definido por que si esta de esta forma

foreach($context['arcade']['championsGold'][ $message['member']['id'] ] as $tmp)

es por que en algun lado de donde se le llama a la funcion arcade_champs_post_profile($message)

ya ha sido declarado de la forma como te dije

en este caso

$tmp = &$context['arcade']['championsGold'][ $message['member']['id'] ][]

por dar un ejemplo, pero en si ya esta declarado esa funcion.. pero como muestra ahi como lo pones.. no controla si es que esa variable o la consulta que "carga" esa variable tiene o no campos..

la unica forma de poder evitar ese error es saber de donde se le llama a esa funcion y ese lugar es donde se "carga" esa variable $tmp y crearle una nueva variable que controle si se "carga" o se queda "vacio"

Pero para ello depende de como este estructurado esa parte, por lo que no sabria decirte exactamente como controlarlo.. deberias ver como dije mas arriba, de donde se le llama a esa funcion y ese lugar es donde se le "carga" esa variable $tmp

Puede ser que asi se pueda controlar y que de esta manera no arroje errores..


- = Orfeo = -

Gracias Vicram nuevamente!

Mira, el problema justamente es en la visión de un posteo, más especificamente en el display.template, donde la función solo se invoca de la siguiente manera:

//-- start champ in post profile --------------
arcade_champs_post_profile($message);
//--  end champ in post profile ---------------


La variable $tmp ni figura en el display.template ni en display.php, será entonces que debo poner alguna variable que lo controle? en caso de que sea así, debo poner:

$tmp = &$context['arcade']['championsGold'][ $message['member']['id'] ][]

?

Pido disculpas por querer solucionar este error que no es grave, pero me llena constantemente el log de errores y ese es el motivo de mi insistencia con solucionarlo  :'(

vicram10

Ok ahora sabes donde esta esa funcion...

Pero NO donde se genera esa funcion.. por lo que deberas buscar dentro de los archivos PHP que trae el mod que tienes instalado del ARCADE...

y la forma de controlar como te dije una ves que se tenga el codigo donde se genera la variable $tmp es por ejemplo

que cuando se hace la consulta y se va a guardar en esa variable.. le asignemos nosotros otra variable..

$context['cargo'] = //Si se cargo
$context['cargo'] = //No se cargo


entonces

en el for each de esa variable, que es en el lugar que me mostraste mas arriba se le debe agregar algo

Quedando

//Preguntamos si es que esta vacio o no la variable que controla eso para eso ponemos
if (!empty($context['cargo']))
{
 foreach(
$context['arcade']['championsGold'][ $message['member']['id'] ] as $tmp)

            {
blabla
}//cierra el for each
}//se cierra el IF


haciendo de esta forma, es como el creador del mod puede controlar para que muestre o no los resultados en caso que haiga o no valores cargados, y asi no te arroja errores en el log del foro...

pero esto depende com ote dije de COMO este estructurado el lugar donde se carga la variable $tmp que deberia estar en alguno de los archivos del mod arcade que te instalaste, y que se encuentra dentro de la funcion que me especificas es llamado desde el Display.template

- = Orfeo = -

Vicram! justamente la función se genera en ArcadeSigsStats_v2.php, es la misma función que mostré al comienzo, o sea:

ArcadeSigsStats_v2.php
      }

   }

   }

   return;

}



function arcade_champs_sig($message)


y en display.template.php
//-- start champ in post profile --------------
      arcade_champs_post_profile($message);
//--  end champ in post profile ---------------

Y la función $tmp sólo funciona en ArcadeSigsStats_v2.php, lo adjunto por las dudas, porque entiendo la segunda parte, la primera no :S si puedes verificar cómo funciona el $tmp, y muchas gracias por la paciencia!

vicram10

Ah, vale disculpa, no me fije en ese detalle.. Pero mirando el archivo que pasaste encontre el lugar donde se genera la CARGA de las variables

function build_champ_sigs($posters)

Ahi podras visualizar el que le corresponde al error.

$context['arcade']['championsGold'] = $arcade_champg;

aca esta asignandole unos valores (en vector) a el que mas arriba esta dentro del for each..

y esa variable $arcade_champg

es y tiene los valores un poco mas arriba siendo

$arcade_champg[$row['id_member_first']][$row['internal_name']] = $row;

$arcade_champg[$row['id_member_first']][$row['internal_name']]['url'] = $scripturl . '?action=arcade;sa=play;game=' . $row['id_game'];

$arcade_champg[$row['id_member_first']][$row['internal_name']]['thumbnail']  = !$row['game_directory'] ? $arcSettings['gamesUrl'].$row['thumbnail'] : $arcSettings['gamesUrl'].$row['game_directory']."/".$row['thumbnail'];



Entonces lo que podemos hacer es.. en caso que ese user tenga una copa o gano un juego se visualizase el resultado en caso contrario no.. para ello vamos a agregar

Busca

$arcade_champg[$row['id_member_first']][$row['internal_name']] = $row;

Agrega Debajo

$arcade_champg[$row['id_member_first']][$row['internal_name']]['view'] = (!empty($row['id_game']) ? 1 : 0);

Entonces.. de esta forma se controla si es que gano o no algo dicho usuario

Entonces... la funcion en si que pusiste arriba

Dentro del archivo php buscalo entera la funcion y cambiale por este otro..


function arcade_champs_post_profile($message)

{

global $context, $settings, $scripturl,$sourcedir,$arcSettings, $txt, $user_info;

if($user_info['id']!=0)

{

$icon_type=$arcSettings['arcade_champion_pp'];



if(!$message['member']['is_guest'])

{

echo'&nbsp;<a href="#" onclick="window.open(\'',$scripturl,'?action=arcade;sa=pro_stats;ta=',$message['member']['id'],'\',\'PopupWindow\',\'height=300,width=700,scrollbars=1\');return false;"><img src="'. $settings['images_url']. '/arc_icons/arc.gif" width="18" height="18" border="0" alt="Stats" title="' . $txt['arcade_champions_stats'] . '" ></a>';

if($icon_type !=2)

{

if(@is_array($context['arcade']['championsGold'][ $message['member']['id'] ]))

{

$k=0;

$j=0;

echo $icon_type==1 ? "<br /><br />" . $txt['arcade_champions_cho'].'<br />'  :"<br /><br />". $txt['arcade_champions_tro'].'<br />';

if (!empty($context['arcade']['championsGold'][ $message['member']['id'] ]['view']))
{
foreach($context['arcade']['championsGold'][ $message['member']['id'] ] as $tmp)

{

if ($icon_type==0)

{

echo '<a href="',$tmp['url'],'"><img src="'. $settings['images_url']. '/arc_icons/gold.gif" border="0" alt="cup" title="' . $txt['arcade_champions_play'] .' ', $tmp['game_name'],'"></a>&nbsp;';

$j++;

$k++;



if($j==6)// change the 6 to how many cups to display across each row

{

echo'<br />';

$j=0;

}



if($k==$arcSettings['arcade_champions_in_post'])

{

echo'<br /><a href="#" onclick="window.open(\'',$scripturl,'?action=arcade;sa=pro_stats;ta=',$message['member']['id'],'\',\'PopupWindow\',\'height=300,width=700,scrollbars=1\');return false;">More>></a>';

break;

}

}

elseif($icon_type==1)

{

if($tmp['thumbnail'] != '')

{

echo '<a href="',$tmp['url'],'"><img border="0" src="', $tmp['thumbnail'], '" alt="" width="20" height="20" title="', $txt['arcade_champions_play'],' ', $tmp['game_name'],'"></a>&nbsp;';

$j++;

$k++;



if($j==4)// change the 4 to how many icons to display across each row

{

echo'<br />';

$j=0;

}

}

if($k==$arcSettings['arcade_champions_in_post'])

{

echo'<br /><a href="#" onclick="window.open(\'',$scripturl,'?action=arcade;sa=pro_stats;ta=',$message['member']['id'],'\',\'PopupWindow\',\'height=300,width=700,scrollbars=1\');return false;">More>></a>';

break;

}

}

}
}//cerramos el if

}

}

}

}

return;

}


Claro esta que no estoy seguro que funcione, pero puedes probar, y tambien has copia de seguridad de tus archivos antes de modificarlos...

salu2

- = Orfeo = -

Je muchas gracias vicram! eres grande! :D pero ahora surgió otro error  :P

2: Invalid argument supplied for foreach()
Archivo: /home/vol10/myhost.com/myuserhost/mywebpage.com/htdocs/forum/Sources/ArcadeSigsStats_v2.php
Línea: 302

Creo que está repleto de errores del estilo......no?  :-\

vicram10

si creo que es de la misma indole.. si te fijas en la funcion que te pase donde se crea esa variable

$contex['ChampionsGold'] creo que se llamaba.. hay otras variables.. y debes hacer lo mismo para cada una de ellas.. en caso que sea eso...

Pero como dices, son los mismos errores, y si, cuando arreglas uno, apareceran otros puesto que son los mismos pero diferentes variables, se deberia de hacer lo mismo en todos los lugares que haya esa forma..

Son detalles que los creadores a veces dejan pasar, pero bue.. es cuestion que pruebes.. modificandolo, tomando como ejemplo el que te he pasado

- = Orfeo = -

Quote from: vicram10 on November 21, 2009, 12:27:07 PM
si creo que es de la misma indole.. si te fijas en la funcion que te pase donde se crea esa variable

$contex['ChampionsGold'] creo que se llamaba.. hay otras variables.. y debes hacer lo mismo para cada una de ellas.. en caso que sea eso...

Pero como dices, son los mismos errores, y si, cuando arreglas uno, apareceran otros puesto que son los mismos pero diferentes variables, se deberia de hacer lo mismo en todos los lugares que haya esa forma..

Son detalles que los creadores a veces dejan pasar, pero bue.. es cuestion que pruebes.. modificandolo, tomando como ejemplo el que te he pasado

Sí, y muchas gracias vicram! ahora voy a revisar cómo hiciste lo anterior y a partir de ahí voy derivando el asunto a los siguientes problemas que puedan surgir, te hago una pregunta más si puedes responder muchas gracias sino igualmente muchas gracias porque ya hiciste mucho :D hay forma de desactivar el log de errores? digo porque hay muchos problemas sin interferencia alguna en el foro que no hace mal a nadie pero llenan mucho la db, entonces para obviar ese problema.....hay alguna opcion? yo busqué pero no encontré ninguna, por eso mi pregunta :S

Solo restaría ver el problema del bbc_before y ela previsualización, si alguien puede darme una mano en alguna solución.....desde ya mil gracias a vilcram! :D

vicram10

Administracion--->Caracteristicas y Opciones..

QuoteActivar log de errores

si esta tildado, quitale el tilde, y guarda

ahi lo desactivas

- = Orfeo = -

Quote from: vicram10 on November 21, 2009, 01:47:49 PM
Administracion--->Caracteristicas y Opciones..

QuoteActivar log de errores

si esta tildado, quitale el tilde, y guarda

ahi lo desactivas

Gracias vicram...me siento avergonzado, no busqué allí, no creí que pudiese estar ahi.........  :-[

Muchas gracias nuevamente!

Advertisement: