Frage

Es war eine Woche, die ich gespielt habe, um mit Drupal 7 Drupal 6, verwenden ich in der Lage sein, um Platz (Login) Block überall mit diesem:

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

oder folgt aus:

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

änderte es 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, dass ich bin mir nicht bewusst mit module_invoke? Es gibt keine spezifische Änderung bei http: // api. drupal.org/api/drupal/includes--module.inc/function/module_invoke/7

Jeder Hinweis wäre sehr geschätzt.

War es hilfreich?

Lösung

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

$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');

Andere Tipps

Drupal 7 hält alle Objekte nun in Arrays machen, bis die letzte Ausgabe, dies für ein höheres Maß an Kontrolle über die Inhalte erlaubt. In diesem Fall wird eine endgültige Ausgang Verwendung zu bekommen die render () Funktion. Simples.

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

Bessere Lösung, welche Hinsicht Drupal Theming.

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top