Отображение страницы Drupal без шаблона вокруг него в Drupal 7 - PullRequest
2 голосов
/ 25 марта 2012

Я бы хотел отобразить содержимое "базовой страницы" в drupal.Что-то вроде этого вопроса: отображение вида Drupal без шаблона страницы вокруг него , но для Drupal 7.

Моя попытка почти работает:

function mytheme_preprocess_page(&$variables, $hook) {
  if ( isset($_GET['ajax']) && $_GET['ajax'] == 1 ) {
        $variables['theme_hook_suggestions'][] = 'page__ajax';
  }  
}

И есть файлс именем page--ajax.tpl.php в том же каталоге, где находится template.php:

<?php print $page['content']; ?>

Проблема в том, что он по-прежнему отображает меню и два моих пользовательских блока с боковой панели.Я хочу только содержание страницы.Что я должен изменить?

Ответы [ 2 ]

6 голосов
/ 26 марта 2012

Вы почти у цели.Единственное, что вам нужно, это добавить пользовательский шаблон оболочки HTML.

  • Добавить функцию в template.php:
function THEMENAME_preprocess_html(&$variables, $hook) {
  if ( isset($_GET['ajax']) && $_GET['ajax'] == 1 ) {
    $variables['theme_hook_suggestions'][] = 'html__ajax';
  }
}
  • Создать файл с именемhtml--ajax.tpl.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"
  "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">`

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <?php print $styles; ?>
  <?php print $scripts; ?>
</head>
<body class="<?php print $classes; ?>">
  <?php print $page_top; ?>
  <?php print $page; ?>
  <?php print $page_bottom; ?>
</body>
</html>
  • Очистить все кэши.Вот и все.
4 голосов
/ 31 августа 2012

На основании ответа Ufonion Labs мне удалось полностью удалить весь вывод HTML вокруг содержимого страницы в Drupal 7 реализуя hook_preprocess_page и hook_preprocess_html в мои темы template.php, вот так:

function MY_THEME_preprocess_page(&$variables) {
  if (isset($_GET['response_type']) && $_GET['response_type'] == 'embed') {
    $variables['theme_hook_suggestions'][] = 'page__embed';
  }
}

function MY_THEME_preprocess_html(&$variables) {
  if (isset($_GET['response_type']) && $_GET['response_type'] == 'embed') {
    $variables['theme_hook_suggestions'][] = 'html__embed';
  }
}

Затем я добавил два шаблона в свою тему: html--embed.tpl.php:

<?php print $page; ?>

и page--embed.tpl.php:

<?php print render($page['content']); ?>

Теперь, когда я открываю страницу узла, такую ​​как http://example.com/node/3,, я вижу вся страница как обычно, но когда я добавляю response_type параметр, такой как http://example.com/node/3?response_type=embed, I только получить <div> с содержимым страницы, чтобы его можно было вставить на другую страницу.

Бесстыдно принятое здесь: отображение представления Drupal без шаблона страницы вокруг него (второй лучший ответ для drupal 7).

Алексей по-прежнему использует шаблон страницы, отвечающий за отображение блоков

...