Answers:
扩展了Jimajamma的评论:
variable_set()
在您的更新函数中执行一个操作,该操作会在变量成功运行时设置一个变量,您可以在_preprocess_page()内部查看
并且仅在浏览管理区域并且安装的版本为3.0(3.1、3.2,请取消检查是否停止支持旧版本作为升级路径),而不是在每次页面加载时都进行此检查。
另外,利用hook_requirements在状态报告页面上提供反馈:
检查安装要求并进行状态报告。
(...)
“运行时”阶段不仅限于纯粹的安装要求,还可以用于更一般的状态信息,例如维护任务和安全性问题。
强制更新模块的方法很少。
直接调用更新函数。
$sandbox = [];
module_load_include('install', 'FOO');
FOO_update_7001($sandbox);
将架构版本重置为关注点,然后照常再次运行更新。
drupal_set_installed_schema_version('module_name', '7000');
或重置为仅重新运行最新的更新架构:
drupal_set_installed_schema_version('foo', drupal_get_installed_schema_version('foo') - 1);
笔记:
hook_install
,因此在更新过程中将执行所有后续的更新挂钩。为了在安装文件之外使用此功能,您必须首先包含Drupal install.inc
和模块的安装文件,例如
require_once DRUPAL_ROOT . '/includes/install.inc';
module_load_include('install', 'foo');
ini_set('max_execution_time', 0);
更长的安装更新以防止PHP超时。使用drush
。查找以下几个示例:
drush eval 'module_load_include('install', 'foo'); $s = []; foo_update_7001($s);'
drush sqlq "UPDATE system SET schema_version = 7000 WHERE name = 'foo'" && drush -y updb
drupal_set_installed_schema_version()
。这对于调试更新挂钩非常方便!
hook_install()
是运行长时间的批处理(沙盒装)更新。在理想情况下,应该有一种update.php
与重新启动PHP线程相同的方式来触发更新,以防止超时。蚂蚁的想法该怎么做?
ini_set('max_execution_time', 0);
在触发更新之前添加。
function MYMODULE_install() {
$functions = get_defined_functions();
foreach ($functions['user'] as $function) {
if (strpos($function, 'MYMODULE_update_') === 0) {
call_user_func($function);
}
}
}
variable_set()
在更新函数中执行一个设置,该函数在成功运行时设置一个变量,您可以在a内部查看该变量_preprocess_page()
,但每次都在查看它,因此不确定性能如何友好。