2012-03-25 8 views
2

Ich möchte den Inhalt einer "Basis-Seite" in Drupal rendern. So etwas wie diese Frage: displaying a Drupal view without a page template around it aber für Drupal 7.Anzeige einer Drupal-Seite ohne Vorlage in Drupal 7

Mein Versuch fast funktioniert:

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

Und haben eine Datei page--ajax.tpl.php im selben Verzeichnis mit dem Namen, wo template.php lebt:

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

Das Problem ist, dass es immer noch das Menü und meine zwei benutzerdefinierten Blöcke aus der Seitenleiste rendert. Ich möchte nur den Seiteninhalt. Was soll ich ändern?

Antwort

6

Sie sind fast da. Sie müssen lediglich eine benutzerdefinierte HTML-Wrapper-Vorlage hinzufügen.

  • eine Funktion template.php hinzufügen:
function THEMENAME_preprocess_html(&$variables, $hook) { 
    if (isset($_GET['ajax']) && $_GET['ajax'] == 1) { 
    $variables['theme_hook_suggestions'][] = 'html__ajax'; 
    } 
} 
  • Erstellen Sie eine Datei 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 alle Caches genannt. Das ist alles.
+0

Das Listenelement verwirrt den Parser. Ich habe den Code von deinem Link eingegeben, weil es für zukünftige Leute nichts Schlimmeres gibt als zu finden, dass die richtige Lösung hier auf einem toten Link war :). Ich werde deinen Vorschlag kurz versuchen und zu dir zurückkommen. –

+0

Bitte versuchen Sie es auch nur ohne etwas anderes (weil dies eine erste Version der Datei war;). Vielen Dank. –

+0

Leider hat das nicht funktioniert. Ich bekomme genau die gleiche Ausgabe. Ich habe überprüft, dass sowohl die 'html - ajax' - als auch die' page - ajax' - Vorlage verwendet wird (indem HTML - Kommentare gedruckt werden). Das Problem ist, dass die Blöcke scheinbar Teil von '$ page [']' in page - ajax sind, also trotzdem gerendert werden. –

3

Basierend auf der Antwort von Ufonion Labs ich in der Lage war völlig alle HTML-Ausgabe um den Seiteninhalt in Drupal 7 von hook_preprocess_page und hook_preprocess_html in beide Umsetzung meiner Themen entfernen template.php, wie diese :

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'; 
    } 
} 

Dann habe ich zwei Vorlagen zu meinem Thema: html--embed.tpl.php:

<?php print $page; ?> 

und page--embed.tpl.php: Jetzt

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

, wenn ich einen Knoten Seite zu öffnen, wie http://example.com/node/3, ich sehen die komplette Seite wie gewohnt, aber wenn ich hinzufügen, um die response_type Parameter, wie http://example.com/node/3?response_type=embed, ich Nur erhalten Sie die <div> mit dem Seiteninhalt, so dass es in eine andere Seite eingebettet werden kann.

Schamlos genommen Form hier: displaying a Drupal view without a page template around it (zweitbeste Lösung für Drupal 7).

Alexei Lösung immer noch die Seitenvorlage, die für die Anzeige von Blöcken verantwortlich ist