[PHP] template engine

Pokusavam da napravim klasu da pozivanje templatea da odvojim php od html, medjutim nailazim na jedan problem klasa loada html template ali nece da mi prikazuje varijable iz php-a u html-u

Ovako to izgleda imam folder “templates” tu se nalazi naprimjer contact.html, u root folderu imam contact.php

Sve ide preko index.php

Evo kod da vidite index.php

<?php

error_reporting(E_ALL);

/**
* class that loads html template into php file
*/
class loadTemp
{

function load_template($template, $ext='html', $calledfrom='root')
{

	$templatefolder = 'templates';

	if ($calledfrom=='root')
	{
		return str_replace("\"", "\\\"", file_get_contents($templatefolder.'/'.$template.'.'.$ext));
	}
}
}

$html = new loadTemp();

?>

<!DOCTPYE html>
<html lang="en">
<head>
	<title></title>

<head/>

<body>

	<h1>Header</h1>
	<hr />
	<div id="nav">
		<a href="index.php">Home</a>&nbsp;|&nbsp;
		<a href="index.php?page=contact">Contact</a>
	</div>
	<hr />

	<?php
	  if (isset($_GET['page'])) {
	  $page = $_GET['page'].'.php';
	  if(file_exists($page)) {
	  include $page;
	  } else { echo '<p>That page doesn\'exists.</p>'; }
	  } else { include 'home.php'; }
	?>		

	<hr />
	<div id="footer">
		<p>&copy; 2015 Site name</p>
	</div>

</body>
</html>

ovo je contact.php u root folderu

<?php

$broj = '10';


// pozovi template
$contact = $html->load_template('contact');
echo $contact;

?>

i ovo je contact.html u templates folderu

<h1>Contact</h1>

$broj

E sad me zanima kako da ova varijabla $broj prikaze 10 iz contact.php-a. Znaci pravim formu samo u html-u a u php-u je samo radnja, i molim vas nemojte mi o template enginima jer sam probo skoro sve i odvratni su a nisam jos tolko iskusan da radim OOP i u nekom frameworku. Samo zelim rjesenje ove solucije ako postoji i da radi na trenutnoj verziji php-a +.

napravi da ti taj template inkluda sa require ili include funkcijom ili ovaj rezultat sto si dobio sa file_get_contents provuci kroz eval funkciju

Recimo mozes ovako:

index.php:

<?php

error_reporting(E_ALL);

/**
* class that loads html template into php file
*/
class loadTemp
{
    private $variables=[];
    function set_var($name, $value)
    {
        $this->variables[$name] = $value;    
    }

    function load_template($template, $ext='html', $calledfrom='root')
    {

        $templatefolder = 'templates';

        if ($calledfrom=='root')
        {
            extract($this->variables);
            ob_start();
            include $templatefolder.'/'.$template.'.'.$ext;
            return ob_get_clean();
        }
    }
}

$html = new loadTemp();
$broj = '10';
$html->set_var('broj', $broj);
// pozovi template
$contact = $html->load_template('contact', 'php');
echo $contact;

?>

contact.php:

<h1>Contact</h1>

<?php
	echo $broj;
?>

Rjeseno evo koda ako kome bude posluzio

funkcija za pozivanje template-a iz foldera templates/

function load_template($template, $ext='html', $calledfrom='root')
{
$templatefolder = 'templates'; // folder gdje se nalaze html datoteke

if ($calledfrom=='root')
{
	return str_replace("\"", "\\\"", (file_get_contents($templatefolder.'/'.$template.'.'.$ext));
}
}

I sad u php-u npr za prikaz profila korisnika “profile.php” iz root foldera

<?php
 $user_data = $users->get_user_data();

$ime = $user_data['ime'];

 // pozovi template
eval("\$profile = \"".load_template("profile")."\";");
echo $profile;

?>

Sada napravite profile.html u templates folderu i napravite izgled prikaza profila i samo dodate npr

<div>
  Name : $ime
</div>

I to je to prikazuje vam ime korisnika i ostale varijable koje postavite. Eto ako ce nekome pomoci.

Napomena ovo je testirano samo ako koristite file da pozivate stranicu preko url-a ovako index.php?stranica=profile&id=2

ovo stranica nije bitno ni id moze se svati kako hocete samo isprobajte :stuck_out_tongue:

Ako imam array, kako nesto ucinit sa njim, recimo ispisati svaki clan arraya?

foreach petljom:

foreach($your_array as $key=>$value) {
    echo 'index is '.$key.' and value is '.$value;
}

Samo u php datoteci postavis array npr $slike = array(1,2,3,4,5,6,7,8); i onda u html datoteci si napravis foreach petlju da izvuces podatke iz nje.

profile.php sam napravio:

<?php
 $user_data = $users->get_user_data();
$your_array = array('jedan'=>1, 'dva'=>2);
$ime = $user_data['ime'];

 // pozovi template
eval("\$profile = \"".load_template("profile")."\";");
echo $profile;

?>

profile.html:

<div>
  Name : $ime
</div>
foreach($your_array as $key=>$value) {
    echo 'index is '.$key.' and value is '.$value;
}

I nece da mi radi.

Fale ti php tagovi kad radis foreach petlju trebas php tagove znaci ovako

 <div>
Name : $ime
</div>
<?php 
foreach($your_array as $key=>$value) {
     echo 'index is '.$key.' and value is '.$value;
}
?>

To takodjer ne radi.
Jel tebi radi?

Radi ( jebem ti 20 znakova ) .