2013-08-13 17 views
8

Widziałem wiele pytań dotyczących łączenia z zasobami kompozycji w CakePHP i żaden z nich nie rozwiązuje mojego problemu, a także ostatni wpis był w 2012 roku, więc pomyślałem, że będę ukazywał moje pytanie tam na zewnątrz.Kompozycja tematów Nie działa w CakePHP 2.2.4

Mam zaimplementowane motywy w mojej aplikacji CakePHP 2.2.4. Mój motyw o nazwie "default" (poprzednio nazywany "Default" do 1 minuty temu) znajduje się pod numerem app/View/Themed/default (poprzednio nazwa motywu miała również odpowiednią literę D dla nazwy folderu).

Mój plik css znajduje się app/View/Themed/default/webroot/css/style.css którą nazywamy w app/View/Themed/default/Layouts/default.ctp z następującego kodu układu

Default.ctp

echo $this->Html->css('style'); 

(Próbowałem przy użyciu kapitału W dla Webroot „na wszelki wypadek "ale nic dziwnego, że to nie zadziałało)

Zawarłem ten link w moim AppControllerze, aby ustalić, jakiego tematu używam. Wszystkie pliki widoku wskazują poprawną kompozycję, ale problem jest teraz związany z arkuszem stylów (nie mam jeszcze do czynienia z innymi zasobami, takimi jak pliki js lub pliki obrazów).

AppController

class AppController extends Controller { 

    public $theme = 'default'; // previously 'Default' 
    // also, have used both 'public $theme' and 'var $theme', no difference 

mam przeczytać poniższe pytania i żaden z "rozwiązań" pracowali. Większość rozwiązań polegała na sprawdzaniu pisowni/wielkich liter, sprawdzaniu uprawnień do folderów, sprawdzaniu pliku .htaccess itd. Wciąż nic. I nowe pomysły?

.htaccess

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^$ app/webroot/ [L] 
    RewriteRule (.*) app/webroot/$1 [L] 
</IfModule> 

Pozwolenie folder dla Webroot motyw i CSS są foldery 755.

Oto niektóre zasoby użyłem bez powodzenia.

http://book.cakephp.org/2.0/en/views/themes.html

CakePHP theme resources return error

Unable to get css and image files in Themes webroot folder of cakephp

https://groups.google.com/forum/#!topic/cake-php/xaRAugMoNSc

CakePHP 2.x theme not working

https://groups.google.com/forum/#!topic/cake-php/siYVWchUb1g

AKTUALIZACJA: przy użyciu $this->Html->image('image.jpg') wyświetla poprawnie zdefiniowany obraz pod adresem View/Themed/Default/webroot/img/image.jpg. Jednak użycie $this->Html->css('style') spowoduje pobranie arkusza stylów z app/webroot/css/style.css, a nie z app/View/Themed/Default/webroot/css/style.css. Musiałem również zmienić nazwę motywu i nazwę folderu mojego motywu z powrotem na "Domyślny" z dużą literą D, aby uzyskać poprawne połączenie obrazu. Arkusz stylów nadal nie łączy się poprawnie. Jeśli przejdę bezpośrednio do mojego arkusza stylów w przeglądarce, pojawi się pusta strona. Jeśli przejdę do arkusza stylów, który nie istnieje w moim folderze tematycznym, otrzymam prawidłowy komunikat o błędzie. Jednak wyświetlenie źródła mojego arkusza stylów kompozycji (takiego, który istnieje), pokazuje pustą stronę.

Odpowiedz

1

OK, więc może to oczywiste ... ale mój arkusz stylów wykorzystuje funkcje, które utworzyłem w niestandardowym pomocniku. Kiedy arkusz stylów znajduje się w app/webroot/css, nie ma problemu, ale gdy arkusz stylów znajduje się w app/View/Themed/Default/webroot/css, nie może on być poprawnie wyświetlany, a zatem linki do nieistniejącego arkusza stylów powinny znajdować się w app/webroot/css. Usunąłem pomocników z mojego arkusza stylów i wszystko teraz działa.

Również zmieniłem nazwę motywu z "domyślny" na "Domyślny", aby obrazy mogły być poprawnie wyświetlane przy użyciu $this->Html->image (i prawdopodobnie również arkusza stylów i plików JS), mimo że pliki widoku zostały poprawnie połączone, niezależnie od kapitalizacja.

3

CakePHP korzysta z konwencji CamelCase. Spróbuj zmienić nazwę motywu na przykład z. default do Default. To też mi się przydarzyło.

Mój motyw został nazwany jako megaecia, bez komunikatu o błędzie, bez logu nic (ponieważ byłem systemem Windows, w systemie Unix to się nie stało), a następnie zmieniłem na Megaecia i wszystko działa poprawnie.

Mam nadzieję, że pomogłem.

+0

nie ma różnicy, czy mogę użyć „default” lub "Domyślny" jako nazwa motywu. ** AKTUALIZACJA: ** przy użyciu '$ this-> Html-> image ('image.jpg')' wyświetla poprawnie zdefiniowany obraz znajdujący się w 'View/Themed/Default/webroot/img/image.jpg'. Jednak użycie '$ this-> Html-> css ('style') próbuje pobrać arkusz stylów z' app/webroot/css/style.css', a nie z 'app/View/Themed/Default/webroot/css/style.css' – bowlerae

+3

To wszystko! CakePHP oczekuje, że folder zostanie nazwany przy pomocy CamelCase, bez względu na nazwę tematu określoną za pomocą podrzędnych kontrolek. –

+0

Dokładnie to, co mówi Serge, jeśli masz swój katalog tematyczny małymi literami, po prostu zamień go na wielkie i zadziała – xorinzor

0

pliki atutem tematu muszą być umieszczone w folderze app/webroot/theme w ten sposób:

app/webroot/theme/default/css 
app/webroot/theme/default/js 
app/webroot/theme/default/img 
. . . 

Gdzie default jest nazwa tematu zaczynając od małej litery. Nazwa folderu theme jest zakodowana na stałe. Uwaga: nie ma sufiksu -ed.

Kompozycje motywów należy umieszczać w folderze app/View/Themed/Default/Layouts. Nazwa motywu powinna respektować regułę CamelCase, ponieważ Gabriel Oak odpowiedział. Właściwie to miałem problem, gdy na maszynie linuksowej CakePhp nie był w stanie znaleźć mojego układu, ponieważ nazwałem mój folder motywów małymi literami jak app/View/Themed/default/Layouts.

I jeszcze jedno: w motywie kontrolera należy podać także małymi literami: $this->theme = 'default';. Wpływa na wyszukiwanie zasobów, ponieważ umieściliśmy nasze zasoby w małym folderze app/webroot/theme/default.

0

Jeśli próbujesz uzyskać dostęp do zasobu CSS z podkatalogu webroot twojego motywu, pamiętaj, aby na początku dodać /.

tj

$this->Html->css('/plugins/bespoke.css'); 

Wywoła to CSS z katalogu tematycznego.

jeśli nie dodać / na początku, ciasto nie będzie wyglądać folderu tematycznego, zamiast tego próbuje załadować CSS z domyślnym katalogu webroot swojej aplikacji

Powiązane problemy