2013-08-13 7 views
8

Ho visto molte domande riguardanti il ​​collegamento alle risorse del tema in CakePHP e nessuno di loro sta risolvendo il mio problema e anche il post più recente è stato nel 2012, quindi ho pensato di fluttuare la mia domanda là fuori.Tema Asset non funziona in CakePHP 2.2.4

Ho implementato temi nell'applicazione CakePHP 2.2.4. Il mio tema chiamato "default" (precedentemente chiamato "Default" fino a 1 minuto fa) si trova in app/View/Themed/default (in precedenza il nome del tema aveva anche la corrispondente D maiuscola per il nome della cartella).

Il mio file css si trova a app/View/Themed/default/webroot/css/style.css che io chiamo in app/View/Themed/default/Layouts/default.ctp con il seguente codice di layout

Default.ctp

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

(Ho provato con capitale W per Webroot "just in case "ma nessuna sorpresa che non ha funzionato)

Ho incluso questo collegamento nel mio AppController per stabilire quale tema sto usando. Tutti i file di visualizzazione puntano al tema corretto, ma il problema adesso è con il foglio di stile (devo ancora confondere altre risorse come js o file di immagine).

AppController

class AppController extends Controller { 

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

Ho letto le seguenti domande e nessuna delle "soluzioni" ho lavorato. La maggior parte delle soluzioni consisteva nel controllare l'ortografia/la maiuscola, controllare le autorizzazioni sulle cartelle, controllare il mio file .htaccess, ecc. Ancora niente. E nuove idee?

.htaccess

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

L'autorizzazione della cartella per le cartelle a tema Webroot e CSS sono 755.

Ecco alcune risorse che ho usato senza fortuna.

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

UPDATE: utilizzando $this->Html->image('image.jpg') visualizza correttamente l'immagine definita situata a View/Themed/Default/webroot/img/image.jpg. Tuttavia, l'utilizzo di $this->Html->css('style') tenta di estrarre il foglio di stile da app/webroot/css/style.css e non da app/View/Themed/Default/webroot/css/style.css. Ho anche dovuto cambiare il nome del tema e il nome della cartella del mio tema in "Default" con una D maiuscola per far sì che l'immagine si collegasse correttamente. Il foglio di stile non si collega ancora correttamente. Se navigo direttamente nel mio foglio di stile del tema nel mio browser, viene visualizzata una pagina vuota. Se navigo in un foglio di stile che non esiste nella mia cartella dei temi, ricevo il messaggio di errore corretto. Tuttavia, visualizzando la fonte del mio foglio di stile del tema (quello che esiste), mostra una pagina vuota.

risposta

1

Ok quindi forse questo è ovvio ... ma il mio foglio di stile usa funzioni che ho creato in un Helper personalizzato. Quando il foglio di stile si trova in app/webroot/css, non c'è alcun problema, ma quando il foglio di stile si trova in app/View/Themed/Default/webroot/css non può essere visualizzato correttamente e quindi i collegamenti a torta al foglio di stile inesistente devono trovarsi in app/webroot/css. Ho rimosso gli helper dal mio foglio di stile del tema e tutto funziona ora.

Ho anche ripristinato il nome del tema da "predefinito" a "Predefinito" in modo che le immagini vengano visualizzate correttamente utilizzando $this->Html->image (e presumibilmente anche il foglio di stile e i file JS) anche se i file di visualizzazione erano collegati correttamente indipendentemente la maiuscola.

3

CakePHP utilizza la convenzione CamelCase. Prova a cambiare il nome del tuo tema da es. default a Default. È successo anche a me.

Il mio tema era naming come megaecia, e nessun messaggio di errore, niente log (perché ero windows, in unix non succede) poi ho cambiato in Megaecia e tutto funziona correttamente.

Spero di aver aiutato.

+0

non v'è alcuna differenza se io uso "default" o "Predefinito" come nome del tema. ** AGGIORNAMENTO: ** utilizzando '$ this-> Html-> image ('image.jpg')' visualizza correttamente l'immagine definita situata in 'Visualizza/Temi/Default/webroot/img/image.jpg'. Tuttavia, usando '$ this-> Html-> css ('style')' prova a estrarre il foglio di stile da 'app/webroot/css/style.css' e non da' app/View/Themed/Default/webroot/css/style.css' – bowlerae

+3

Ecco fatto! CakePHP si aspetta che la cartella venga nominata con CamelCase, indipendentemente dal nome del tema specificato con le lettere inferiori nel controller. –

+0

Esattamente quello che dice Serge, se hai la tua directory tematica in minuscolo, limitala e funziona correttamente. – xorinzor

0

file di risorse del tema devono essere posizionati nella cartella app/webroot/theme questo modo:

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

Dove default è nome del tema iniziano con la lettera minuscola. Il nome della cartella theme è hardcoded. Nota, non c'è il suffisso -ed.

I layout dei temi devono essere collocati nella cartella app/View/Themed/Default/Layouts. Il nome del tema dovrebbe rispettare la regola CamelCase come ha risposto Gabriel Oak. In realtà ho avuto il problema quando sulla macchina di Linux CakePhp non è riuscito a trovare il mio layout perché ho chiamato la mia cartella tematica con caratteri minuscoli come app/View/Themed/default/Layouts.

E un'altra cosa: nel tema del controller deve essere specificato anche in minuscolo: $this->theme = 'default';. Influisce sulla ricerca delle risorse, poiché abbiamo collocato le nostre risorse nella cartella in lettere minuscole app/webroot/theme/default.

0

Se si sta tentando di accedere a una risorsa CSS da una sottodirectory del webroot del proprio tema, assicurarsi di aggiungere un / all'inizio.

cioè

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

Ciò chiamerà il CSS dalla cartella del tema.

se non avete aggiunto / all'inizio, torta non cercherà la cartella del tema, invece cerca di caricare il CSS dalla directory predefinita Webroot della tua app

Problemi correlati