Autor Zpráva
nym
Profil *
Čuste. Mám takový problém. Stavím vlastní šablonovací systém, a potřeboval bych uvnitř jednoho dokumentu nahradit {obsah} za obsah souboru main_page.php tak, aby se obsah souboru provedl. Takze readfile neprichazi v uvahu. Mozna na to jdu jen spatne ze stranky filosofie, ale nějak mi to nejde. Díky za pomoc.
Majkl578
Profil
Aby se provedl jak, hned?

Na to by mohlo stačit include.
nym
Profil *
Majkl578:
Právě že include nestačí. Zkoušel jsem něco na způsob:

$var= include("main_page.php");
$tmp_source = str_Replace("{obsah}", $var, $tmp_source);


ale k ničemu to nevedlo. Potřebuji prostě místo toho spešl znaku vložit ten soubor.
martindeveloper
Profil
nym:

ob_start();
include ("main_page.php");
$buffer = ob_get_contents();
ob_end_clean();

$tmp_source = str_Replace("{obsah}", $buffer, $tmp_source);
Majkl578
Profil
A nestačí z jakého důvodu? Předpokládám, že to je kvůli okamžitému vypsání.

To by šlo řešit několika způsoby.
1. Bufferování.
$string = 'foo{obsah}bar';

//pokud je {obsah} použité alespoň jednou
if (strpos($string, '{obsah}') !== false) {
	ob_start();
	include '/tmp/foo.php';
	$buffer = ob_get_contents();
	ob_clean();
	$string = str_replace('{obsah}', $buffer, $string);
}

echo $string;

2. Rozdělení řetězce do pole a při iteraci echo použít include.

Edit: Ha, byl jsem pomalejší, nevadí... :)
nym
Profil *
martindeveloper, Majkl578
Ano, nejspíš to bude ono. Jen by mě ještě tak okrajově zajímalo, jestli neexistuje nějaká funkce, která to načte prostě do proměnné a bude to možné zpracovat - i když vlastně asi ne, už melu nesmysly, když se to vlastně ukládá jako string...
martindeveloper
Profil
function getBuffer($file)
{
ob_start();
include( $file) ;
$buffer = ob_get_contents();
ob_end_clean();

return $buffer;
}

$string = str_replace('{obsah}', getBuffer('main_page.php'), $string);
keeehi
Profil
Máš asi na mysli eval?
nym
Profil *
martindeveloper:
Díky. Když už jsem u toho s funkcema ob_* - jak je tahle funkce rozšířená? Funguje to všude? Funguje to více než file_get_contents (vím, že pomocí této těch ob_* se to dá nahradit)?

keeehi:
Mrknu na to.
mckay
Profil
nym:
Ano, snad fungují všude.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0