我正在开发一个从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_vote
和votingapi_cache
表格未显示在列表中。因此,当我尝试使用drupal_write_record()
将记录写入这些表时,它不起作用,因为该函数检查模式以查看表是否存在。在调用drupal_get_complete_schema()
之前,我已尝试清除架构缓存:
cache_clear_all('schema', 'cache');
当从API重建时,投票表永远不会出现,这没有用。如果我进入Drupal的admin和Clear All Cache,那么表模式将被正确重建并包含投票表。关于如何让架构重新构建API的任何想法?
答案 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);