Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MVC - nie widzi pliku CSS z layoutu ?
Forum PHP.pl > Forum > PHP > Object-oriented programming
Piotrbaz
Witam

W małej aplikacji opartej o MVC mam jedną klasę modelu, jedną kontrolera i jedną widoku.
Na podstawie $_GET zostaje wywołana odpowiednia metoda kontrolera, która wywołuje sobie model i ładuje odpowiedni widok. Oprócz widoków (w których z założenia ma być html + dane do wyświetlenia) jest też layout z plikiem .css itd.

Struktura zamieszanych w sprawę katalogów:

/layouts
---/default
---index.php
-------/css
-------style.css

/views
-widok1.php

etc.


Akcja: odpalam aplikację, zostaje wywołana domyślna metoda kontrolera, domyślna akcja modelu i domyślny widok. Bootstrap -> kontroler -> widok
Problem: wyświetla layout, wyświetla widok z danymi, ale nie respektuje pliku style.css z layoutu, mimo, że podana jest ścieżka bezpośrednia. Strona wyświetla się, jakby .css w ogóle nie było.
No siedzę nad tym cały dzień i nie ogarniam co_jest.gif


domyślna metoda z kontrolera:
  1. $this -> view -> set_View("widok1");
  2. $this -> view -> set_Data($data);
  3. $this -> view -> load_View();


klasa widoku:
  1. class View {
  2.  
  3. public $current_view = null;
  4. public $data = null;
  5.  
  6. public function set_View($view){
  7.  
  8. $this -> current_view = $view;
  9.  
  10. }
  11.  
  12. public function set_Data($data){
  13.  
  14. $this -> data = $data;
  15.  
  16. }
  17.  
  18. public function load_View(){
  19.  
  20. include('layouts/default/index.php');
  21.  
  22. }
  23.  
  24. }


layouts/default/index.php
  1. <html>
  2. <head>
  3. <title></title>
  4.  
  5. <link rel="stylesheet" type="text/css" href="layouts/default/css/style.css">
  6.  
  7. </head>
  8.  
  9. <body>
  10.  
  11. <h1>Layout</h1>
  12.  
  13. <?php
  14.  
  15. include("views/{$this -> current_view}.php");
  16.  
  17. var_dump($this -> data);
  18.  
  19.  
  20. ?>
  21.  
  22. </body>
  23.  
  24. </html>


Z braku pomysłu, wszędzie powpisywałem scieżki bezpośrednie i problem jest jak był.
Jeżeli potrzeba więcej danych, piszcie.
memory
  1. layouts/default/css/style.css
powinno być raczej
  1. /layouts/default/css/style.css


odpal np w chorme "zbadaj element" i sprawdz gdzie przekierowuje css
aras785
Ścieżka: http://site.pl/.../style.css
Sprawdź base smile.gif
CuteOne
index.php
  1. define('ROOT_PATH', realpath(dirname(__FILE__)));


  1. <link src="<?=ROOT_PATH?>/layouts/css/style.css">


ps. do dodawania ścieżek stworzył bym odpowiednie metody w widoku np. addStylePath('sciezka'), setStylePath(), setBasePath() itd.
Piotrbaz
realpath(dirname()) zwraca mi ścieżkę w postaci:

  1. <link src="C:\wamp\www\nazwa_projektu/layouts/default/css/style.css">

no i na localhoscie nie smignie



p.s. zbadałem ten element w chrome i ścieżka jaką mi pokazuje to
  1. http://localhost/nazwa_projektu/layouts/default/css/style.css

więc niby dobrze, ale dalej źle, bo stronę wyświetla bez css
CuteOne
Mój błąd ;P zapomniałem, że pliki css to nie php...

<link href="/layouts/default/css/style.css" rel="stylesheet" type="text/css" />
lub
<link href="css/style.css" rel="stylesheet" type="text/css" />
lub
<link href="/css/style.css" rel="stylesheet" type="text/css" />
Piotrbaz
Tak, próbowałem każdej kombinacji ścieżek i nic. Tu jest jakiś inny problem ;/

Ścieżka jest prawidłowa (po kliknięciu otwiera się style.css), a narzędzie Chrome pokazuje mi ostrzeżenie przy style.css: Failed to load resource.


*advertisement to główny folder projektu


No nic, będę próbował do skutku, może założę nowy projekt. worriedsmiley.gif
aras785
Otwierasz sobie w przeglądarce ten styl, czyli: localhost/twoja_strona/layout/css/style.css. Jeśli strona się otworzyła i widzisz zawartość style css to robisz gdzieś w błąd w scieżce, a jeśli nic Ci nie pokaże (obstawiam ten scenariusz) to znaczy, że nie masz dostępu do tego folderu smile.gif .htaccess

Pozdrawiam
Piotrbaz
Styl jak najbardziej się otwiera, a cały myk polega na tym, że i ścieżka wydaje się być dobra sleep.gif

Otwieram index.php swojej aplikacji, PPM -> pokaż źródło strony i co widzę:

  1. <head>
  2.  
  3. <link href="layouts/default/css/style.css" rel="stylesheet" type="text/css" />
  4. </head>
  5.  
  6. (...)


po kliknięciu na wartość atrybutu href otwiera się styl! i widzę kod z pliku.


Czarna magia oO
Najgorzej, że to jak zwykle jest jakiś banał, o którym człowiek nawet nie pomyśli...



================================================================================
========


Ok, problem rozwiązany. Nie wiadomo co to było, może coś netbeans zamieszał ze ścieżkami.

Założyłem nowy projekt, skopiowałem kod do nowych plików, zapisałem i bum, działa. php.gif
Nie wierzę, że straciłem tyle czasu na coś takiego.

Dzięki wszystkim za próbę pomocy.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.