2012-01-02 10 views
1

Привет, я хотел бы сохранить динамически сгенерированный (с php) html-код в переменную и иметь возможность отправить его в ответ на запрос ajax. Скажем, я случайно генерировать таблицу, как:Хранение html-страницы в переменной php

<?php 
$c=count($services); 
?> 
<table> 
<?php 
for($i=0; $i<$c; $i++){ 
echo "<tr>"; 
echo "<td>".$services_global[$i][service] ."</td>"; 
echo "<td>".$services_global[$i][amount]."</td>"; 
echo "<td>&euro; ".$services_global[$i][unit_price].",00</td>"; 
echo "<td>&euro; ".$services_global[$i][service_price].",00</td>"; 
echo "<td>".$services_global[$i][service_vat].",00%</td>"; 
echo "</tr>"; 
} 
?> 
</table> 

Мне нужно хранить все сгенерированный HTML код (и остальные) и эхо его как JSon кодированной переменной как:

$error='none'; 
$result = array('teh_html' => $html, 'error' => $error); 
$result_json = json_encode($result); 
echo $result_json; 

я мог возможно генерировать HTML-файл, а затем прочитать его:

ob_start(); 
//all my php generation code and stuff 
file_put_contents('./tmp/invoice.html', ob_get_contents()); 
$html = file_get_contents('./tmp/invoice.html'); 

но это звучит просто так, и так как я на самом деле не нужно генерировать код, но только отправить его на моей главной странице, как респ В случае запроса ajax это будет пустой тратой ресурсов. Любые предложения?

+0

Мое предложение: «Пожалуйста, фраза более конкретный вопрос» ... – rdlowrey

+0

Я также хотел бы предложить, чтобы не генерировать HTML прямо в коде. Лучше использовать какой-то механизм шаблонов (только PHP будет работать тоже). Мой любимый - Twig (http://twig.sensiolabs.org/) – petraszd

ответ

9

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

// turn output buffering on 
ob_start(); 

// normal output 
echo "<h1>hello world!</h1>"; 

// store buffer to variable and turn output buffering offer 
$html = ob_get_clean(); 

// recall the buffered content 
echo $html; //=> <h1>hello world!</h1> 

More about ob_get_clean()

+0

Дело в том, что если я эхо html, то он будет принят как ответ на запрос ajax, не так ли? Мне нужно создать html, не повторяя его или что-то в этом роде. – g0dl3ss

+0

Вы можете сохранить html в переменной и использовать его, когда захотите. Вы не должны повторять его до тех пор, пока вам это не понадобится ... –

+0

Чтобы сохранить html во внутренний буфер с помощью ob_start(); Мне нужно генерировать и эхо его. – g0dl3ss

0

если данные настолько дорого, чтобы восстановить то я хотел бы предложить вы должны использовать memcached.

В противном случае я бы хотел каждый раз регенерировать его или кэшировать его на интерфейсе.

0
for($i=0;$i<=5;$i++) 
{ 
    ob_start(); 
    $store_var = $store_var.getdata($i); // put here your recursive function name 
    ob_get_clean(); 
} 

function getdata($i) 
{ 
    ?> 
    <h1> 
    <?php 
     echo $i; 
    ?> 
    </h1> 
    <?php 
    ob_get_contents(); 
}