2012-06-29 2 views
1

У меня есть модуль, который используется для создания только нескольких узлов страницы (сделано в .install). Это нормально. Проблема в том, что эти узлы содержат содержимое xml, json, jsonp, поэтому я хочу, чтобы они могли отображать их без темы, без заголовка, без нижнего колонтитула, без стилей, только с узлом-> контентом. Этот модуль будет доступен совместно с несколькими другими сайтами Drupal, поэтому я не могу этого сделать с развитием темы, я не хочу, чтобы кто-то создавал или изменял шаблоны.Render node без темы из модуля (без редактирования темы)

Есть ли способ сделать это, используя крючок внутри модуля, модуль? В основном обнаруживают название узла или псевдоним узла (или что-то еще), а затем предотвращают рендеринг темы и только визуализацию содержимого. Я буду знать заголовки и псевдонимы узлов, потому что я их создаю в .install.

Я также хотел бы изменить заголовки, чтобы правильно сказать сказать, Что возвращается в XML, JSON и т.д.

Спасибо заранее.

ответ

0

Как правило, я об этом по-другому. Я бы определял контент через пункты меню маршрутизатора hook_menu(), а не как содержимое узла, так как он редко предназначен для непосредственного редактирования. Если много обработки, вы можете отделить его от .module и включить его как file для каждого элемента.

/** 
* Implementation of hook_menu(). 
*/ 
function MODULE_menu() { 
    $items = array(); 

    $items['example/json'] = array(
    'title'   => 'JSON example', 
    'page callback' => '_MODULE_json', 
    'access arguments' => array('access content'), 
    'type'    => MENU_CALLBACK, 
); 
    $items['example/xml'] = array(
    'title'   => 'XML example', 
    'page callback' => '_MODULE_xml', 
    'access arguments' => array('access content'), 
    'type'    => MENU_CALLBACK, 
); 

    return $items; 
} 

/** 
* JSON example. 
*/ 
function _MODULE_json($string = '') { 
    $data = array(); 
    $data['something'] = 0; 
    $data['anotherthing'] = 1; 
    drupal_json($data); 
} 

/** 
* XML example. No idea if this actually produces valid XML, 
* but you get the idea. 
*/ 
function _MODULE_xml($string = '') { 
    $data = array(); 
    $data['different'] = 2; 
    $data['evenmore'] = 3; 

    // Build XML 
    $output = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; 
    $output .= "<data>\n"; 
    $output .= format_xml_elements($data); 
    $output .= "</data>\n"; 

    // We are returning XML, so tell the browser. 
    drupal_set_header('Content-Type: application/xml'); 
    echo $output; 
} 
+0

Благодарим вас за отзыв. – awolfe76

+0

Проблема в том, что нам нужно будет часто обновлять эту информацию и каждый должен иметь возможность ее выполнять. Использует ли _menu возможность редактирования элементов? – awolfe76

+0

Это можно сделать. В обратных вызовах страницы вы можете 'node_load()' нужных вам узлов и вернуть свой голый контент node-> body. – scronide

Смежные вопросы