6 votes

Erreur du module personnalisé de Drupal 7

Je joue avec un module personnalisé dans Drupal, mais il me donne les deux avertissements suivants :

Warning: Invalid argument supplied for foreach() in menu_unserialize() (line 377 of /site/includes/menu.inc).
Warning: Invalid argument supplied for foreach() in menu_unserialize() (line 377 of /site/includes/menu.inc).

Voici le code du module :

<?php

function homepage_coords_menu(){
return array(//$items
    'homepage_coords/%node/%/%' => array(
        'page callback' => 'homepage_coords_ajax_callback',
        'page arguments' => array(1,2,3),
        'access arguments' => TRUE,
        'type' => MENU_CALLBACK,
    )
);
}

function homepage_coords_ajax_callback($nid=0,$x=0,$y=0){
    return 'nid:'.$nid.' x:'.$x.' y:'.$y;
}

?>

Que puis-je faire pour corriger ces avertissements ?

Toute amélioration de l'efficacité serait également appréciée :)

21voto

Berdir Points 5927
  • Pour autoriser l'accès à tous, vous devez définir "access callback" à VRAI, et non "access arguments". Par ailleurs, êtes-vous vraiment sûr de ne pas avoir de définitions d'accès pour cette page ?

  • Votre style de codage est atypique, ce qui est difficile à lire lorsqu'on est habitué à la façon de faire par défaut. Voir node_menu() par exemple. J'ai d'abord pensé que vous le faisiez à l'ancienne manière de Drupal 5.

  • Il semble que le premier argument soit un nœud, je vous suggère d'utiliser %node, le système de menu chargera alors automatiquement le nœud et n'appellera votre callback de page que si l'argument est un identifiant de nœud valide : "homepage_cords/%node/%/%".

6voto

Mike Points 801

J'ai rencontré cette erreur parce que je passais une chaîne de caractères à "page arguments" au lieu d'un tableau.

$items['page arguments'] = array('module_my_form') ;

3voto

cluther Points 66

J'ai perdu trop de temps à essayer de déboguer ce problème... alors que la réponse simple était que j'avais écrit :

...
    'access arguments' => TRUE,
...

alors que j'aurais dû écrire

....
    'access callback' => TRUE,
....

0voto

jpstrikesback Points 2154

Je pense qu'il vous suffit de créer le tableau "$items" comme suit :

function homepage_coords_menu(){
    $items['homepage_coords/%/%/%'] = array(
        'page callback' => 'homepage_coords_ajax_callback',
        'page arguments' => array(1,2,3),
        'access arguments' => TRUE,
        'type' => MENU_CALLBACK,
    );
    return $items;
}

0voto

omraj rajan Points 1

En fin de compte, c'est bizarre, mais cela a fonctionné. 'access arguments' => array(TRUE)

semble que l'argument d'accès key attend la valeur retournée dans le format array('').

avant cela, il suffit d'ajouter : " 'access arguments' => TRUE, "a fonctionné pour moi ! !! j'essaie toujours de trouver la raison de ce comportement bizarre Je poste juste au cas où cela aiderait quelqu'un.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X