如何为variable_get()设置变量?


9

我想了解variable_get()。到目前为止,我读过您可以使用$conf数组在settings.php中设置变量,并稍后使用来在代码中检索它们variable_get()。我读过您还可以variable_get()用来从数据库中检索值。

这是如何运作的?
有自动建立的表格吗?
如果可以使用此功能,您将如何设置变量?

Answers:


25

也许您希望了解,variable_set是在数据库中存储各种结构化数据的神奇方法,而variable_get是再次将其取出的方法。不幸的是,事实并非如此。

“持久变量”(通常被称为“持久变量”)是指相对简单的键值对,它们应在请求,用户和会话之间持久存在,直到站点管理员更改该值为止。站点名称就是一个很好的例子。

那么它是怎样工作的?

自举Drupal时,将从高速缓存(如果有)或变量表中读取所有变量。(有关确切的代码,请参见variable_initialize。)变量并存储在全局$conf变量(一个巨大的数组)中。Drupal之所以这样做,是因为它比每次需要一个变量时进行数据库查询都更为有效。(这也是variable_set不适合大型数据块的原因:它们会在每次请求时加载!)

每当使用时variable_get('variable_name', 'default_value'),都会在$ conf数组中查找变量名。如果存在,则返回该值。否则,返回默认值。

最后,该家族的第三个成员是variable_del。顾名思义,这将从变量表中删除变量。该函数通常在hook_uninstall实现中使用,在卸载模块时删除变量。

如果您正在寻找在数据库中存储更复杂的自定义数据结构的方法,请查看hook_schemadrupal_write_record,或使用Drupal实体系统和Entity API


7
另一个重要的注意事项是,将variable_set()导致重新构建变量缓存,因此,通常为持久且一致的数据(例如管理设置等)保留该内容。或者换一种说法,不应在页面构建过程中更改的函数之间使用静态变量代替静态变量。
Jimajamma

5

如果使用Drush(强烈建议使用),则可以drush vget > variables.txt从命令行发出以创建一个文本文件的列表,其中包含所有当前变量及其值的列表。同样,您可以drush vset用来将任何变量设置为不同的值。

有关,和其他有用命令的更多详细信息,请参见GitHubvariable-getvariable-set


3

要设置变量,可以使用variable_set()。然后,您可以使用variable_get()检索它们。您应该熟悉Drupal API站点。

如果存储了变量,则可以在变量表中找到。


从上面的讨论尚不清楚如何在自定义模块中设置变量。那么如何从自定义模块设置变量?
Fawwad 2015年

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.