Hallo allerseits,
Vorweg, ich bin ein ziemlicher Noob im OOP - bitte habt etwas Gnade.
folgendes Vorhaben: ich will ein kleines Templatesystem bauen - OOP learning.
Nun scheitere ich schon so ziemlich am Anfang - genauer beim "loop".
Ich will das ganze so aufbauen:
index.php
"title" & "nav" sind variablen - welche ich mit __set() und __get() in die Klasse zurück übergebe:
template.php
Jetzt passiert jedoch folgendes, wo ich mir grad die Zähne daran ausbeiße.
"$tpl->nav[]" wird nicht in die $values übernommen, ein Auszug wie das ganze jetzt ausschaut:
Ich weiß nicht weiter - wie bekomme ich das "nav-array" in die $values ?
Mit ArrayAccess habe ich es auch versucht - lt. Google-Recherche - jedoch erfolglos.
Danke im voraus für eure Hilfe.
Vorweg, ich bin ein ziemlicher Noob im OOP - bitte habt etwas Gnade.
folgendes Vorhaben: ich will ein kleines Templatesystem bauen - OOP learning.
Nun scheitere ich schon so ziemlich am Anfang - genauer beim "loop".
Ich will das ganze so aufbauen:
index.php
PHP-Code:
<?php
require('template.php');
$tpl = new Template('default.html');
$tpl->title = 'Test';
$tpl->nav[] = ['item' => 'Home'];
$tpl->nav[] = ['item' => 'About'];
echo $tpl->html();
template.php
PHP-Code:
<?php
class Template {
protected $path,
$values = array();
public function __construct(string $path) {
$this->path = $path;
}
public function html() : string {
if(!file_exists($this->path))
return "Error loading template file $this->path";
$output = file_get_contents($this->path, FILE_USE_INCLUDE_PATH);
foreach($this->values as $key => $value) {
$tag = "{".$key."}";
$output = str_replace($tag, $value, $output);
}
return $output;
}
public function __set($key, $value) {
$this->values[$key] = $value;
}
public function &__get($name) {
return $this->$name;
}
}
"$tpl->nav[]" wird nicht in die $values übernommen, ein Auszug wie das ganze jetzt ausschaut:
PHP-Code:
Template Object (
[path:protected] => default.html
[values:protected] => Array
(
[title] => Test
)
[nav] => Array
(
[0] => Array
(
[item] => Home
)
[1] => Array
(
[item] => About
)
)
)
Mit ArrayAccess habe ich es auch versucht - lt. Google-Recherche - jedoch erfolglos.
Danke im voraus für eure Hilfe.
Kommentar