[Zend + Smarty] Css wordt niet geladen in Controller
Ik aan het experimenteren met Zend framework waarin ik Smarty heb geïntegreerd. Maar nu ondervind het probleem dat wanneer NIET de IndexController aanspreek dat mijn CSS niet geladen wordt.
Dit is mijn directory structuur
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/myapp
/Application
/configs
/models
/modules
/default
/controllers
IndexController.php
UserController.php
/views
/templates
/index
index.tpl
/user
index.tpl
edit.tpl
layout.php --(is de standaard layout file, zit in de templates map)
......
/public
/assets
/css
site.css
/lib
bootstrap.css
Nu staat in de layout.tpl het volgende:
Code (php)
1
2
2
<link href="assets/libs/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<link href="assets/css/site.css" rel="stylesheet" type="text/css" />
<link href="assets/css/site.css" rel="stylesheet" type="text/css" />
Met de bovenstaande code wordt alles netjes weergegeven wanneer ik naar localhost/public of localhost/public/index ga.
maar wanneer ik bijvoorbeeld de onderstaande adressen navigeer:
Code (php)
1
2
3
4
2
3
4
* localhost/public/index/test
* localhost/public/user/
* localhost/public/user/index
* localhost/public/user/edit
* localhost/public/user/
* localhost/public/user/index
* localhost/public/user/edit
dan wordt de CSS NIET meer geladen (de .tpl templates worden wel geladen)
Nu dacht ik al dat het ergens aan de paden in de layout.tpl lag en dit klopt wanneer ik die wijzig in:
Code (php)
1
2
2
<link href="../assets/libs/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<link href="../assets/css/site.css" rel="stylesheet" type="text/css" />
<link href="../assets/css/site.css" rel="stylesheet" type="text/css" />
dan wordt de CSS WELgeladen bij de volgende adressen.
Het probleem zit hem duidelijk in het pad naar de CSS file. Maar ik heb niet zo goed een idee hoe ik dit zou kunnen oplossen. Daarom mijn vraag: weet iemand van jullie misschien een oplossing?
Bij voorbaat dank!
nadat ik die regels geplaats had hou ik nu de volgende paden aan in layout.tpl
Code (php)
1
2
2
<link href="assets/libs/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<link href="assets/css/site.css" rel="stylesheet" type="text/css" />
<link href="assets/css/site.css" rel="stylesheet" type="text/css" />
maar dit werkte helaas niet..
Edit #1:
misschien dat ik een workaround gevonden heb, maar ik twijfel sterk aan als dit wel een goede optie is.
ik zou hard in de code kunnen zeggen (omdat we toch vanuit de public werken en omdat alles vanuit de public toegangelijk is:
volgens mij zou dit ook in een productieomgeving moeten werken, bijv:
Dit heb ik getest en dit werkt.
Alleen iets zegt mij dat dit niet de bedoeling is, weet iemand waarom dit nou zou niet moeten? het mooiste zou zijn om een soort dynamische pad te maken en dat ik die er steeds voor kan zetten.
bijv iets met smarty:
Alleen de vraag is dan, hoe genereer ik zo'n dynamisch pad, en op welke plek kan ik deze dan assignen zodat deze smarty variabele globaal aanspreekbaar is voor alle views.
Edit #2:
Ik heb nu een class gemaakt die in elke view smarty variabelen kan zetten. die ik in de templates (views) dus op kan vragen. hiermee kan ik dus misschien ook een soort van basePath variable instellen zodat: de onderstaande code mogelijk wordt in de template files:
Maar nu lukt het me maar niet een pad te maken waarmee ik altijd gegarandeerd in de /public map terecht kom.
iemand een idee?
En ik denk dat het daarom bij jou fout gaat.
Misschien kun je de baseurl in je bootstrap aanpassen:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
protected function _initBaseUrl() {
$fc = Zend_Controller_Front::getInstance();
$fc->setBaseUrl('/public');
}
?>
protected function _initBaseUrl() {
$fc = Zend_Controller_Front::getInstance();
$fc->setBaseUrl('/public');
}
?>
Bedankt voor je reactie, helaas werkt de bovenstaande oplossing ook niet.