2012-06-29 42 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