Drupal 7:如何保存模块设置?
Drupal 7: how do I save module settings?
我正在尝试为模块创建一些设置,并且正在按照 Drupal.org 上的指南进行操作。我还将我的工作与现有模块进行比较。
配置菜单出现在正确的位置,并带有正确的字段,但是当我点击保存时,没有保存任何输入。 (我有 运行 缓存清除和注册表重建。)
有人知道我在这里做错了什么吗?我看不出我的东西有什么不同。
在我的 .admin.inc 文件中,我将表格设置为:
function contact_page_settings() {
$form = array();
$config = contact_page_default_settings();
$form['#tree'] = TRUE;
$form['contact_page_settings'] = array(
'#type' => 'fieldset',
'#title' => t('Top Section'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
'top-title' => array(
'#type' => 'textfield',
'#title' => t('Top title'),
'#default_value' => !empty($config['top-title']) ? $config['top-title'] : '',
),
'top-left' => array(
'#type' => 'text_format',
'#title' => t('Top left'),
'#default_value' => !empty($config['top-left']) ? $config['top-left'] : '',
),
'top-right' => array(
'#type' => 'text_format',
'#title' => t('Top right'),
'#default_value' => !empty($config['top-right']) ? $config['top-right'] : '',
),
);
return system_settings_form($form);
}
在我的 .module 文件中有:
function contact_page_menu() {
$items = array();
$items['admin/settings/contact-page'] = array(
'title' => 'Contact Page content',
'page callback' => 'drupal_get_form',
'access arguments' => array('administer site configuration'),
'page arguments' => array('contact_page_settings'),
'type' => MENU_NORMAL_ITEM,
'file' => '/admin/contact_page.admin.inc',
);
return $items;
}
function contact_page_default_settings() {
$defaults = array(
'top-tile' => 'Top title',
'top-left' => 'Top left',
'top-right' => 'Top right',
);
$config = variable_get('contact_page_settings', array());
return array_merge($defaults, $config);
}
好的,所以我发现值 是 保存 - 只是当我重新加载配置页面时它们没有出现在我的文本区域中。
问题是我使用的 text_format
字段将数据保存为数组。我需要将该数组的 value
属性 作为我的默认值。
所以,我刚刚将 ['value']
添加到 default_value
三元表达式中:
'#default_value' => !empty($config['top-right']['value']) ? $config['top-right']['value'] : '',
我正在尝试为模块创建一些设置,并且正在按照 Drupal.org 上的指南进行操作。我还将我的工作与现有模块进行比较。
配置菜单出现在正确的位置,并带有正确的字段,但是当我点击保存时,没有保存任何输入。 (我有 运行 缓存清除和注册表重建。)
有人知道我在这里做错了什么吗?我看不出我的东西有什么不同。
在我的 .admin.inc 文件中,我将表格设置为:
function contact_page_settings() {
$form = array();
$config = contact_page_default_settings();
$form['#tree'] = TRUE;
$form['contact_page_settings'] = array(
'#type' => 'fieldset',
'#title' => t('Top Section'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
'top-title' => array(
'#type' => 'textfield',
'#title' => t('Top title'),
'#default_value' => !empty($config['top-title']) ? $config['top-title'] : '',
),
'top-left' => array(
'#type' => 'text_format',
'#title' => t('Top left'),
'#default_value' => !empty($config['top-left']) ? $config['top-left'] : '',
),
'top-right' => array(
'#type' => 'text_format',
'#title' => t('Top right'),
'#default_value' => !empty($config['top-right']) ? $config['top-right'] : '',
),
);
return system_settings_form($form);
}
在我的 .module 文件中有:
function contact_page_menu() {
$items = array();
$items['admin/settings/contact-page'] = array(
'title' => 'Contact Page content',
'page callback' => 'drupal_get_form',
'access arguments' => array('administer site configuration'),
'page arguments' => array('contact_page_settings'),
'type' => MENU_NORMAL_ITEM,
'file' => '/admin/contact_page.admin.inc',
);
return $items;
}
function contact_page_default_settings() {
$defaults = array(
'top-tile' => 'Top title',
'top-left' => 'Top left',
'top-right' => 'Top right',
);
$config = variable_get('contact_page_settings', array());
return array_merge($defaults, $config);
}
好的,所以我发现值 是 保存 - 只是当我重新加载配置页面时它们没有出现在我的文本区域中。
问题是我使用的 text_format
字段将数据保存为数组。我需要将该数组的 value
属性 作为我的默认值。
所以,我刚刚将 ['value']
添加到 default_value
三元表达式中:
'#default_value' => !empty($config['top-right']['value']) ? $config['top-right']['value'] : '',