Einen Block kann man über die Block-Administration in Template-Regionen einblenden, nicht jedoch in ein Node. Das geht aber mit dieser Funktion, die überall – z.B. in node.tpl.php, page.tpl.php, direkt in Nodes, andere Blöcke oder sonstwo eingesetzt werden kann:
<?php $block = module_invoke('xx', 'block', 'view', 'yy'); ?>
<?php print $block['content']; ?>
Auf admin/build/block im Admin-Bereich findet man die Werte für xx und yy. Wenn man einen existierenden Block zur Konfiguration aufruft, entsprechen die beiden letzten URL-Argumente den gesuchten Werten:
z.B. wird der Block
admin/build/block/configure/views/blockmitviews
aufgerufen über
<?php $block = module_invoke('views', 'block', 'view', 'blockmitviews'); ?>
<?php print $block['content']; ?>
oder der Block
admin/build/block/configure/block/2
über
<?php $block = module_invoke('block', 'block', 'view', '2'); ?>
<?php print $block['content']; ?>
Als Eingabeformat muss “Php” gewählt werden, wenn der Code direkt in ein Node oder einen anderen Block eingefügt wird.
Tags: Block einbinden, Drupal
Juni 18th, 2010 at 18:03
Hallo,
vielen Dank für den Code. Klappt toll.
Kann man auch erreichen, dass ein Block nur dann erscheint, wenn er von den Bedingungen her erscheinen soll, also z.B. nur für die Rollen, die im Block definiert sind?
Danke für eine Antwort.
Stefan Barres
Juni 19th, 2010 at 09:50
Hallo Stefan,
das sollte über die Block-Administration (/build/block) möglich sein. Einfach den entsprechenden Block bearbeiten und Deine Einschränkungen vornehmen.
Möglich sind Benutzer-, Rollen-, und Seitenspezifische Sichtbarkeits-Einstellungen.
Viele Grüße, Patrice
Juni 19th, 2010 at 15:11
hallo patrice,
das funktioniert leider nicht. es werden alle blöcke unabhängig von der definition angezeigt.
ich habe hier noch ein php-snippet, dass eine aktion nur für user bestimmter rollen definiert:
rolle des users checken:
roles))) {// Do something.
}
?>
dann entsprechenden block im content anzeigen:
wie bekomme ich dass jetzt in einen code zusammen?
danke für noch einen tip!
stefan
Juni 19th, 2010 at 15:14
hier noch der ganze code ohne einschließende
rolle des users checken:
?php
global $user;
// Check to see if $user has the administrator role.
if (in_array(‘administrator’, array_values($user->roles))) {
// Do something.
}
?
dann entsprechenden block im content anzeigen:
?php $block = module_invoke(‘xx’, ‘block’, ‘view’, ‘yy’); ?>
<?php print $block['content']; ?
Juni 20th, 2010 at 15:09
Der Ansatz war schon richtig.
Hier zwei funktionierende Beispiele:
<?php /* vim: set expandtab tabstop=2 shiftwidth=2 softtabstop=2: */ // BenutzerObject verfügbar machen global $user; /** * Ein Beispiel für erlaubte Benutzer */ // UIDs der Benutzer, die diesen Block sehen dürfen $arrAllowedUsers = array(1, 2); // Authorisierte Benutzer sehen das hier if (in_array($user->uid, $arrAllowedUsers) === true) { $block = module_invoke('blog', 'block', 'view', '0'); print $block['content']; } // Optional kann im Else-Zweig nichtauthorisierten Benutzern // alternativer Content präsentiert werden else { print "Alternativer Content für nichtauthorisierte Benutzer"; } /* * Ein Beispiel für erlaubte Rollen */ // Array mit Rollen, die den Block sehen dürfen $arrAllowedRoles = array('admin', 'authenticated user'); $boolAllowed = false; foreach ($user->roles as $strRoleName) { if (in_array($strRoleName, $arrAllowedRoles) === true) { $boolAllowed = true; } } // Authorisierte Rollen sehen das hier if ($boolAllowed === true) { $block = module_invoke('blog', 'block', 'view', '0'); print $block['content']; } // Optional kann im Else-Zweig nichtauthorisierten Rollen // alternativer Content präsentiert werden else { print "Alternativer Content für nichtauthorisierte Rollen"; } ?>