我有一个Drupal Module'示例'。我已将模块的管理和客户端功能拆分为两个包含文件example.admin.inc和example.pages.inc。我在example.module文件中声明了常量(define()),可以在pages.inc文件和admin.inc文件中访问它们。
但是如何在集中位置声明普通$变量,以便可以在admin.inc文件和pages.inc文件中访问它们。我试图在example.module中声明$ variable,但无法在example.admin.inc和example.pages.inc中访问它。
答案 0 :(得分:7)
根据您的需要,有多种可能性。
您可以使用variable_get('your_module_your_key', $default_value);
。然后,很容易在settings.php中使用$conf['your_module_your_key'] = 'other value';
覆盖它。请参阅http://api.drupal.org/api/drupal/includes--bootstrap.inc/function/variable_get。
为此构建设置表单也很容易,例如参见http://api.drupal.org/api/drupal/modules--menu--menu.admin.inc/function/menu_configure/7。
请注意,您应始终为变量添加模块名称前缀,并且 不 将此项用于经常更改的变量,因为每次更改都会导致缓存清除对于所有变量。另请注意,所有变量都会在每个页面请求中加载,因此请勿创建太多的变量或在其中存储大数据结构。它们主要用于配置。
您可以编写简单的get / set函数,这些函数在单个页面请求期间在内部使用静态来交换变量。请参阅示例http://api.drupal.org/api/drupal/includes--path.inc/function/drupal_set_title/6。
请注意,这些内容仅针对单个页面请求进行保留。这是一个示例实现,它允许保存由字符串标识的多个变量,因此类似于variable_get()/ set()。
<?php
function yourmodule_static($key, $value = NULL) {
static $storage;
if (isset($value)) {
$storage[$key] = $value;
}
return $storage[$key];
}
// Then, you can use it like this:
your_module_static('key', $value);
// And then in a different function/file:
$value = your_module_static('key');
您也可以将其扩展为按引用返回等等。
要存储来自慢速数据库查询或复杂计算的数据,您可以使用缓存系统。 http://www.lullabot.com/articles/a-beginners-guide-to-caching-data看起来像是一个详细而有效的解释。
请注意,默认情况下缓存存储在数据库中,但可以插入,例如也可以使用APC或Memcached。
答案 1 :(得分:1)
在.module文件中,但您需要将其定义为全局
答案 2 :(得分:1)
对于Drupal 7,请参阅新的drupal_static()函数: http://api.drupal.org/api/drupal/includes%21bootstrap.inc/function/drupal_static/7