Autor Zpráva
H13
Profil
Ahoj potřeboval bych poradit s jedním problémem. Potřebuji dostat HTML kód do proměnné...

Uvedu to na příkladu. Jeden CMS řeší zobrazení dat tak, že funkce nevrací hodnotu returnem ale rovnou generuje HTML. Příkladem je kód HTML - tabulka a mezi <td> </td> je vloženo např. <td><?php Ukaz::ukazTabulka();?></td>. V metodě ukazTabulka je uvnitř přímo kód HTML (viz kód níže), takže není problém, když toto vložíte přímo do HTML. Bohužel já generuji tabulky pomocí PEAR - HTML_Table, takže potřebuji dostat do metody $table->setHeaderContents(0, 0, $promenna); proměnnou, jestliže tam vložím metodu: $table->setHeaderContents(0, 0, Ukaz::ukazTabulka());, tak se sice kód HTML vygeneruje, ovšem úplně někde jinde... Je možný toto nějakým způsobem vyřešit tak, abych nepředělával metody...



<?php
class Ukaz //trida v CMS
{
function ukazTabulka() //metoda v CMS
{
?>
<table border="1">
<tr>
<td><?php echo "Neco"?></td>
</tr>
</table>
<?php
}
}
?>


<!-- nasledujici kod funguje bez problemu-->
<html>
<head></head>
<body>
<p>Zobrazeni</p>
<p><?php Ukaz::ukazTabulka()?></p>
</body>
</html>


<?php
// toto nefunguje, tabulka se sice vygeneruje, ale ne v oblasti >>> <<<
$promenna = Ukaz::ukazTabulka();
echo ">>>" . $promenna . "<<<";
?>

k
Profil *
je to logicke na to abys to mohl nacpat do promenne tak ten html kod musis vratit returnem:

function ukazTabulka() {
$html="<table border=\"1\"><tr><td>Neco</td></tr></table>";
return $html;
}
rabbit
Profil
Ahoj, problém je v tom, že metoda Ukaz::ukazTabulka() nevrací tabulku, ale posílá ji na output. Tzn. po zápisu $promenna = Ukaz::ukazTabulka(); máš v proměnné $promenna hodnotu null.

Vyřešit to můžeš tak, že si zapneš output buffering. Příklad:

<?php
ob_start();

Ukaz::ukazTabulka();

$promenna = ob_get_flush();

echo ">>>" . $promenna . "<<<";
?>
H13
Profil
rabbit

Díky moc, přesně tak jsem si to představoval a přesně to jsem potřeboval, protože překopávat celej CMS bych asi nezvládl...Funguje to...

A jako správny amatér se ještě zeptám, zda tohle řešení má nějaký nevýhody (kromě toho, že to není moc elegantní a bude to asi pomalejší). Mám na mysli, jestli třeba můžu narazit na to, že např. někde buffering fungovat nebude, nebo ...

A ještě otázku, jak se zbavit výstupu který se vygeneruje mimo danou oblast
ob_start();

Ukaz::ukazTabulka();// v tuto chvíli se generuje obsah html tam, kde si to nepřeji
$promenna = ob_get_flush();



Jinak ještě jednou díky moc
H13
Profil
nyní to negeneruje mimo oblast (asi proto, protože toho bufferování bylo víc):

ob_start();
Ukaz::ukazTabulka();
$promenna = ob_get_contents();
ob_end_clean();
Toto téma je uzamčeno. Odpověď nelze zaslat.

0