TemplateParser error; kan geen methods gebruiken
Ik heb een templateparser gemaakt, en loop tegen een probleem aan.
Er is een index die de classes required en instantieerd. Een van de geinstantieerde classes is de template class, die laad de template, en displayed hem. Nu is het zo; dat wanneer ik een method aanroep van een class die geinstantieerd is in de index, in bijvoorbeeld home.php (template bestand), dan geeft hij een error dat de method niet bestaat én de desbetreffende class niet.
De template class buffert de pagina die opgeroepen wordt in de index.
Index.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
// Require all needed files.
require 'classes/functions.class.php';
require 'classes/template.class.php';
// Instantiate all classes.
$functions = new functions();
$engine = new template();
// Create variables for the template system.
$engine->set_variable('websiteName', 'Marvaq');
$engine->set_variable('domain', 'marvaq.nl');
$engine->set_variable('date', date('Y'));
// Load and display template.
$engine->parse_variables($engine->build_template(isset($_GET['p']) ? $_GET['p'] : 'home'));
?>
// Require all needed files.
require 'classes/functions.class.php';
require 'classes/template.class.php';
// Instantiate all classes.
$functions = new functions();
$engine = new template();
// Create variables for the template system.
$engine->set_variable('websiteName', 'Marvaq');
$engine->set_variable('domain', 'marvaq.nl');
$engine->set_variable('date', date('Y'));
// Load and display template.
$engine->parse_variables($engine->build_template(isset($_GET['p']) ? $_GET['p'] : 'home'));
?>
template.class.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
class template
{
// Template directory.
public $template_dir = 'template/';
// File extension.
public $file_ext = '.php';
// Properties containing the page and variables.
private $_page, $_vars = array();
public function set_variable($key, $value)
{
$this->_vars[$key] = $value;
}
public function build_template($file)
{
if(is_dir($this->template_dir))
{
if(file_exists($this->template_dir . $file . $this->file_ext))
{
$this->buffer($this->template_dir . $file . $this->file_ext);
// Return output buffer.
return $this->_page;
}
else
{
if(file_exists($this->template_dir . '404' . $this->file_ext))
{
$this->buffer($this->template_dir . '404' . $this->file_ext);
// Return output buffer.
return $this->_page;
}
else
{
trigger_error('Template error: Could not find ' . $this->template_dir . '404' . $this->file_ext);
}
}
}
else
{
trigger_error('Template error: Could not find ' . $this->template_dir);
}
}
public function buffer($path)
{
// Start output buffering.
ob_start();
// Include webpage.
require $path;
$this->_page = ob_get_contents();
ob_end_clean();
}
public function parse_variables($input)
{
if(count($this->_vars) > 0)
{
foreach($this->_vars as $key => $value)
{
$input = str_replace('{' . $key . '}', $value, $input);
}
}
echo $input;
}
}
?>
class template
{
// Template directory.
public $template_dir = 'template/';
// File extension.
public $file_ext = '.php';
// Properties containing the page and variables.
private $_page, $_vars = array();
public function set_variable($key, $value)
{
$this->_vars[$key] = $value;
}
public function build_template($file)
{
if(is_dir($this->template_dir))
{
if(file_exists($this->template_dir . $file . $this->file_ext))
{
$this->buffer($this->template_dir . $file . $this->file_ext);
// Return output buffer.
return $this->_page;
}
else
{
if(file_exists($this->template_dir . '404' . $this->file_ext))
{
$this->buffer($this->template_dir . '404' . $this->file_ext);
// Return output buffer.
return $this->_page;
}
else
{
trigger_error('Template error: Could not find ' . $this->template_dir . '404' . $this->file_ext);
}
}
}
else
{
trigger_error('Template error: Could not find ' . $this->template_dir);
}
}
public function buffer($path)
{
// Start output buffering.
ob_start();
// Include webpage.
require $path;
$this->_page = ob_get_contents();
ob_end_clean();
}
public function parse_variables($input)
{
if(count($this->_vars) > 0)
{
foreach($this->_vars as $key => $value)
{
$input = str_replace('{' . $key . '}', $value, $input);
}
}
echo $input;
}
}
?>
functions.class.php
Code (php)
home.php
Ik denk dat het er mee te maken heeft dat de pagina word gebufferd.
Alvast bedankt.
Met vriendelijke groet,
Stan.
Gewijzigd op 31/03/2013 20:11:19 door Stan vk
Binnen je geinclude file heb je niet de beschikking over alle variablen die je daarbuiten hebt aangemaakt. Oftewel $function bestaat helemaal niet
bestand1.php:
bestand2.php:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
ob_start();
require 'file3.php';
$pagina = ob_get_contents();
ob_end_clean();
echo $pagina;
?>
ob_start();
require 'file3.php';
$pagina = ob_get_contents();
ob_end_clean();
echo $pagina;
?>
bestand3.php:
Alleen hier werkt het wel, wat naar mijn mening het probleem nog ingewikkelder maakt. Blijkbaar gaat er iets fout bij de templateParser. Ik heb alleen geen idee wat er nou precies mis gaat. Iniedergeval alvast bedankt.
Met vriendelijke groet,
Stan