自定义模块变量名称的最佳实践?


8

我已经习惯了为我的模块做一个非常健壮的配置窗格,并且发现变量名和管理相当麻烦

我有像这样的变量mymodule_section_subvar_varname_type_context,我不仅不了解变量名中元素的顺序,而且感觉好像变量名那么长是设计缺陷。

我一直在考虑在变量mymodule_section_settings中使用序列化数组,并结合使用一组易于维护该数组的函数,但是我很乐意在前缀和/之外建立的最佳实践中(如果有的话)输入一些信息或我们信任的模块示例,以及它们对大量变量所做的工作。

谢谢!


另外,我想考虑这个问题,以及更新(这就是为什么我对一个序列化的阵列倾斜),所以在更改变量名称不会孤立数据,并添加额外的工作额外的升级路径的功能/测试
electblake

Answers:


7

可以使用Drupal变量来包含数组。这也是Drupal核心模块所做的(请参阅book_type_is_allowed())。

可以使用单个Drupal变量将模块使用的不同设置包含到数组中。使用form #tree属性,仍然可以使用system_settings_form()将数组保存到Drupal变量中,而无需编写任何其他代码。序列化反序列化代码是由处理Drupal变量的Drupal核心函数自动完成的(请参见variable_set()的代码)。

问题是:什么时候应该使用单个Drupal变量来包含不同的设置?我将为一个函数或一组函数使用单个变量进行设置;如果数组包含(例如)10个不同函数使用的值,但是这些函数从该数组访问单个值(或几个值),那么我将不使用单个持久变量进行设置。


您/任何人都知道这种情况在功能和/或Strongarm中将如何反应吗?我讨厌将那些模块以及那些珍惜这些模块可以带来的移动性的用户拒之门外。
electblake

我看不出任何功能对包含数组的Drupal变量有任何问题的原因。如果这是完全正确的,其他人可能会向您详细报告。
kiamlaluno

是的,我知道这可能超出了这个问题的范围-但要确保此标准适用于所有人:)我将在尝试了几件事后进行报告。
electblake

2

如果一组设置相关,则将它们放入数组是有意义的。例如,如果您several variable_get按顺序执行。它为您提供了一些灵活性,并且可能更快一些。

但是,这将使其他程序难以通过drush vset或Strongarm之类手动编辑设置。在这些情况下,长变量名实际上可能会有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.