开发者

Themeless Page - Or a content-only content type

I need to create content that only outputs what I entered, no layout, no comments, blocks, etc.

If I could implement a custom content type that used blank templates that might work, but I've been unable to make it work so far as overriding the themes seems to replace everything site-wide. So, skipping that, is there a simple way I'm not aware of, to just output what I type in the content's body, with no layout/blocks/comments,etc.

Is it possible via a custom module to add a custom field at the bottom, and then during the process_page() hook, ignore the theming and layout and just output the content?

Please don't suggest "Views" as it's not stable.

Some example use cases:

A page t开发者_如何学编程hat's a PHP type, and it's simply a script that I don't want layout as an example.

Or if I have some json data to return.

Or if I want to toss up a all-in-one page with it's own theme.

Any suggestions?


I am working on a module that will do this and also integrate with views so you can set a view to be "theme-less" as well. I have it so that it will create a checkbox on a node form that you can specify the node to be theme-less node. Once that is checked, the node will be displayed with no theme (the content only, no title).

It's a little hackish, but it works preliminarily. I will be fleshing this out as I have need for it and I will likely also integrate it with views over time.

timeless.install

<?php

/**
 * themeless.install
 * defines our schema for flagging nodes as being themeless or not.
 */

function themeless_schema() {
  $schema['themeless_node'] = array(
    'description' => 'Keeps track of which nodes are themeless.',
    'fields' => array(
      'nid' => array(
        'description' => 'The node id of a themeless node',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ),
    ),
    'primary_key' => array('nid'),
  );
  return $schema;
}

function themeless_enable() {
  if (db_table_exists('themeless_node') == FALSE) {
    drupal_install_schema('themeless');
  }
}

function themeless_uninstall() {
  drupal_uninstall_schema('themeless');
}

timeless.module

function themeless_process(&$variables, $hook) {
  if ($hook == 'page') {
    if (isset($variables['page']['content']['system_main']['nodes']) && is_array($variables['page']['content']['system_main']['nodes'])) {

      $node = $variables['page']['content']['system_main']['nodes'];
      $nodes = array_keys($node);
      $result = db_query("SELECT t.nid AS themeless, n.promote
                             FROM {themeless_node} t, {node} n
                             WHERE t.nid=:nid
                               AND n.nid=t.nid",
                             array('nid' => $nodes[0]));
      $tdata = $result->fetchObject();      
      if (isset($tdata->themeless) && $tdata->themeless > 0 && $tdata->promote != 1) {
        if ($node[$nodes[0]]['body']['#object']->body['und'][0]['format'] == 'php_code') {
          print $node[$nodes[0]]['body'][0]['#markup'];
        } else {
          print $node[$nodes[0]]['body']['#object']->body['und'][0]['value'];
        }
        exit();
      }
    }
  }
}

function themeless_form_alter(&$form, &$form_state, $form_id) {

  $parts = explode('_',$form_id);
  $form_type = $parts[count($parts)-1].'_'.$parts[count($parts)-2];
  $themeless = '';

  if ($form_type == 'form_node') {
    if (isset($form_state['node']->nid) && $form_state['node']->nid) {
      $themeless = db_query("SELECT COUNT(*) AS themeless
                             FROM {themeless_node}
                             WHERE nid=:nid",
                             array('nid' => $form_state['node']->nid))->fetchField();
    }
    $checked = ($themeless == 1) ? 'checked' : '';
    $form['themeless'] = array(
      '#type' => 'fieldset',
      '#title' => t('Themeless Node'),
      '#weight' => 5,
      '#collapsible' => TRUE,
      '#collapsed' => TRUE,
    );
    $form['themeless']['themeless_node'] = array(
      '#type' => 'checkbox',
      '#title' => 'Themeless Node',
      '#description' => 'This theme will be displayed without any wrapper themes.',
      '#weight' => 100,
      '#default_value' => $themeless,
    );
  }
}

function themeless_node_insert($node) {
  $result = db_query("INSERT INTO {themeless_node} (nid)
                      VALUES( :nid )",array('nid' => $node->nid));
}

function themeless_node_update($node) {
  if ($node->themeless_node == 1) {
    if (db_query("SELECT COUNT(*) AS themeless
                  FROM {themeless_node}
                  WHERE nid=:nid",
                  array('nid' => $node->nid))->fetchField() != 1) {
      $result = db_query("INSERT INTO {themeless_node} (nid)
                          VALUES( :nid )",array('nid' => $node->nid));
    }
  } else {
    $result = db_query("DELETE FROM {themeless_node}
                        WHERE nid=:nid",array('nid' => $node->nid));
  }
}

timeless.info

name = Themeless
description = Gives the option to a node to have a themeless display or displayed without the various theme templates native to Drupal.
core = 7.x
version = 7.x-1.0dev
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜