Traditions-Blog seit April 2000

Drupal: Möglichkeiten, um Blöcke anzuordnen und einzublenden Inhalt abgleichen

Block nur bei bestimmten Inhaltstypen einblenden

Ein Block kann einfach mit einer Vollansicht eines bestimmten Node-Typs eingeblendet werden. Dazu wird in der Block-Konfiguration gewählt:

Diesen Block nur auf den aufgelisteten Seiten anzeigen:
Nur anzeigen, wenn der folgende PHP-Code TRUE zurückgibt (PHP-Modus für Experten).

Um nun z.B. den Block nur auf Seiten des Typs "book" anzuzeigen, gibt man folgenden Code ein:

<?php
if (arg(0) == 'node' && is_numeric(arg(1))) {
  $node = node_load(arg(1));
  if (($node->type == 'book')) {
    return TRUE;
  }
}
?>

Block in eine Teaserliste einfügen

In der Datei node.tpl.php kann man die angezeigten Teaser mit der Variablen $id zählen, um dann z.B. nach dem ersten Teaser einen Block in die Teaserliste einzufügen. Am Anfang von node.tpl.php und vor jedem anderen Code in der Datei steht dann z.B.

<?php if (($page == 0) && ($id == 2)): ?>
<?php $block = module_invoke('block', 'block', 'view', '3'); ?>
<?php print $block['content']; ?>
<?php endif;?>

Das fügt einen Block ein, und zwar genau vor dem zweiten angezeigten Teaser der Liste. Durch $page==0 gilt dieser Einbau nur auf Teaserlisten, nicht auf Vollansichten der Nodes.

(Anleitung verändert durch Anregung von http://www.drupalblog.de/2007-09/adsense-zwischen-beitraegen-anzeigen.ht...)

Block in Node einfügen

In der Datei node.tpl.php werden Überschrift, Tags, Datum, Links, Autor und Inhalt des Nodes angeordnet. An beliebiger Stelle, z.B. direkt vor dem eigentlichen Inhalt des Nodes, kann ein zusätzlicher Block eingeblendet werden.

Dazu sucht man in node.tpl.php die geeignete Stelle, etwa vor

<?php print $content ?>

und blendet den Block ein, in diesem Beispiel nur auf Vollansichten (durch $page==1) des Inhaltstyps "book":

<?php if (($page == 1) && ($type == 'book')) : ?>
<?php $block = module_invoke('block', 'block', 'view', '7'); ?>
<?php print $block['content']; ?>
<?php endif; ?>
<?php print $content ?>

Achtung

Man sieht an den Beispielen oben, dass man auf unterschiedliche Weise einzelne Inhaltstypen wie z.B. "book" identifizieren muss; je nachdem, ob man direkt in der Block-Konfiguration arbeitet (if (($node->type == 'book'))) oder in der Datei node.tpl.php (if ($type == 'book'))!

Danke

Danke. sehr nützliche Informationen

Views

<?php
if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(arg(1));
if (($node->type == 'book')) {
return TRUE;
}
}
?>

Funzt tadellos. Ich sollte das nun noch so erweitern, dass der Block entweder bei type == 'books' eingeblendet wird so wie im Beispiel oder bei einer bestimmten view, zum Beispiel mit Namen 'resultate'. Wie kann ich den Views-Name abfragen?

Blöcke in Views

In die Abfrage

if (arg(0) == 'node' && is_numeric(arg(1)))

baut man einfach die URL-Argumente des Views ein, z.B. taxonomy/term oder den Adress-Namen des Views. Darauf folgt dann direkt

return TRUE;

ohne die Abfrage nach dem Node-Type mit

$node = node_load(arg(1));
if (($node->type == 'book')) {

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • Zulässige HTML-Tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <h4> <blockquote> <pre> <p> <br> <img>
  • Zeilen und Absätze werden automatisch erzeugt.

Weitere Informationen über Formatierungsoptionen

Mit dem Absenden dieses Formulars, akzeptieren Sie die Datenschutzrichtlinie von Mollom.