[Zend + Smarty] Css wordt niet geladen in Controller

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

18/06/2012 20:48:31
Quote Anchor link
Goedendag iedereen,

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)
PHP script in nieuw venster Selecteer het PHP script
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
    
/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)
PHP script in nieuw venster Selecteer het PHP script
1
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" />


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
* localhost/public/index/test
* 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)
PHP script in nieuw venster Selecteer het PHP script
1
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" />


dan wordt de CSS WELgeladen bij de volgende adressen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
* localhost/public/index/test
* localhost/public/user/edit


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!
Gewijzigd op 18/06/2012 21:42:23 door
 
PHP hulp

PHP hulp

21/11/2024 20:56:51
 
Crispijn -

Crispijn -

18/06/2012 22:20:06
Quote Anchor link
Voeg deze regel toe (of iets minder uitgebreid) aan je .htaccess

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
RewriteRule !\.(html|htm|js|ico|txt|gif|jpg|png|css|swf|flv|xml)$ index.php
 

18/06/2012 22:49:01
Quote Anchor link
Bedankt voor je reactie, dit heb ik geprobeerd maar het wou niet baten. ik heb me webserver herstart en me cache geleegd

nadat ik die regels geplaats had hou ik nu de volgende paden aan in layout.tpl

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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" />


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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
[b]http://localhost/websitenaam/[/b]css/site.css


volgens mij zou dit ook in een productieomgeving moeten werken, bijv:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
http://www.website.nl/css/site.css


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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
href="{$baseUrl} /css/site.css}"


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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
href="{$baseUrl} /css/site.css}"


Maar nu lukt het me maar niet een pad te maken waarmee ik altijd gegarandeerd in de /public map terecht kom.

iemand een idee?
Gewijzigd op 18/06/2012 23:53:00 door
 
Tim S

Tim S

19/06/2012 09:09:18
Quote Anchor link
Volgens mij gaat ZF er vanuit dat je public folder de webroot is.
En ik denk dat het daarom bij jou fout gaat.

Misschien kun je de baseurl in je bootstrap aanpassen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
protected function _initBaseUrl() {
   $fc = Zend_Controller_Front::getInstance();
   $fc->setBaseUrl('/public');
}

?>
 

20/06/2012 17:18:59
Quote Anchor link
Bedankt voor je reactie, helaas werkt de bovenstaande oplossing ook niet.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.