By admin |

对于Drupal开发者来说,善用system_settings_form这个东西,可以在一定程度上提升你的开发效率,并降低代码的维护成本。

该函数通常用在自定义模块,对一些用户自定义配置的保存。

下面以代码实例来解析该函数的用法。 

//hook_menu
function MYMODULE_menu() {
  $items = array();
  $items['test'] = array(
    'page callback' => 'drupal_get_form',
    'page arguments => array('test_form'),
    'access callback' => TRUE,
  );
  return $items;
}

function test_form($form, $form_state) {
  $form['my_config'] = array(
    '#type' => 'textfield',
    '#title' => t('My config value'),
    '#default_value' => variable_get('my_config', NULL),
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save'),
  );
  return system_settings_form($form);
}

 做完上面的事情,你就可以得到一个简易的配置表单。不需要做其他事情了。

当你在输入一个值并Save之后,该值会自动保存到数据库的variable表中。
my_config 对应着variable表的name字段,而文本框里面的值,则自动保存到对应的value字段中。

这样不需要自己定义表单的submit处理函数,不需要自己写variable_set来处理,是不是很方便?

同时如果需要在其他地方调用上面的表单保存的配置的值,只需简单的调用

variable_get('my_config', NULL);

即可取到。

使用这个方法,有个技巧,就是

'#default_value' => variable_get('my_config', NULL),

这里的精妙自己琢磨去。我刚开始学习这个方法,自己琢磨了半个小时才明白。

如果想理解这个函数的奥妙,自己看下源代码,如果对drupal的form比较了解,相信可以很快明白。 

参考链接: 

https://api.drupal.org/api/drupal/modules%21system%21system.module/func…
https://api.drupal.org/api/drupal/modules%21system%21system.module/func…