【问题标题】:Render node without theme from a module (no theme editing)从模块中渲染没有主题的节点(没有主题编辑)
【发布时间】:2012-07-01 02:49:46
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

    标签: drupal module drupal-6 drupal-modules


    【解决方案1】:

    通常情况下,我会以另一种方式进行处理。我会通过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;
    }
    

    【讨论】:

    • 问题是我们需要能够经常更新它并且任何人都应该能够做到。使用 _menu 是否允许项目可编辑?
    • 可以的。在页面回调中,您可以node_load() 您想要的节点并返回它们的裸 $node->body 内容。
    猜你喜欢
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多