2010-12-21 6 views
2

Es gewesen eine Woche habe ich um mit Drupal 7 Drupal gespielt haben 6, habe ich der Lage sein, überall zu platzieren (Login) -Block mit diesem:einbetten Block überall auf Drupal versagt 7

$block = (object) module_invoke($module, 'block', 'view', $delta); 
    $block->module = $module; 
    $block->delta = $delta; 
    return theme('block', $block); 

oder diese :

$block = module_invoke('user', 'block', 'view', 0); 
$vars['login'] = $block['content']; 

änderte ich das delta '0' für Drupal 7:

$block = module_invoke('user', 'block', 'view', 'login'); // I have changed from 0 to 'login' for delta at drupal 7 
$vars['login'] = $block['content']; 

Beides führt zu schwerwiegenden Fehlern. Jede Änderung, die mir bei module_invoke nicht bekannt ist? Es gibt keine spezifische Änderung bei http://api.drupal.org/api/drupal/includes--module.inc/function/module_invoke/7

Jeder Hinweis würde sehr geschätzt werden.

Antwort

6

hook_block ($ op) wurde geändert hook_block_op() in Drupal 7. Versuchen:

$block = module_invoke('user', 'block_view', 'login'); 
$vars['login'] = $block['content']; 

Oder warum das Formular nicht direkt verwenden:

$vars['login'] = drupal_get_form('user_login_block'); 
+0

Danke. Ich weiß, dass es jemand wusste. Ich brauche nur "render" oder "drupal_render", damit es funktioniert, sonst bekomme ich ein leeres Array. Weißt du, was in diesem Fall zu verwenden ist, "render" oder "drupal_render"? Nochmals vielen Dank – swan

+0

Ah, benutze render() standardmäßig in D7. –

2

Drupal 7 hält nun alle Objekte in Render Arrays bis zur letzten Ausgabe, dies ermöglicht eine größere Kontrolle über den Inhalt. In diesem Fall verwenden Sie die Funktion render(), um eine endgültige Ausgabe zu erhalten. Einfach.

<?php 
       $block = module_invoke('user', 'block_view', 'login'); 
       print render($block); 
    ?> 
+0

Ja, schöne Drupal 7. Danke – swan

1

Bessere Lösung, die Drupal Theming respektiert.

function block_render($module, $block_id) { 
    $block = block_load($module, $block_id); 
    $block_content = _block_render_blocks(array($block)); 
    $build = _block_get_renderable_array($block_content); 
    $block_rendered = drupal_render($build); 
    return $block_rendered; 
}