2012-03-25 2 views
2

Я хотел бы отобразить содержимое «базовой страницы» в drupal. Что-то вроде этого вопроса: displaying a Drupal view without a page template around it но для Drupal 7.Отображение страницы 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']; ?> 

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

ответ

6

Вы почти находитесь. Единственное, что вам нужно - это добавить собственный шаблон оболочки 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> 
  • Flush все кэши. Это все.
+0

Элемент списка путал парсер. Я ввел код из вашей ссылки, потому что для будущих людей нет ничего хуже, чем найти, что правильное решение было здесь на мертвой ссылке :). Я попробую ваше предложение в ближайшее время и вернусь к вам. –

+0

Также попробуйте просто без чего-либо другого (потому что это была первая версия файла;). Спасибо. –

+0

К сожалению, это не сработало. Я получаю тот же результат. Я подтвердил, что используются как шаблоны 'html-ajax', так и' page-ajax' (путем печати комментариев HTML). Проблема, я думаю, состоит в том, что блоки, по-видимому, являются частью '$ page ['content']' на странице - ajax, поэтому они все равно получают визуализацию. –

3

На основании ответа 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, я только получите <div> с содержимым страницы, чтобы он мог быть встроен в другую страницу.

Бесстыдно приняты формы здесь: displaying a Drupal view without a page template around it (второй лучший ответ для Друпала 7).

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

 Смежные вопросы

  • Нет связанных вопросов^_^