2015-07-02 1 views
0

У меня есть два сайта Drupal, размещенные на разных серверах. В основном они должны работать отдельно, однако у сайта1 есть один конкретный тип контента, который я хотел бы показать в списке на сайте2.Drupal - используя views_embed_view с внешним сайтом Drupal

Я не могу просто использовать фиды для импорта, поскольку оригинал должен оставаться, и если отредактирован, изменения будут мгновенно отражаться на обоих сайтах. Site2 не требует редактирования содержимого - покажите его.

Содержимое уже представлено в списке на сайте1. Список был создан с использованием представлений.

Мое намерение состояло в том, чтобы вызвать представление на сайте2, используя следующий код в пользовательском модуле.

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; 
} 

сайт1 DB определен в файле settings.php.

Однако данные не возвращаются. Использование того же подхода на Site1 (без коммутационных БД) отлично работает.

Был ли я чрезмерно оптимистичен в надежде, что этот подход будет работать, или я пропущу что-то очевидное?

Если это вряд ли будет работать, какова будет альтернатива? Я могу сделать свой собственный SQL-запрос, но я бы предпочел использовать представления для встроенных аргументов, разбивки на страницы, шаблоны и т. Д.

Спасибо.

+0

вам нужно использовать iframe для отображения информации site1 на сайте2. –

+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, чтобы делать то, что мне нужно. Это не так просто, как простой view_embed_view, но это уже вторая секунда и позволяет довольно легко переносить контент с одного сайта на другой.