我在不同的服务器上托管了两个Drupal站点。在主要部分他们需要单独操作,但是site1有一个特定的内容类型,我想在site2的列表中显示。
我不能简单地使用Feed导入,因为原始文件必须保留,如果编辑,更改会立即反映在两个站点上。 Site2无需编辑内容 - 仅显示内容。
内容已在site1的列表中显示。该列表是使用视图创建的。
我的目的是在自定义模块中使用以下代码调用site2上的视图。
function site2_menu() {
$items = array();
$items['content-from-site1'] = array(
'title' => 'Content from Site1',
'page callback' => 'site_two_list',
'access arguments' => array('access content'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function site2_list() {
db_set_active('site1');
$content = views_embed_view('articles', 'default');
db_set_active('default');
return $content;
}
site1 DB在settings.php文件中定义。
然而,这并没有返回任何数据。在Site1上使用相同的方法(不切换DB)工作正常。
我是否过于乐观地希望这种方法可行或者我错过了一些明显的东西?
如果这不太可行,那替代方案会是什么?我可以自己做SQL查询,但我更喜欢使用内置参数,分页,模板等视图。
感谢。
答案 0 :(得分:0)
我无法使用views_embed_view,但是我已经能够使用views_get_view来检索我需要的所有内容并自己迭代结果。这是非常接近的第二个。
function site2_menu() {
$items = array();
$items['content-from-site1'] = array(
'title' => 'Content from Site1',
'page callback' => 'theme_site2_list',
'access arguments' => array('access content'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function site2_theme() {
return array (
'site2_list_page' => array(
'arguments' => array('content' => NULL),
'template' => 'templates/site2-list-page'
)
);
}
function theme_site2_list() {
db_set_active('site1');
$view = views_get_view('articles');
$view->base_database = "site1";
$view->init_display();
$view->pre_execute();
$view->execute();
db_set_active('default');
foreach ($view->result as $key => $data) {
$content[$key]['nid'] => $data->nid;
$content[$key]['title'] => $data->node_title;
$content[$key]['body'] => $data->field_body;
$content[$key]['image'] => $data->field_field_image;
}
return theme('site2_list_page', array('content' => $content));
}
然后在site2-list-page.tpl.php中,我可以使用$ content数组来完成我需要的工作。它不像简单的views_embed_view那么干净,但它紧随其后,可以很容易地将一个站点的内容拉到另一个站点。