Моя первая попытка вывести мой модуль Drupal7 как пользовательский блок не удалась - PullRequest
1 голос
/ 26 сентября 2011

Это моя первая попытка создать модуль Drupal: Hello World.

Мне нужно, чтобы он отображался как пользовательский блок, и я обнаружил, что это может быть реализовано с помощью двух хуков Drupal7: hook_block_info () и hook_block_view () внутри моего модуля helloworld. В Drupal 6 был использован устаревший hook_block ().

В реальной форме это работает, но отображает только текст: «Это блок, который является Моим модулем». Мне действительно нужно отобразить вывод моей основной функции: helloworld_output (), переменная t.

<?php
        function helloworld_menu(){
          $items = array();
            //this is the url item
          $items['helloworlds'] = array(
            'title'            => t('Hello world'),
            //sets the callback, we call it down
            'page callback'    => 'helloworld_output',
            //without this you get access denied
            'access arguments' => array('access content'),
          );

          return $items;
        }

        /*
        * Display output...this is the callback edited up
        */
        function helloworld_output() {
          header('Content-type: text/plain; charset=UTF-8');
          header('Content-Disposition: inline');
          $h = 'hellosworld';
          return $h;
        }

        /*
        * We need the following 2 functions: hook_block_info() and _block_view() hooks to create a new block where to display the output. These are 2 news functions in Drupal 7 since hook_block() is deprecated.
        */
    function helloworld_block_info() {
      $blocks = array();
      $blocks['info'] = array(
        'info' => t('My Module block')
      );

      return $blocks;
    }

    /*delta si used as a identifier in case you create multiple blocks from your module.*/
    function helloworld_block_view($delta = ''){
       $block = array();
       $block['subject'] = "My Module";
       $block['content'] = "This is a block which is My Module";
       /*$block['content'] = $h;*/

        return $block;
    }
    ?>

Все, что мне сейчас нужно, это отобразить содержимое вывода моей основной функции: helloworld_output () внутри блока: helloworld_block_view ().

У вас есть идея, почему $ block ['content'] = $ h не будет работать? Спасибо за помощь.

1 Ответ

0 голосов
/ 26 сентября 2011

$h - локальная переменная для функции helloworld_output(), поэтому она не будет доступна в helloworld_block_view().

Я не уверен, почему вы устанавливаете заголовки в helloworld_output(), вы должны удалить эти строки, поскольку они будут вызывать только проблемы.

После того, как вы удалили два вызоваheader() в этой функции просто измените строку кода в функции helloworld_block_view() на следующее:

$block['content'] = helloworld_output();

И содержимое, установленное на $h в helloworld_output, будет помещено в содержимое блокаобл.

...