1

これはここでの私の最初の質問です-私は参照用に何年も使用してきましたが-これが些細な/すでに回答されている場合はご容赦ください。ただし、解決策を見つけることができませんでした.

ブロック ビュー配列の 'content' 属性に返されるレンダー配列があります。私は今のところテーブルを返しています。

<?php
$data = array(
'#markup' => theme('table', array('header' => $header, 'rows' => $rows)),
);

return $data;
?>

私がやりたいのは、最初に追加のマークアップを追加することです。「#prefix」属性を追加しようとしましたが、結果は期待どおりではありませんでした。ブロックの外側にHTMLがありました。私がうまくいくと思ったものはすべて、PHPエラーを引き起こすか、まったく何もしないようです.

4

1 に答える 1

3

#prefix 付きの HTML タグを使用する場合は、#suffix で閉じる必要があります。#prefix でコンテンツを閉じるのを忘れていませんか?

そのようです:

$data = array(
    '#type' => 'markup',
    '#prefix' => '<div>',
    '#markup' => theme('table', array('header' => $header, 'rows' => $rows)),
    '#suffix' => '</div>',
);

編集

出力をレンダー配列ではなく HTML として制御するには、hook_block_view() フックを使用して、レンダー配列ではなく純粋な HTML を $block['content'] にフィードします。 ドキュメントによると、 $block['content'] は両方のタイプの入力を処理できます。

function modulename_block_view($delta='') {
  $block = array();

  switch($delta) {
    case 'block_name' :
      $block['content'] = '<div>Content before</div>';
      $block['content'] .= theme('table', array('header' => $header, 'rows' => $rows));
      $block['content'] .= '<div>Content after</div>';
    break;
  }

  return $block;
}

ブロック ビュー フックを使用したくない場合は、代わりに次の方法でレンダー配列をレンダリングできると思います。

$render_array = array(
    '#type' => 'markup',
    '#markup' => theme('table', array('header' => $header, 'rows' => $rows)),
);

$before = '<div>Content before</div>';
$after = '<div>Content after</div>';
$data = $before.render($render_array).$after;
return $data;

参照についてはrender()を参照してください。また、この回答に記載されているようにキャッシュをクリアすることを忘れないでください。

于 2013-02-12T20:52:28.787 に答える