Preg_replace() probleem!
Ik heb een heel raar probleem, de block gedeelte willen niet vervangen worden!
ik ben al 2 dagen mee bezig geweest!
willen jullie helpen?
Voorbeeld: http://lexoft.nl/tpl/test2/
Snippet Code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
public function getContentInBlock($blockname) {
$regex = "/\[begin-block: ".$blockname."\](.+?)\[end-block: ".$blockname."\]/";
return preg_replace($regex,"\\3",unserialize($this->code));
}
public function replaceBlock($blockname,$output,$code) {
$regex = "/\[begin-block: ".$blockname."\](.+?)\[end-block: ".$blockname."\]/";
return preg_replace($regex,$output,$code);
}
?>
public function getContentInBlock($blockname) {
$regex = "/\[begin-block: ".$blockname."\](.+?)\[end-block: ".$blockname."\]/";
return preg_replace($regex,"\\3",unserialize($this->code));
}
public function replaceBlock($blockname,$output,$code) {
$regex = "/\[begin-block: ".$blockname."\](.+?)\[end-block: ".$blockname."\]/";
return preg_replace($regex,$output,$code);
}
?>
Groetjes Alex
- het teken '-' heeft in een character class een speciale betekenis, misschien ook daarbuiten? misschien denkt de regex wel "iets tussen 'n' en 'b'" bij begin-block. Dan zou je deze moeten escapen: \-
- bestaat $blockname alleen uit letters? zo nee, dan moet je hem escapen met preg_quote()
Gewijzigd op 10/09/2010 17:59:49 door Marco van Oort
Ik heb het veranderd, er gebeurd niks
Toevoeging op 10/09/2010 20:08:52:
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<?php
class templateParser {
/* @desc In deze variabele wordt de hele file tijdelijk opgeslagen */
public $code;
/* @desc In deze variabele wordt alle data opgeslagen die te maken heeft met het vervangen van html
Blocks:
$_replacedata['block']['<naamvanblock>']['contentblock']; Hierin wordt opgeslagen wat tussen de [begin-block: <naamvanblock>] en [end-block: <naamvanblock>] staat.
$_replacedata['block']['<naamvanblock>'][<oplopend nummer>]['var']; hierin wordt de data opgeslagen.
Files:
$_replacedata['include'][] = <naamvanbestand>; hierin wordt de naam van de bestanden opgeslagen.
Vars:
$_replacedata['var']['<varnaam>']; Hierin worden de vars opgeslagen
*/
public $_replacedata;
public function loadTemplate($tFile) {
if(file_exists($tFile)) {
$this->code = serialize(file_get_contents($tFile));
} else {
echo 'Couldn\'t load the template file.';
}
}
public function assignBlock($blockname,$array_met_values) {
$block_content = $this->getContentInBlock($blockname);
$this->_replacedata['block'][$blockname] = $array_met_values;
$this->_replacedata['block'][$blockname]['contentblock'] = $block_content;
}
public function assignVar($var,$value) {
$this->_replacedata['var'][$var] = $value;
}
public function assignVars($vars,$replacements) {
if(!is_array($vars) || !is_array($replacements)) {
$this->assignVar($vars,$replacements);
} else {
for($i=0; $i < count($vars); $i++) {
$this->_replacedata['var'][$vars[$i]] = $replacements[$i];
}
}
}
public function assignIncludeContent($filename) {
if(file_exists($filename)) {
$this->_replacedata['include'][] = $filename;
}
}
public function getContentInBlock($blockname) {
$regex = "/\[begin-block: ".$blockname."\](.+?)\[end-block: ".$blockname."\]/";
return preg_replace($regex,"\\3",unserialize($this->code));
}
public function replaceBlock($blockname,$output,$code) {
$regex = "/\[begin-block: ".$blockname."\](.+?)\[end-block: ".$blockname."\]/";
return preg_replace($regex,$output,$code);
}
function parse() {
$code = unserialize($this->code);
//de blocks verwerken
if(is_array($this->_replacedata['block'])) {
foreach($this->_replacedata['block'] as $blockname => $values) {
$contentblock = $values['contentblock'];
$block_output = '';
for($i = 0; $i < (count($values) - 1);$i++) {
$rij = $contentblock;
foreach($values[$i] as $var => $replacement) {
$rij = str_replace('{'.$var.'}',$replacement,$rij);
}
$block_output .= $rij;
}
$code = $this->replaceBlock($blockname,$block_output,$code);
}
}
//de vars verwerken
if(is_array($this->_replacedata['var'])) {
foreach($this->_replacedata['var'] as $key => $value) {
$code = str_replace('{'.$key.'}',$value,$code);
}
}
if(is_array($this->_replacedata['include'])) {
foreach($this->_replacedata['include'] as $file) {
$contents_file = file_get_contents($file);
$regex = "/\[file: ".$file."\]/";
$code = preg_replace($regex,$contents_file,$code);
}
}
if($display) {
echo $code;
} else {
return $code;
}
}
}
?>
class templateParser {
/* @desc In deze variabele wordt de hele file tijdelijk opgeslagen */
public $code;
/* @desc In deze variabele wordt alle data opgeslagen die te maken heeft met het vervangen van html
Blocks:
$_replacedata['block']['<naamvanblock>']['contentblock']; Hierin wordt opgeslagen wat tussen de [begin-block: <naamvanblock>] en [end-block: <naamvanblock>] staat.
$_replacedata['block']['<naamvanblock>'][<oplopend nummer>]['var']; hierin wordt de data opgeslagen.
Files:
$_replacedata['include'][] = <naamvanbestand>; hierin wordt de naam van de bestanden opgeslagen.
Vars:
$_replacedata['var']['<varnaam>']; Hierin worden de vars opgeslagen
*/
public $_replacedata;
public function loadTemplate($tFile) {
if(file_exists($tFile)) {
$this->code = serialize(file_get_contents($tFile));
} else {
echo 'Couldn\'t load the template file.';
}
}
public function assignBlock($blockname,$array_met_values) {
$block_content = $this->getContentInBlock($blockname);
$this->_replacedata['block'][$blockname] = $array_met_values;
$this->_replacedata['block'][$blockname]['contentblock'] = $block_content;
}
public function assignVar($var,$value) {
$this->_replacedata['var'][$var] = $value;
}
public function assignVars($vars,$replacements) {
if(!is_array($vars) || !is_array($replacements)) {
$this->assignVar($vars,$replacements);
} else {
for($i=0; $i < count($vars); $i++) {
$this->_replacedata['var'][$vars[$i]] = $replacements[$i];
}
}
}
public function assignIncludeContent($filename) {
if(file_exists($filename)) {
$this->_replacedata['include'][] = $filename;
}
}
public function getContentInBlock($blockname) {
$regex = "/\[begin-block: ".$blockname."\](.+?)\[end-block: ".$blockname."\]/";
return preg_replace($regex,"\\3",unserialize($this->code));
}
public function replaceBlock($blockname,$output,$code) {
$regex = "/\[begin-block: ".$blockname."\](.+?)\[end-block: ".$blockname."\]/";
return preg_replace($regex,$output,$code);
}
function parse() {
$code = unserialize($this->code);
//de blocks verwerken
if(is_array($this->_replacedata['block'])) {
foreach($this->_replacedata['block'] as $blockname => $values) {
$contentblock = $values['contentblock'];
$block_output = '';
for($i = 0; $i < (count($values) - 1);$i++) {
$rij = $contentblock;
foreach($values[$i] as $var => $replacement) {
$rij = str_replace('{'.$var.'}',$replacement,$rij);
}
$block_output .= $rij;
}
$code = $this->replaceBlock($blockname,$block_output,$code);
}
}
//de vars verwerken
if(is_array($this->_replacedata['var'])) {
foreach($this->_replacedata['var'] as $key => $value) {
$code = str_replace('{'.$key.'}',$value,$code);
}
}
if(is_array($this->_replacedata['include'])) {
foreach($this->_replacedata['include'] as $file) {
$contents_file = file_get_contents($file);
$regex = "/\[file: ".$file."\]/";
$code = preg_replace($regex,$contents_file,$code);
}
}
if($display) {
echo $code;
} else {
return $code;
}
}
}
?>