diff options
Diffstat (limited to 'includes/template.php')
-rw-r--r-- | includes/template.php | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/includes/template.php b/includes/template.php new file mode 100644 index 0000000..d777475 --- /dev/null +++ b/includes/template.php | |||
@@ -0,0 +1,164 @@ | |||
1 | <?php | ||
2 | /* | ||
3 | 444444444 | ||
4 | 4::::::::4 | ||
5 | 4:::::::::4 | ||
6 | 4::::44::::4 | ||
7 | 4::::4 4::::4 Four Island | ||
8 | 4::::4 4::::4 | ||
9 | 4::::4 4::::4 Written and maintained by Starla Insigna | ||
10 | 4::::444444::::444 | ||
11 | 4::::::::::::::::4 includes/template.php | ||
12 | 4444444444:::::444 | ||
13 | 4::::4 Please do not use, reproduce or steal the | ||
14 | 4::::4 contents of this file without explicit | ||
15 | 4::::4 permission from Hatkirby. | ||
16 | 44::::::44 | ||
17 | 4::::::::4 | ||
18 | 4444444444 | ||
19 | */ | ||
20 | |||
21 | if (!defined('S_INCLUDE_FILE')) {define('S_INCLUDE_FILE',1);} | ||
22 | |||
23 | require('headerproc.php'); | ||
24 | |||
25 | class FITemplate | ||
26 | { | ||
27 | |||
28 | var $file; | ||
29 | var $tags; | ||
30 | var $blocks; | ||
31 | var $refs; | ||
32 | |||
33 | function FITemplate($filename) | ||
34 | { | ||
35 | $tfn = 'theme/' . $filename . '.tpl'; | ||
36 | if (file_exists($tfn)) | ||
37 | { | ||
38 | $this->file = $tfn; | ||
39 | } else { | ||
40 | throw new Exception($tfn . ' does not exist'); | ||
41 | } | ||
42 | } | ||
43 | |||
44 | function add($name, $value) | ||
45 | { | ||
46 | $this->tags[$name] = $value; | ||
47 | } | ||
48 | |||
49 | function adds($tagarr) | ||
50 | { | ||
51 | foreach ($tagarr as $name => $value) | ||
52 | { | ||
53 | $this->add($name,$value); | ||
54 | } | ||
55 | } | ||
56 | |||
57 | function adds_block($block, $tagarr) | ||
58 | { | ||
59 | if (!isset($this->blocks[$block])) | ||
60 | { | ||
61 | $this->blocks[$block] = array('count' => 1); | ||
62 | } | ||
63 | foreach ($tagarr as $name => $value) | ||
64 | { | ||
65 | $this->blocks[$block][$this->blocks[$block]['count']][$name] = $value; | ||
66 | } | ||
67 | $this->blocks[$block]['count']++; | ||
68 | } | ||
69 | |||
70 | function add_ref($id, $block, $tagarr) | ||
71 | { | ||
72 | $this->adds_block($block,$tagarr); | ||
73 | $this->refs[$id] = &$this->blocks[$block][$this->blocks[$block]['count']-1];//'$this->blocks[\'' . $block . '\'][' . ($this->blocks[$block]['count']-1) . ']'; | ||
74 | } | ||
75 | |||
76 | function adds_ref($id, $tagarr) | ||
77 | { | ||
78 | foreach ($tagarr as $name => $value) | ||
79 | { | ||
80 | $this->refs[$id][$name] = $value; | ||
81 | } | ||
82 | } | ||
83 | function adds_ref_sub($id, $block, $tagarr) | ||
84 | { | ||
85 | if (!isset($this->refs[$id][$block])) | ||
86 | { | ||
87 | $this->refs[$id][$block] = array('count' => 1); | ||
88 | } | ||
89 | foreach ($tagarr as $name => $value) | ||
90 | { | ||
91 | $this->refs[$id][$block][$this->refs[$id][$block]['count']][$name] = $value; | ||
92 | } | ||
93 | $this->refs[$id][$block]['count']++; | ||
94 | } | ||
95 | |||
96 | function display() | ||
97 | { | ||
98 | $template = file_get_contents($this->file); | ||
99 | while (preg_match('/<!--INCLUDE ([^>]*)-->/',$template) == 1) | ||
100 | { | ||
101 | preg_match('/<!--INCLUDE ([^>]*)-->/',$template,$mat); | ||
102 | $fname = $mat[1]; | ||
103 | $itmp = new FITemplate($fname); | ||
104 | $template = str_replace('<!--INCLUDE ' . $fname . '-->',file_get_contents($itmp->file),$template); | ||
105 | } | ||
106 | if (isset($this->tags)) | ||
107 | { | ||
108 | foreach ($this->tags as $name => $value) | ||
109 | { | ||
110 | $template = str_replace('<!--' . $name . '-->',$value,$template); | ||
111 | } | ||
112 | } | ||
113 | if (isset($this->blocks)) | ||
114 | { | ||
115 | foreach ($this->blocks as $bname => $block) | ||
116 | { | ||
117 | $this->parseBlock($template, $bname, $block); | ||
118 | } | ||
119 | } | ||
120 | while (preg_match('/<!--BEGIN ([^>]*)-->/',$template) == 1) | ||
121 | { | ||
122 | preg_match('/<!--BEGIN ([^>]*)-->/',$template,$mat); | ||
123 | $bname = $mat[1]; | ||
124 | $start = strpos($template,'<!--BEGIN ' . $bname . '-->'); | ||
125 | $end = strpos($template,'<!--END ' . $bname . '-->'); | ||
126 | $template = str_replace(substr($template,$start,$end-$start+strlen($bname)+11),'',$template); | ||
127 | } | ||
128 | $template = preg_replace('/<!--([^>]*)-->/','',$template); | ||
129 | |||
130 | echo($template); | ||
131 | } | ||
132 | |||
133 | function parseBlock(&$template, $bname, $block) | ||
134 | { | ||
135 | while (strpos($template,'<!--BEGIN ' . $bname . '-->') !== FALSE) | ||
136 | { | ||
137 | $start = strpos($template,'<!--BEGIN ' . $bname . '-->'); | ||
138 | $end = strpos($template,'<!--END ' . $bname . '-->'); | ||
139 | $gencont = substr($template,$start+strlen($bname)+13,$end-$start-strlen($bname)-13); | ||
140 | $blockcont = ''; | ||
141 | foreach ($block as $lname => $blocktags) | ||
142 | { | ||
143 | if ($lname != 'count') | ||
144 | { | ||
145 | $scrcont = $gencont; | ||
146 | foreach ($blocktags as $name => $value) | ||
147 | { | ||
148 | if (!is_array($value)) | ||
149 | { | ||
150 | $scrcont = str_replace('<!--' . $bname . '.' . $name . '-->',$value,$scrcont); | ||
151 | } else { | ||
152 | $this->parseBlock($scrcont, $bname . '.' . $name, $value); | ||
153 | } | ||
154 | } | ||
155 | $blockcont .= $scrcont; | ||
156 | } | ||
157 | } | ||
158 | $template = str_replace(substr($template,$start,$end-$start+strlen($bname)+11),$blockcont,$template); | ||
159 | } | ||
160 | } | ||
161 | |||
162 | } | ||
163 | |||
164 | ?> | ||