Ngoài những gì @jonhattan đã đề cập, tôi sẽ đề xuất thêm một phương pháp để làm điều đó. Thêm những phụ thuộc trong tệp mymodule.info. Giả sử bạn muốn thêm phụ thuộc mới vào liên kết, email và trường địa chỉ.
dependencies[] = link
dependencies[] = email
dependencies[] = addressfield
Bây giờ trong hook numquirments cố gắng kích hoạt các mô-đun tự động nếu có. Xin lưu ý rằng vì chúng tôi đã thêm các phụ thuộc trong tệp thông tin, chúng sẽ được bật nếu lần đầu tiên cài đặt. Nhưng nếu không họ sẽ xuất hiện "bị khóa". Trong trường hợp này, chúng tôi sẽ phải kích hoạt chúng tự động. Bây giờ như @jonhattan đã trả lời, bạn có thể thử làm điều đó trong hook_update_N và ném ngoại lệ khi thất bại.
Nhưng vấn đề với phương pháp trên là trải nghiệm người dùng. Bạn không thể xuất "liên kết" trong thông báo ngoại lệ. Một cách khác là có thể dễ dàng tránh được bằng cách cho người dùng biết ngay trước khi cập nhật. Đối với trường hợp như vậy, chúng tôi có hook_Vquirements.
Tôi sẽ cung cấp một ví dụ về cách sử dụng hook_Vquirements cho trường hợp ví dụ tôi đã đề cập.
/**
* Implements hook_requirements.
*/
function mymodule_requirements($phase) {
$requirements = array();
if ($phase == 'update') {
$enabled = module_enable(array('link', 'email', 'addressfield'));
if( !$enabled ) {
$t = get_t();
$requirements['mymodule_migrate'] = array(
'title' => $t('Mymodule Migrate Issues'),
'value' => $t('One or more of the required modules cannot be enabled.
If you download the modules from Drupal.org those would be enabled automatically when update script is run.
So Please make sure following modules are present: !link, !email & !addressfield',
array(
'!link' => l('link', 'https://drupal.org/project/link'),
'!email' => l('email', 'https://drupal.org/project/email'),
'!addressfield' => l('addressfield', 'https://drupal.org/project/addressfield'),
)
),
'severity' => REQUIREMENT_ERROR,
);
}
}
return $requirements;
}
Bây giờ cũng có thể cố gắng kích hoạt từng mô-đun riêng lẻ và tạo thông điệp đúng cách để chỉ những mô-đun vắng mặt mới được hiển thị trong tin nhắn.