pommeric Posté 2 Mai 2009 Posté 2 Mai 2009 Bonjour à tous, j'ai un petit soucis sur mon site. Voici quelques données: Hebergement OVH Site joomla 1.0.15 template terrantribune code erreur s'affichant ( il y a 2 types d'erreurs) Warning: Invalid argument supplied for foreach() in .../templates/rt_terrantribune/rt_rokmenu.php on line 200 Voici le code de la ligne 200 de ce fichier: ( la ligne est en gras) function _getStartingChild() { $child = $this->_menu_array; foreach ($this->_active_path as $pathid) { if ($pathid > 0 ) { if ($child[$pathid]->level < $this->_start && $child[$pathid]->children) { $this->_menu_name = $child[$pathid]->name; $child = $child[$pathid]->children; et la 2eme erreur qui apparait peu etre 100 fois en debut de page: Warning: in_array() [function.in-array]: Wrong datatype for second argument in .../templates/rt_terrantribune/rt_rokmenu.php on line 236 Voici le code de la ligne 236 de ce fichier: if (in_array($menuitem->id, $this->_active_path)) $class .= "active "; Merci d'avance pour vos eclairage et aides precieuses, j'aimerai masquer ces warning car en dehors de ca, tout marche impeccable si on elimine cet affichage de ligne intempestif en debut d page
Dadou Posté 2 Mai 2009 Posté 2 Mai 2009 Quand il te dit que ce n'est pas un argument valide pour le foreach, c'est que probablement $this->_active_path est vide, et donc il ne peut pas boucler dessus. Et pour le $this->_active_path c'est que le contenu de cette variable n'est pas valide pour la fonction in_array
pommeric Posté 2 Mai 2009 Auteur Posté 2 Mai 2009 Quand il te dit que ce n'est pas un argument valide pour le foreach, c'est que probablement $this->_active_path est vide, et donc il ne peut pas boucler dessus. Et pour le $this->_active_path c'est que le contenu de cette variable n'est pas valide pour la fonction in_array Merci DADOU pour cette explication. Mon probleme est de faire disparaitre ces lignes d'erreurs, que dois je modifier pour y arriver? D'ou peuvent venir ces erreurs? Je suis pas aussi avancé en codage php que l'ensemble des membres de ce site, merci d'avance
pommeric Posté 2 Mai 2009 Auteur Posté 2 Mai 2009 Voici le code php complet pour les 2 fonctions qui me renvoi des erreurs: function _getStartingChild() { $child = $this->_menu_array; foreach ($this->_active_path as $pathid) { if ($pathid > 0 ) { if ($child[$pathid]->level < $this->_start && $child[$pathid]->children) { $this->_menu_name = $child[$pathid]->name; $child = $child[$pathid]->children; } else { break; } } } return ($child); } function _renderList( &$children, $level ) { $output = ""; $has_output = false; if (is_array($children) && sizeof($children)>0) { $ulstyle = ""; if($this->_start==$level) { $ulstyle .= ' class="menu' . $this->_menu_sfx . '" '; } if($level==0) { $ulstyle .= ' id="horiznav"'; } $output .= "\n<ul" . $ulstyle . ">\n"; foreach ($children as $key => $value) { $menuitem =& $children[$key]; $class = ""; if (in_array($menuitem->id, $this->_active_path)) $class .= "active "; if ($menuitem->children) $class .= "parent "; PS: ce fichier est lié au template terrantribune qui sert a la presentation
petit-ourson Posté 2 Mai 2009 Posté 2 Mai 2009 Tu ajoutes devant ton foreach : if(is_array($this->_active_path)) et tu ajoutes devant ton if (in_array($menuitem->id, $this->_active_path)) $class .= "active "; un if(is_array($this->_active_path))
pommeric Posté 2 Mai 2009 Auteur Posté 2 Mai 2009 Tu ajoutes devant ton foreach : if(is_array($this->_active_path)) et tu ajoutes devant ton if (in_array($menuitem->id, $this->_active_path)) $class .= "active "; un if(is_array($this->_active_path)) Genial ta proposition Petit Ourson, ca m'a reglé 99% des lignes d'erreurs, mais ca m'a permis de voir un 3eme type de ligne d'erreur apparaitre que je n'avais pas remarqué dans le flot , donc voici le nouveau defi: il me reste plus qu'une seule ligne d'erreur qui apparait: Warning: array_keys() [function.array-keys]: The first argument should be an array in ../templates/rt_terrantribune/rt_rokmenu.php on line 335 Donc voici le passage avec la fameuse ligne de code du fichier en gras: function getColor() { $keys = array_keys($this->_active_path); $parent_id = $this->_active_path[$keys[1]]; $parent = $this->_menu_array[$parent_id]; if (isset($this->_menucolors[$parent->index])) { return $this->_menucolors[$parent->index]; } else { return $this->_defaultcolor; } Que faut il rajjouter pour faire disparaitre cette ligne d'erreur? Merci d'avance à tous! }
Dadou Posté 2 Mai 2009 Posté 2 Mai 2009 D'ou peuvent venir ces erreurs? Cela vient du fait que celui qui a fait le code ne teste pas la validité des infos entrées, c'est sur un module de joomla l'erreur?? Pour ton erreur avec array_key, c'est pareil, cette fonction attend un tableau, si la variable envoyé n'en est pas un, ça part en sucette. Et toutes tes erreurs viennent du fait que le cas ou la variable est vide, le tableau n'existe pas, tout au long du code, cela n'a pas été testé par le dev. En corrigeant cette erreur, on risque d'aller d'erreurs en erreurs ta fonction corrigée function getColor() {if (is_array($this->_active_path)) { $keys = array_keys($this->_active_path); $parent_id = $this->_active_path[$keys[1]]; $parent = $this->_menu_array[$parent_id]; if (isset($this->_menucolors[$parent->index])) { return $this->_menucolors[$parent->index]; } else { return $this->_defaultcolor; }}
pommeric Posté 2 Mai 2009 Auteur Posté 2 Mai 2009 Cela vient du fait que celui qui a fait le code ne teste pas la validité des infos entrées, c'est sur un module de joomla l'erreur?? Pour ton erreur avec array_key, c'est pareil, cette fonction attend un tableau, si la variable envoyé n'en est pas un, ça part en sucette. Et toutes tes erreurs viennent du fait que le cas ou la variable est vide, le tableau n'existe pas, tout au long du code, cela n'a pas été testé par le dev. En corrigeant cette erreur, on risque d'aller d'erreurs en erreurs ta fonction corrigée function getColor() {if (is_array($this->_active_path)) { $keys = array_keys($this->_active_path); $parent_id = $this->_active_path[$keys[1]]; $parent = $this->_menu_array[$parent_id]; if (isset($this->_menucolors[$parent->index])) { return $this->_menucolors[$parent->index]; } else { return $this->_defaultcolor; }} Alors j'ai essayé ton truc, ca me renvoi la code suivant: Parse error: syntax error, unexpected ';', expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in ../templates/rt_terrantribune/rt_rokmenu.php on line 354 Voici les codes:( en gras la fameuse ligne 354) function getColor() { if (is_array($this->_active_path)) { $keys = array_keys($this->_active_path); $parent_id = $this->_active_path[$keys[1]]; $parent = $this->_menu_array[$parent_id]; if (isset($this->_menucolors[$parent->index])) { return $this->_menucolors[$parent->index]; } else { return $this->_defaultcolor; } } function ismenu() { if (strlen($this->_output) > 5) return true; else return false; } } ?> La carrement j'ai plus rien qui apparait a l'ecran à part cette ligne d'erreur. C'est le template de joomla que j'utilise qui deconne semble t'il. Donc je reviens un pas en arriere et j'attend vos eventuels conseils, soit retenter un nouveau code pour la fonction qui deconne soit corriger la correction? Merci D'avance!
Dadou Posté 2 Mai 2009 Posté 2 Mai 2009 Dedieux, lis les message d'erreurs un peu, ça t'aide à comprendre ce qu'il ne va pas, la il te dis qu'il manque un ; ou une } en l'occurrence, ici une } tout a la fin
pommeric Posté 2 Mai 2009 Auteur Posté 2 Mai 2009 Merci DADOU pour toute ton aide, je viens de regler le probleme.
rado Posté 14 Août 2009 Posté 14 Août 2009 Merci DADOU pour toute ton aide, je viens de regler le probleme. Bonjour! j'ai le problème que toi DADOU et j'arrive pas a le résoudre, comment tu as fait????? Merci!
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant