Het probleem
Ik heb een extended class voor Smarty gemaakt die een paar dingen extra kan die ik nodig heb.
Hieronder staan de relevante stukken:
Zoals je ziet register ik in Smarty 2 custom functies die er voor zorgen dat ik in de templates css en js files kan includen zodra ik ze nodig heb, en dat die netjes in de head van mijn pagina komen te staan.
Het probleem is dat de functie wel werkt, en er ook echt dingen assigned worden, - getest door op dat punt te die(print_r)'en - maar op een of andere manier zijn de arrays js_stack en css_stack weer leeg zodra ik ze moet assignen aan de template, wat gebeurt in mijn display-functie.
Dit stukkie code wordt gebruikt in een eventplanner voor mijn vriendenkring en het grappige is dat dit letterlijk ook zo voorkomt in mijn CMS, waar het wel gewoon goed werkt.
Wat ik vermoed
Ik vermoed dat als ik in de template de functie include_js aanroep, in php vervolgens de hele zaak opnieuw geinit wordt zodat de js_stack en css_stack weer geleegd worden. Zou haast niet mogen watn mijn CMS template class werkt precies zo en doet het wel goed, maar toch. Anders moet het wel in het feit zitten dat ik in deze class parent:: gebruik.
Wat ik geprobeerd heb
Niet met de static parent:: werken, dus mijn display-functie een andere naam te geven ipv de displayfunctie van Smarty te overwriten.
heel goed gekeken wat het verschil is met de bijna letterlijk hetzelfde zijnde templateclass die in mijn CMS zit en wél werkt.
array_push geprobeerd, wat niet mocht baten. Da's natuurlijk ook gewoon hetzelfde als wat er nu staat, alleen iets mooier.
Ik heb een extended class voor Smarty gemaakt die een paar dingen extra kan die ik nodig heb.
Hieronder staan de relevante stukken:
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
| <?php include($root . '/includes/smarty/Smarty.class.php'); class template extends Smarty { private $css_stack; private $js_stack; public function __construct($tpldir) { parent::__construct(); $this->css_stack = array(); $this->js_stack = array(); $this->register_function('include_css', array(&$this, 'includeCss')); $this->register_function('include_js', array(&$this, 'includeJs')); } public function includeCss($params) { if ($params['file'] != '' /*&& !in_array($params['file'], $this->css_stack)*/) { $this->css_stack[] = $params['file']; } } public function includeJs($params) { if ($params['file'] != '' && !in_array($params['file'], $this->js_stack)) { $this->js_stack[] = $params['file']; } } public function display($tpl) { // Om te testen //die('<pre>' . print_r($this->js_stack,1) . print_r($this->css_stack,1) .'</pre>'); $this->assign('included_css', $this->css_stack); $this->assign('included_js', $this->js_stack); parent::display($tpl); } } ?> |
Zoals je ziet register ik in Smarty 2 custom functies die er voor zorgen dat ik in de templates css en js files kan includen zodra ik ze nodig heb, en dat die netjes in de head van mijn pagina komen te staan.
Het probleem is dat de functie wel werkt, en er ook echt dingen assigned worden, - getest door op dat punt te die(print_r)'en - maar op een of andere manier zijn de arrays js_stack en css_stack weer leeg zodra ik ze moet assignen aan de template, wat gebeurt in mijn display-functie.
Dit stukkie code wordt gebruikt in een eventplanner voor mijn vriendenkring en het grappige is dat dit letterlijk ook zo voorkomt in mijn CMS, waar het wel gewoon goed werkt.
Wat ik vermoed
Ik vermoed dat als ik in de template de functie include_js aanroep, in php vervolgens de hele zaak opnieuw geinit wordt zodat de js_stack en css_stack weer geleegd worden. Zou haast niet mogen watn mijn CMS template class werkt precies zo en doet het wel goed, maar toch. Anders moet het wel in het feit zitten dat ik in deze class parent:: gebruik.
Wat ik geprobeerd heb
Niet met de static parent:: werken, dus mijn display-functie een andere naam te geven ipv de displayfunctie van Smarty te overwriten.
heel goed gekeken wat het verschil is met de bijna letterlijk hetzelfde zijnde templateclass die in mijn CMS zit en wél werkt.
array_push geprobeerd, wat niet mocht baten. Da's natuurlijk ook gewoon hetzelfde als wat er nu staat, alleen iets mooier.
[ Voor 3% gewijzigd door _eXistenZ_ op 17-02-2008 22:25 ]
There is no replacement for displacement!