Вставить блок в любом месте в друпале 7 - PullRequest
2 голосов
/ 21 декабря 2010

Я уже неделю играл с Drupal 7. С Drupal 6 я имел обыкновение размещать (входить в систему) блоки в любом месте с этим:

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

или это:

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

Я изменил дельту '0' для 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'];

Оба приводят к фатальной ошибке. Любые изменения, которые я не знаю с module_invoke? Нет конкретных изменений на http://api.drupal.org/api/drupal/includes--module.inc/function/module_invoke/7

Любой намек был бы очень признателен.

Ответы [ 3 ]

6 голосов
/ 21 декабря 2010

hook_block ($ op) был изменен на hook_block_op () в Drupal 7. Попробуйте:

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

Или почему бы не использовать форму напрямую:

$vars['login'] = drupal_get_form('user_login_block');
2 голосов
/ 16 февраля 2011

Drupal 7 хранит все объекты, находящиеся в настоящее время в массивах рендеринга, до последнего вывода, что обеспечивает большую степень контроля над содержимым.В этом случае для получения окончательного результата используйте функцию render ().Simples.

   <?php
              $block = module_invoke('user', 'block_view', 'login');
              print render($block); 
    ?>
1 голос
/ 24 июня 2011

Лучшее решение, которое учитывает тематику Drupal.

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;
}
...