Ошибка Drupal 7 Custom Module - PullRequest
       2

Ошибка Drupal 7 Custom Module

6 голосов
/ 09 марта 2011

Я играю с пользовательским модулем в Drupal, но он дает мне два следующих предупреждения:

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).

Вот код модуля:

<?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;
}

?>

Что я могу сделать, чтобы исправить эти предупреждения?

Также приветствуются любые улучшения эффективности:)

Ответы [ 5 ]

21 голосов
/ 09 марта 2011
  • Чтобы разрешить доступ ко всем, вам нужно установить для «обратного вызова доступа» значение ИСТИНА, а не «аргументы доступа». Кроме того, вы действительно уверены, что у вас нет определений доступа для этой страницы?

  • Ваш стиль кодирования нетипичен, его трудно прочитать, когда вы привыкли к способу выполнения по умолчанию. См. node_menu () для примеров. Сначала я думал, что вы делаете это в старом Drupal 5.

  • Похоже, что первый аргумент является узлом, тогда я предлагаю вам использовать% node, тогда система меню автоматически загрузит узел и вызовет вашу страницу обратного вызова, только если аргумент является действительным идентификатором узла. ключ будет выглядеть так: "homepage_cords /% node /%/%".

6 голосов
/ 06 апреля 2011

Я столкнулся с этой ошибкой, потому что передавал строку «аргументам страницы» вместо массива.

$ items ['arguments>] = массив (' module_my_form ');

3 голосов
/ 09 декабря 2011

Я потратил слишком много времени, пытаясь отладить это ... когда простой ответ был таким:

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

когда то, что я должен был написать, было:

....
    'access callback' => TRUE,
....
0 голосов
/ 12 сентября 2014

в конечном итоге странно, но это сработало 'аргументы доступа' => массив (ИСТИНА)

похоже, что ключ аргумента доступа ожидает значение, возвращаемое в формате массива ('').

до этого только добавление: " 'access arguments' => TRUE, " работало для меня !!!все еще пытаюсь найти причину этой странной публикации поведения на тот случай, если это кому-нибудь поможет.

0 голосов
/ 09 марта 2011

Полагаю, вам просто нужно сделать массив "$ items" следующим образом:

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;
}
...