Приостановка вывода буфера в php - PullRequest
1 голос
/ 22 января 2012

Вот моя проблема. Я хочу иметь возможность буферизовать только содержимое таблиц, но не заголовок. Можно ли приостановить буферизацию вывода в php, чтобы я мог пропустить буферизацию в заголовках таблицы и возобновить ее снова в начале реального содержимого?

<?php ob_start(); ?>
<table>
<tr>
    <th>Account</th>
    <th>Quarter</th>
    <th>Amount</th>
</tr>
    <?php 
    foreach($tc_item as $v){ 


    if($v->dbl_amt != 0){
    ?>
    <tr>
    <!-- Nature of Collection -->
        <td id="nature"><?php echo $v->strDescription; ?></td>
     <!-- Account Code -->     
        <td id="account"><?php echo $v->str_details; ?></td>
     <!-- Amount -->
        <td id="amount"><?php echo number_format($v->dbl_amt,2, '.', ''); ?></td>

    </tr>
    <?php } ?>
    <?php } ?>

</table>
<?php 
$_SESSION['or_details'] = ob_get_contents();
?>

Ответы [ 2 ]

2 голосов
/ 22 января 2012

Если вы не хотите буферизовать всю таблицу, не буферизируйте ее:

<table>
  <thead></thead>
  <?php ob_start();?>
  <tbody></tbody>
  <?php $tbody = ob_get_flush(); ?>
</table>

Если вы хотите буферизовать всю таблицу, но хотите, чтобы тело таблицы было отдельно, добавьте еще один уровень буферизации:

<?php ob_start();?>
<table>
  <thead></thead>
  <?php ob_start();?>
  <tbody></tbody>
  <?php $tbody = ob_get_flush(); ?>
</table>
<?php $table = ob_get_clean(); ?>

Кроме того, вы можете очистить текущий буфер, не создавая новый. Я не рекомендую это, потому что это делает ваш код трудным для понимания. Это также глупо, поскольку, если вы просто собираетесь сбрасывать, не захватывая строку, вы, возможно, не буферизируете в первую очередь:

<?php ob_start()?>
<table>
  <thead></thead>
  <?php ob_flush();?>
  <tbody></tbody>
  <?php $tbody = ob_get_contents(); // only contains output since last flush ?>
</table>
<?php ob_end_flush(); ?>
0 голосов
/ 22 января 2012

Начать буферизацию после заголовка

<table>
<tr>
    <th>Account</th>
    <th>Quarter</th>
    <th>Amount</th>
</tr>
<?php
ob_start();
echo "table data";
ob_end_flush();
...