Drupal - 将views_embed_view与外部Drupal站点

时间:2015-07-02 14:31:55

标签: drupal external drupal-views

我在不同的服务器上托管了两个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查询,但我更喜欢使用内置参数,分页,模板等视图。

感谢。

1 个答案:

答案 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那么干净,但它紧随其后,可以很容易地将一个站点的内容拉到另一个站点。