Einen Block nur bei bestimmten Inhaltstypen zeigen

Logo DrupalDrupal 4.7.x, 5.x

In einem Blog wie diesem hier sollen nur bestimmte Inhalte ein bestimmtes Copyright erhalten. Werden aggregierte Newsinhalte angezeigt soll kein Copyright gezeigt werden. Eine einfache Lösung ist folgendermaßen zu realisieren.

Einen separaten Inhaltstyp erstellen

Dieser Inhaltstyp ist nur für einen einzigen Beitrag zuständig: Die Seite mit dem Inhalt des Copyright. Der Inhaltstyp hat die Bezeichnung "Copyright".

Copyright-Seite erstellen

Nach dem der neue Inhaltstyp erstellt ist wird mit ihm ein neuer Beitrag geschrieben. Dieser Beitrag enthält im Body (Haupttext) den Copyright-Text. Der Titel ist egal. Er wird nicht angezeigt und dient eigentlich nur dem Auffinden im gesamten Inhalt zu späteren Zeitpunkten.

Einen View erstellen

Da die Seite keiner Kategorie zugewiesen ist muss sie zur Anzeige verfügbar gemacht werden. Dies wird mittels eines View vom Typ Block realisiert.

Der View bekommt unter "Basic Information" den Namen "CC", oder wenn gewünscht einen anderen.

In der Blockkonfiguration wird als "View Type:" "Bonus: Grid View" gewählt. Dies setzt vorraus, daß das entsprechende View Modul "Views Bonus " installiert/aktiviert ist.

"Nodes per Block:" auf 1 setzen.

Die Option "[More] Link" nicht aktivieren.

Als Feld wird "Node: Body" verwendet und dabei der Handler auf "Full Text" gesetzt.

Als Filter wird "Node: Type" mit dem Typ "Copyright" mit "Is One Of" verwendet.

Damit steht ein neuer Block mit der Bezeichnung "CC"zur Verfügung und kann in der Block-Administration an gewünschter Stelle eingeblendet werden.

Hier ein View als Beispiel zum Importieren.

$view = new stdClass();
$view->name = 'CC';
$view->description = 'Copyright Hinweis';
$view->access = array ();
$view->view_args_php = '';
$view->block = TRUE;
$view->block_title = '';
$view->block_header = '';
$view->block_header_format = '1';
$view->block_footer = '';
$view->block_footer_format = '1';
$view->block_empty = '';
$view->block_empty_format = '1';
$view->block_type = 'bonus_grid';
$view->nodes_per_block = '1';
$view->block_more = FALSE;
$view->block_use_page_header = FALSE;
$view->block_use_page_footer = FALSE;
$view->block_use_page_empty = FALSE;
$view->sort = array ();
$view->argument = array ();
$view->field = array (
array (
'tablename' => 'node',
'field' => 'body',
'label' => '',
'handler' => 'views_handler_field_body',
),
);
$view->filter = array (
array (
'tablename' => 'node',
'field' => 'status',
'operator' => '=',
'options' => '',
'value' => '1',
),
array (
'tablename' => 'node',
'field' => 'type',
'operator' => 'OR',
'options' => '',
'value' => array (
0 => 'copyright',
),
),
);
$view->exposed_filter = array ();
$view->requires = array(node);
$views[$view->name] = $view;

Diesen Code auf der View Übersichtsseite importieren und auf die eigenen Gegebenheiten anpassen.

Block einblenden

Hierbei gehe ich von dem Umstand aus, das der neue Block an einer Stelle angezeigt werden soll die in der vorhandenen Auswahl in der Block-Administration nicht zur Verfügung steht.

Als Beispiel soll der Copyright-Vermerk im Footer der Website angezeigt werden. Aber nur bei bestimmten Inhaltstypen. Ein bereits vorhandener Footer soll nicht benutzt werden.

Um diese Anzeige zu realisieren ist eine Erweiterung der Regionen für das Seitentemplate "page.tpl.php" notwendig.

In der Datei "template.php" eine neue Region eintragen

Dafür in der Datei "template.php" des Themes welches verwendet wird eine Erweiterung vorgenommen.

Standardmäßig hat Drupal bereits folgende Regionen:

  • Header
  • Footer
  • Left
  • Right
  • Content

Zur Erweiterung der "template.php" wird dieser Code eingetragen

/** Define the regions **/
function mytheme_regions() {
return array(
'left' => t('left sidebar'),
'right' => t('right sidebar'),
'content' => t('content'),
'header' => t('header'),
'footer' => t('footer'),
'own_footer' => t('own footer'),
);
}

"mytheme" muss durch den Namen des Themes ersetzt werden in welchem sich die Datei "template.php" befindet.

"own_footer" ist die neue Region. Die Bezeichnung "own footer" kann nach dem ersten Aufruf der Block-Administration übersetzt werden. Die Bezeichnung "own footer" kann natürlich jede gewünschte andere Bezeichnung haben.

Nun kann der neue Block "CC" in der Block-Administration der Region "own footer" zugeordnet werden.

Neue Region im Template "template.php" eintragen

Damit der neuen Region zugewiesene Inhalte angezeigt werden muss diese Region im Seitentemplate "page.tpl.php" eingetragen werden. Diese Datei befindet im gleichen Theme-Ordner wie die Datei "template.php".

An entsprechender Stelle im HTML-Code wird folgendes eingetragen:

<?php if (isset($own_footer)) : ?>
<div class="own_footer">
<?php print $own_footer ?>
</div>
<?php endif; ?>

Neuen Block in Abhängigkeit bestimmter Inhalte anzeigen

Um den Block "CC" mit dem Copyright-Vermerk nur bei bestimmten Inhalten anzuzeigen muss in der Block-Administration eine bestimmte Konfiguration durchgeführt werden.

Bei dieser Konfiguration wird auf bestimmte Inhaltstypen gefiltert. Wer Beiträge in einem Blog schreibt verwendet mit Sicherheit den Inhaltstyp "Blog".

In der Block-Administration beim Block "CC" rechts auf "Konfigurieren Klicken". Dann unten die PHP-Code Option auswählen.

Als PHP-Code folgendes eintragen:

<?php
$match = FALSE;
$types = array('blog' => 1);
if (arg(0) == 'node' && is_numeric(arg(1))) {
$nid = arg(1);
$node = node_load(array('nid' => $nid));
$type = $node->type;
if (isset($types[$type])) {
$match = TRUE;
}
}
return $match;
?>

In diesem Beispiel wird der Block nur beim Inhaltstyp "blog" angezeigt. Entsprechend der eigenen Gegebenheiten kann hier jeder andere Inhaltstyp stehen und das Array kann auch um weitere Inhaltstypen erweitert werden.

Inhaltstyp ermitteln

Wie kann ich auf der Website einen gerade bei einer bestimmten Seite verwendeten Inhaltstypen ermitteln?

Dazu in der Datei "page.tpl.php" temporär einen kleinen Eintrag vornehmen. Am besten unmittelbar unterhalb des Body-Tag.

<?php print arg(0); ?>

Nun kann man die Website durchklicken und bekommt auf den einzelnen Seiten oben links den gerade aktuellen Inhaltstypen angezeigt.

Links

Views Bonus Pack

Overview-approach to block visibility

Powered by Drupal. Created with ZenWalk.