Drupal模块显示为已安装,但表不在模式中

时间:2014-02-21 22:07:04

标签: php mysql drupal drupal-7

我正在开发一个从Drupal站点提取数据的API。一切都很顺利我通常使用Drupal Bootstrap加载Drupal使用我需要的函数然后吐出一个JSON数组。我有一个问题虽然有一个模块,由于某种原因,Drupal的架构似乎并不认为该表存在。我正在使用的模块是VotingApi。

所以在我的API调用中,我连接到drupal db。如果我跑:

print_r(module_list());

我获得了一个很大的模块列表,并且包含了votingapi。如果我跑:

var_dump(module_exists('voting_api'));

我收到true回复。我也可以跑:

var_dump(db_table_exists('votingapi_vote'));

获得true回复。但是如果我跑:

print_r(drupal_get_complete_schema(true));

votingapi_votevotingapi_cache表格未显示在列表中。因此,当我尝试使用drupal_write_record()将记录写入这些表时,它不起作用,因为该函数检查模式以查看表是否存在。在调用drupal_get_complete_schema()之前,我已尝试清除架构缓存:

cache_clear_all('schema', 'cache');

当从API重建时,投票表永远不会出现,这没有用。如果我进入Drupal的admin和Clear All Cache,那么表模式将被正确重建并包含投票表。关于如何让架构重新构建API的任何想法?

1 个答案:

答案 0 :(得分:0)

想出来。当使用多站点和引导程序时,它显然与使用MultiSite有关,它只会引导到主站点。我在这里找到了一篇文章https://drupal.org/node/2080819

基本上你需要覆盖url的系统变量,以便它引导到正确的站点。

define('DRUPAL_ROOT', '/path/to/drupal');
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
$variables['url'] = 'http://subsite1.example.com/';
drupal_override_server_variables($variables);
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);