嗨,我正在尝试扩展调度器模块表单。我需要的字段作为字段集包含在节点中,作为额外字段引用图像。

/**
* Implements hook_form_node_type_form_alter().
*/
function nodequeue_scheduler_form_node_type_form_alter(&$form, $form_state) {
//This node type configuration form with schedule options
$form['scheduler']['nodequeue_sheduler'] = array(
'#type' => 'fieldset',
'#title' => t('Nodequeue Scheduler Settings'),
'#collapsible' => FALSE,
'#group' => 'scheduler',
'#weight' => 10,
);
}
/**
* Implements hook_form_FORM_ID_alter().
*/
function nodequeue_scheduler_form_scheduler_node_form_alter(&$form, $form_state) {
//feldset or vertical tab for scheduler to ammend
$options = array (1,2,3);
// Adding few custom fields
$form['scheduler_settings']['publish_nodequeue'] = array(
'#type' => 'fieldset',
'#title' => t('Nodequeue Scheduling settings'),
);
$form['scheduler_settings'] ['publish_nodequeue']['schedule_nodequeue'] = array(
'#type' => 'checkbox',
'#default_value' => 1,
'#title' => t('Add to nodequeue when published')
);
$form['scheduler_settings']['publish_nodequeue']['nodequeue_position'] = array(
'#type' => 'select',
'#options' => $options,
'#title' => t('Position')
);
$form['scheduler_settings']['publish_nodequeue']['publish_on'] = array(
'#type' => 'textfield',
'#title' => t('Publish on'),
'#maxlength' => 30,
);
// function scheduler_mail_form_scheduler_node_form_alter(&$form, $form_state) {
// $email_enabled = variable_get('scheduler_mail_enable_' . $form['type']['#value'], 0);
// if (!$email_enabled) {
// return;
// }
// $node = $form['#node'];
// $settings = _scheduler_mail_load($node);
// $form['scheduler_settings']['scheduler_mail'] = array(
// '#type' => 'fieldset',
// '#title' => t('Email settings'),
// );
// $form['scheduler_settings']['scheduler_mail']['scheduler_mail_send'] = array(
// '#type' => 'checkbox',
// '#title' => t('Send an email notification when this node is (un)published'),
// '#default_value' => $settings->send,
// );
// $form['scheduler_settings']['scheduler_mail']['scheduler_mail_address'] = array(
// '#type' => 'textfield',
// '#title' => t('Use this email address'),
// '#description' => t('If left blank, email will go to the original author of this node'),
// '#default_value' => $settings->address,
// '#maxlength' => 255,
// '#states' => array(
// 'visible' => array(
// "input[name='scheduler_mail_send']" => array("checked" => true)
// ),
// ),
// );
// $form['#validate'][] = '_scheduler_mail_validate';
// $form['#submit'][] = '_scheduler_mail_submit';
}我发现模块调度器邮件,它更改节点类型表单,并添加一些配置字段作为复选框,但没有得到的形式,是在节点编辑形式。在drupal 7我该怎么做?
发布于 2020-03-11 20:49:58
如果调度程序在窗体上使用hook_form_alter(),而您的模块也在同一表单上使用hook_form_alter(),那么这两个hook_form_alter()函数的执行顺序很重要。显然,在调度程序添加要修改的新表单元素之前,正在调用模块的hook_form_alter()。
Drupal按模块权重顺序执行这些钩子。如果您不设置模块权重,那么我相信它们都默认为相同的值,具有相同权重的钩子将按字母顺序调用(但这不是保证的)。
为了确保在调度器之后调用模块,需要将模块的权重设置为大于调度程序的模块权重。在模块的安装文件中是这样做的:
/**
* Implements hook_install().
*/
function my_module_install() {
// Because we need to alter a form that is also altered by the scheduler
// module, we need to ensure this module gets loaded AFTER the scheduler.
$weight = db_query('SELECT weight FROM {system} WHERE name = :name', array(':name' => 'scheduler'))->fetchField();
db_update('system')
->fields(array(
'weight' => $weight + 1
))
->condition('name', 'my_module')
->execute();
}https://drupal.stackexchange.com/questions/291866
复制相似问题