1

我有一个模块,它仅用于创建几个页面节点(在 .install 中完成)。这工作正常。问题是这些节点包含xml、json、jsonp内容,所以我希望能够在没有主题、没有页眉、没有页脚、没有样式的情况下渲染它们,只有节点->内容。该模块将与其他几个 Drupal 站点共享,因此我无法通过主题开发来执行此操作,我不希望任何人都必须创建或修改模板。

有没有办法使用模块内的钩子来做到这一点,.module?基本上检测节点标题或节点别名(或其他东西)然后阻止主题渲染并仅渲染内容。我会知道节点的标题和别名,因为我是在 .install 中创建它们的。

我还想修改标题以正确说出返回的内容是 xml、json 等。

提前致谢。

4

1 回答 1

0

通常,我会以另一种方式解决这个问题。我会通过hook_menu()菜单路由器项而不是节点内容来定义内容,因为它很少打算直接供用户编辑。如果有很多处理,您可以将其与 .module 分开,并将其作为file每个项目的 a 包含在内。

/**
 * 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;
}
于 2012-06-29T17:21:42.350 回答