2012-06-29 43 views
1

我有一個模塊僅用於創建幾個頁面節點(在.install中完成)。這工作正常。問題是這些節點包含xml,json,jsonp內容,所以我希望能夠在沒有主題,無標題,沒有頁腳,沒有樣式,只有節點 - >內容的情況下呈現它們。 這個模塊將與其他幾個Drupal站點共享,所以我不能在主題開發中做到這一點,我不希望任何人都必須創建或修改模板。渲染無模塊主題的節點(無主題編輯)

有沒有辦法做到這一點,使用模塊內部的鉤子,.module?基本上檢測節點標題或節點別名(或別的東西),然後阻止主題渲染並僅渲染內容。我會知道節點的標題和別名,因爲我在.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