-1

翻訳可能なメッセージの代わりに動的に生成されたhtmlコンテンツを出力したいのですが、それを機能させることができません:

function custom_logo_module_block_view($delta = '') {

    // don't worry about switch($delta) logic

    // perform some operations and then display some generated html

    // (maybe use the template(...) function)

    // works fine but i'd like to print html
    $block['content'] = t('No content available.');

    return $block;
}

生成されたhtmlをブロックに出力するにはどうすればよいですか?

解決策やコード例が見つかりません。私は間違った方向を指している可能性があると思うので、ベストプラクティスの提案を歓迎します。

4

1 に答える 1

0
function custom_logo_module_block_view($delta = '') {
  $block = array();
  if ($delta == 'example') {
    $block = array(
      'subject' => t('Active users list'),
      'content' => example_block_content()
    );
  }
  return $block;
}

function example_block_content() {
  // Query for active users from database
  $users = db_select('users', 'u')
    ->fields('u', array('uid', 'name'))
    ->condition('u.status', 1)
    ->execute()
    ->fetchAll();

  // Prepare items for item list
  $items = array();
  foreach ($users as $user) {
    $items[] = l($user->name, "user/{$user->uid}");
  }

  $output = t('No active users available.');

  if (!empty($items)) {
    $output = theme('item_list', array('items' => $items));
  }

  return $output;
}

コメントに関する更新...

私が理解している限りsome result、データベースから生成されたデータを意味します。この場合、次のようなことを試すことができます。

function example_block_content() {
  // Query for active users from database
  $users = db_select('users', 'u')
    ->fields('u', array('uid', 'name'))
    ->condition('u.status', 1)
    ->execute()
    ->fetchAll();

  $output = '';
  foreach ($users as $user) {
    $output.= '<div>'. $user->name .'</div>';
  }

  $output = "<div>Hello World". $output ."</div>";

  return $output;
}

これにより、次の出力が得られます。

<div>Hello World
  <div>admin</div>
  <div>ndrizza</div>
  <div>Vlad Stratulat</div>
  ...
</div>

または、次を試すことができます。

function custom_logo_module_block_view($delta = '') {
  $block = array();
  if ($delta == 'example') {
    $block = array(
      'subject' => t('Active users list'),
      // this will return "Hello World + some result" text inside <div>
      'content' => "<div>Hello World + some result</div>"
    );
  }
  return $block; 
}

この方法はどちらも機能していますが、正しい方法ではありません。コンテンツを生成する正しい方法は、私の最初の回答にあります。Drupal でのテーマの詳細については、こちらをご覧ください。

于 2012-09-26T21:41:04.317 に答える