Fügen Sie einen Ansichtsblock in einen Knoten in Drupal 7 ein

6

[Drupal 7]

Ich habe einen Block, den ich in Ansichten erstellt habe, mit dem Namen "Handy_Tips-Block_1".

Jetzt möchte ich es in das Body-Feld meines Knotens einfügen.

Wie mache ich das?

Ich habe hier eine Anleitung gefunden , die die Verwendung des folgenden Codes vorschlägt:

<?php
print $block = module_invoke('views', 'block_view', 'handy_tips-block_1');
print render($block['content']['#content']);
?>

Es werden jedoch nur die Wörter "Array" ausgedruckt. (Ich habe den PHP-Eingabefilter für das Body-Feld aktiviert).

Hinweis: Im veröffentlichten Code habe ich auch versucht, "Ansichten" durch verschiedene Elemente wie "Block" zu ersetzen. Ich habe 'Handy_Tips-Block_1' als ID verwendet, da dies auf dem Konfigurationslink der Blockverwaltungsseite angezeigt wird.

big_smile
quelle

Antworten:

15

Die Ausgabe ist "Array", da es sich tatsächlich um ein Array handelt. Ich denke, Sie möchten Ihr Array drucken, um zu sehen, welche Felder Sie verwenden können:

print_r($block);
print_r($block['content']['#content']);
print_r(render($block['content']['#content']);

Informationen zum Anzeigen einer Ansicht können Sie mit dieser Codezeile in Ihrer Vorlage verwenden, um eine Ansicht aufzurufen:

echo views_embed_view('view-name', $display_id = 'display-name');

In meiner node.tl.php möchte ich beispielsweise eine Ansicht mit dem Namen einfügen test viewund seine Blockanzeige mit dem Computernamen verwenden block_test. Dann kann ich Folgendes verwenden:

echo views_embed_view('test_view', $display_id = 'block_test');

(Denken Sie daran, den Computernamen Ihrer Ansicht und den Computernamen Ihrer Anzeige zu verwenden.)

Ich hoffe, diese Informationen werden nützlich sein.

cigotete
quelle
Wenn ich die obige Methode verwendet habe, werden dann keine Kontextlinks angezeigt?
Guru
print views_embed_view('my_view_name', 'block', 'student', 'one');Meine Argumente mögen student/one. Danke für die Lösung. Verwendet beide (Schüler, einer) im Kontextfilter.
Kalidasan
8

Meine bevorzugte Methode zum Einbetten von Ansichten in Vorlagendateien ist die Funktion views_embed_view () .

Es ist wirklich einfach zu bedienen:

<?php print views_embed_view('view-name', 'display-name','arguments'); ?>
  • Das Argument 'Anzeigename' entspricht dem Anzeigetyp in Ihrer Ansicht, und die Anzahl dieser Typen ist mehrfach. Wenn Sie also in Ihrer Ansicht zwei Blöcke erstellt haben, können Sie den einen oder anderen aufrufen, indem Sie im Argument 'Anzeigename' 'Block-1' oder 'Block-2' verwenden.
  • Das dritte Argument, 'Argumente', ist optional und kann verwendet werden, um alle kontextbezogenen Filterargumente zu übergeben, von denen Ihre Ansicht abhängt.
PJ McCormick
quelle
Wirklich eine großartige Lösung. Lief wie am Schnürchen!
Hockey2112
Hat jemand herausgefunden, wie der Blocktitel mit views_embed_view () gerendert wird?
Jay-Ess
5

Ich empfehle, entweder das Modul " Entity Views Attachment" zu verwenden , mit dem Sie eine Ansicht in Ihr Modul einfügen können, als wäre es ein Feld, oder das Display Suite- Modul, mit dem Sie Ihr Knotenlayout anpassen und alle Arten von Blöcken in das Modul einfügen können.

Marcvangend
quelle
Danke für den Vorschlag. Ich möchte nur eine Ansicht auf einer Seite einbetten, daher scheint die Verwendung eines ganzen Moduls übertrieben. Vielen Dank, dass Sie sich die Zeit genommen haben, um zu antworten.
big_smile
Gern geschehen, danke für das Feedback. Um klar zu sein, ich denke, es ist nichts Falsches an dem anderen Ansatz, ich wollte nur die Module erwähnen.
Marcvangend
Eine weitere Option wäre das Blockreferenzmodul .
TheodorosPloumis
1

Mir ist klar, dass dies jetzt ein alter Thread ist, aber ich habe auch danach gesucht und das BlockReference- Modul gefunden. Sie können einen Block einem Knoten als Feld zuordnen.

Es funktioniert ein Vergnügen!

JMC
quelle