Themeless Page - или тип контента только для контента - PullRequest
1 голос
/ 21 сентября 2011

Мне нужно создать контент, который выводит только то, что я ввел, без макета, без комментариев, блоков и т. Д.

Если бы я мог реализовать пользовательский тип контента, который использовал бы пустые шаблоны, которые могли бы работать, но я был не в состоянии заставить его работать, поскольку переопределение тем, кажется, заменяет все для всего сайта. Итак, пропуская это, есть простой способ, о котором я не знаю, просто выводить то, что я печатаю в теле контента, без разметки / блоков / комментариев и т. Д.

Можно ли с помощью пользовательского модуля добавить настраиваемое поле внизу, а затем во время ловушки process_page () игнорировать темы и макет и просто выводить содержимое?

Пожалуйста, не предлагайте "Виды", так как они нестабильны.

Некоторые примеры использования:

Страница, которая является типом PHP, и это просто скрипт, который мне не нужен в качестве макета.

Или если у меня есть какие-то данные json для возврата.

Или, если я хочу добавить страницу «все в одном» с собственной темой.

Есть предложения?

1 Ответ

2 голосов
/ 15 декабря 2011

Я работаю над модулем, который будет делать это, а также интегрировать с представлениями, чтобы вы также могли установить представление как «без темы». У меня есть так, что он создаст флажок на форме узла, что вы можете указать узел, чтобы быть темой без узла. Как только это будет проверено, узел будет отображаться без темы (только содержимое, без заголовка).

Это немного хакерски, но работает предварительно. Я уточню это, так как мне это нужно, и, скорее всего, я буду также интегрировать это с представлениями с течением времени.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...