2015-07-02 85 views
0

我有兩個Drupal站點託管在不同的服務器上。主要他們需要單獨操作,但site1有一個特定的內容類型,我想在site2的列表中顯示。Drupal - 使用views_embed_view與外部Drupal站點

我不能簡單地使用Feed導入,因爲原始文件必須保留,如果進行編輯,這些更改會立即反映在這兩個網站上。 Site2不需要編輯內容 - 只顯示它。

該內容已在網站1的列表中呈現。該列表是使用視圖創建的。

我的意圖是在自定義模塊中使用以下代碼調用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

您需要使用iframe在site2中顯示site1信息。 –

+0

@ viswanath-polaki - 不需要使用iFrame在另一個Drupal站點顯示信息。 Drupal支持數據庫的即時更改。這僅僅是讓語法正確的一個例子。 – sagraham

回答

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那麼幹淨,但它很接近第二,並且可以很容易地將一個站點的內容拉到另一個站點。