Почему не будет загружен файл .install?
-
16-10-2019 - |
Вопрос
Мой последний модуль, кажется, не загружается. Вот краткое изложение:
У меня есть реализация файла .module hook_menu()
а также hook_views_data()
.
Оба, кажется, работают нормально, после включения модуля: навигация по пути меню работает, как и ожидалось, и мой новый тип Base Base.
У меня есть реализация файла .install hook_install()
hook_uninstall()
а также hook_schema()
Ни одна из функций в файле установки не работает. Новые таблицы не присутствуют после включения, и нет никаких зарегистрированных ошибок.
Если я вручную вызову функций в файле .install с Devel, я получаю неопределенную ошибку. Я могу только предположить, что файл установки не загружается.
Запуск файла .Install через командную строку PHP интерпретатор не поднимает никаких синтаксических ошибок.
Я не могу объяснить, почему файл не загружается в область при включении модуля.
Я бы признателен за любую помощь.
Решение
Оказывается, это была ошибка в hook schema()
К сожалению, функция не удалась более или менее молча. Например :
'description' => array(
'type' => 'varchar',
'size' => 'normal',
'not null' => TRUE,
'description' => 'Description of vaule type.',
),
Не удалось.
'description' => array(
'type' => 'varchar',
'size' => 'normal',
'length' => 255,
'not null' => TRUE,
'default' => '',
'description' => 'Description of vaule type.',
),
Работал.
Проблема усугублялась моим ошибочным предполагаемым представлением о том, что отключение и повторное определение модуля вызовет установку, а не удаление модуля из системной таблицы.
Еще раз спасибо всем, кто предоставил обратную связь.
Другие советы
Если вы добавили файл установки после включения модуля: отключите модуль, удалите модуль, а затем включите модуль.
hook_install()
выполняется только в первый раз, когда модуль включен, и если он включен после удаления.
Просто хочу добавить этот ответ для будущего ссылки, так как мой файл .Install не загружался, и мне потребовалось некоторое время, чтобы выяснить, что случилось, так что, надеюсь, это может спасти кого -то боли!
Я определил некоторые функции обновления, например, hook_update_7101, но когда я перешел на update.php, это говорило «не ожидая обновлений». Я добавил несколько операторов отладки и обнаружил, что мои функции не отображались, когда был сделан вызов get_defined_functions () (это функция PHP). Как будто PHP не знал о функциях обновления.
Оказывается, в Drupal было две версии моего модуля. Один AT/Sites/All/MODULES и другой AT/SITES/SITENAME/MODULES. Таким образом, более старая версия модуля на сайтах/SiteName переопределяла мою более новую версию на Sites/All.
Так что итог:
Check whether there are 2 versions of your module - one at sites/all/modules and another at sites/sitename/modules
Я удалил более старую версию формы /сайтов /сайтов модуля, и обновления появились, как и ожидалось!
Файл установки загружается только во время установки, процесса обновления или для проверки требований модуля. Загрузка файлов по требованию (когда они необходимы) экономит время для выполнения, памяти и общей производительности.
Чтобы включить файл установки вашего модуля, вы должны включить его в первую очередь, например:
module_load_include('install', 'my_module');