Вы здесь

WSOD на своей странице конфигурации

1

Такое дело... Делаю копию admin/config, но со своими страницами и блоками.
Для этого взял функцию system_admin_config_page() из system.admin.inc (модуль system). Только переименовал в 17 строке WHERE link_path = 'admin/config' на свой путь. Остальная функция осталась без изменений.
Создал страницу так (пробовал и через drupal_get_form, но эффект тот же):

$items['admin/bla-bla'] = array(
      'title' => 'Бла бла бла',
      'access arguments' => array('MY_ADMIN_settings view'),
      'page callback' => 'MY_ADMIN_settings',
);

Что происходит далее:
Делаю drush cc all и жму F5 на этой странице. Страница отрабатывается как нужно. Но после этого выпадает во WSOD (белая страница). То есть можно просто ещё раз нажать обновить и всё...

Грешу на кэш или неправильный вызов страницы.

Версия Drupal: 
7.x
Вопрос задан 03.05.2015 - 15:57
Аватар пользователя SAM
SAM
212

Ответы

1

"Только переименовал в 17 строке WHERE link_path = 'admin/config' на свой путь."
Верни как было, если тебе нужна копия admin/config
Ну и permission MY_ADMIN_settings view я так понимаю существует

Ответ дан 03.05.2015 - 16:20
Аватар пользователя drupby
drupby
456

Немного не правильно выразился, копия, но со своими блоками и страницами. Страницы то норм отрабатываются (специально накидал туда блоков-страниц), но 1 раз.

Кстати, если оставить всё как было (admin/config), то страница всё равно отрабатывается только 1 раз.

Комментарий оставлен 03.05.2015 - 16:21

"но со своими блоками и страницами."
Тогда посмотри, как добавляются к примеру 'admin/config/people' ('admin/config/people/accounts', 'admin/config/people/accounts/settings') - user.module

Комментарий оставлен 03.05.2015 - 16:26

Я знаю как их добавлять, и я их добавил, и они работают на ура. НО..... только 1 раз после чистки кэша.

Комментарий оставлен 03.05.2015 - 16:28

ну тогда смотри логи и сделай вывод ошибок на страницу
А вообще убери из page callback функции

if (system_status(TRUE) && user_access('administer site configuration')) {
    drupal_set_message(t('One or more problems were detected with your Drupal installation. Check the <a href="@status">status report</a> for more information.', array('@status' => url('admin/reports/status'))), 'error');
}

у тебя ошибка возникает Fatal error: Call to undefined function system_status() , либо убирай вообще, либо подключай файл system.admin.inc

Комментарий оставлен 03.05.2015 - 16:32

Точно, убрал проверку и всё заработало. А вот подгрузка system.admin.inc не помогла.

Комментарий оставлен 03.05.2015 - 18:50

да просто нужно было прописать в начале callback функции

module_load_include('inc', 'system', 'system.admin');

если тебе конечно нужно на этой странице проверять и выводить сообщение status report

Комментарий оставлен 03.05.2015 - 19:39

Блин, тупанул, прописал его после проверки)) Ладно, всё равно статус мне там не нужен.

Комментарий оставлен 03.05.2015 - 19:49