ExpressionEngine 2 è un meraviglioso sistema di gestione dei contenuti e probabilmente il CMS più adatto ai progettisti, utilizzato da molti nomi noti, come A List Apart, Andy Clarke e Veerle Pieters. Ironia della sorte, tuttavia, la configurazione di default non è adatta per l'uso in un flusso di lavoro di sviluppo web professionale, che di solito coinvolge più siti, server e sviluppatori.
Questo tutorial ti mostrerà come personalizzare ExpressionEngine 2 in modo che tu possa iniziare a lavorare con un punto di partenza solido ma flessibile che possa essere facilmente implementato in più ambienti in pochi minuti.
Non sono un programmatore. Tuttavia, il mantra di programmazione non ripeterti, o il principio ASCIUTTO per quegli amanti degli acronimi tra noi, ha davvero iniziato a risuonare dentro di me, diventando sempre più coinvolto sia nello sviluppo del web che nella gestione della mia attività. In effetti, DRY è un buon consiglio per vivere la tua vita in generale. Ripetere su se stessi costa più tempo in anticipo, e potenzialmente molto di più lungo la strada se si deve tornare indietro e fare lo stesso cambiamento in più punti.
Inoltre è un ostacolo per la crescita personale perché se stai facendo qualcosa che hai già fatto, non stai imparando qualcosa di nuovo. La cosa migliore è identificare quei luoghi in cui ti ripeti e trovare un sistema per standardizzare quell'attività o parte di dati.
Quando ho iniziato a lavorare con ExpressionEngine un anno e mezzo fa, si trattava di un progetto unico e io ero un designer alle prime armi. Inutile dire che la mentalità di DRY era la cosa più lontana dalla mia mente. Stavo canticchiando felicemente con le ambientazioni, come dettato dalla situazione, non documentando nulla e divertendomi con campi personalizzati e gruppi di template, quelle cose che fanno di EE il sogno di un designer che diventa realtà. Era un po 'come il mio primo appuntamento con il software. Alla fine, mi è piaciuto così tanto EE che ho deciso di diventare esclusivo e "sposarlo" come mio CMS di scelta per tutti i progetti futuri.
Dopo circa il terzo o il quarto sito, tuttavia, ho iniziato a vedere difetti nella nostra relazione (come è probabile che accada quando hai veramente familiarità con qualcosa) e mi sono frustrato nel fare attività umili e ripetitive legate alla distribuzione e alla gestione di EE. Ciò era particolarmente evidente con alcuni progetti in corso che richiedevano aggiornamenti settimanali due o tre volte, dallo sviluppo alla messa in scena ai server live. È arrivato al punto che stavo spendendo quasi tanto tempo nella gestione delle implementazioni come in realtà stavo codificando.
Non contento di perdere denaro e schiavizzare la noiosa fatica, ho cercato di mettere ordine nel caos.
Quello che segue è il frutto del lavoro mio e degli altri, una guida per applicare il principio ASCIUTTO allo sviluppo e alla distribuzione di siti con EE.
Ti guida attraverso il modo in cui ho ottimizzato e personalizzato la configurazione floscia e insensata di ExpressionEngine 2 in un ambiente di lavoro snello ed efficiente che elimina quasi tutte le ripetizioni dal lavorare con EE. Nello specifico, queste modifiche:
Questo è stato uno sforzo piuttosto grande e non avrei potuto farlo da solo. Un grande ringraziamento va alle seguenti persone, che mi hanno aiutato a sapere se lo sapevano o no:
Per motivi di sanità mentale, procurati una copia aggiornata dell'ultima build di EE 2 prima di fare tutto questo. Scarica e installa normalmente, preferibilmente su un server locale, poiché farai molte modifiche ai file. Lasciare i modelli Agile Records quando richiesto.
Prendi i file di esempio inclusi in questo tutorial. Non devi ancora fare nulla con loro, ma tienili a portata di mano.
Se hai mai dovuto migrare ExpressionEngine da un server a un altro, sai che questa operazione non è un'impresa facile; in effetti, è un completo incubo se non sei preparato. Molto di ciò deriva dal fatto che ExpressionEngine memorizza variabili di configurazione e percorsi del server durante tutta la creazione, al punto che è difficile rintracciarli tutti e regolarli quando si spostano i server.
Kenn Wilson di Corvid Works riassume in inglese migliore del mio:
"Questo è ciò che rende Expression Engine così imprevedibile: il passaggio da un server a un altro, ad esempio dallo sviluppo alla produzione, richiede l'aggiornamento di questo URL e informazioni sul percorso in circa una dozzina di posizioni. È goffo, dispendioso in termini di tempo e soggetto a errori ".
Ha ragione. Fortunatamente, c'è un altro modo. Piuttosto che modificare tutte quelle variabili in una dozzina di punti nel pannello di controllo e probabilmente dimenticarne alcuni, puoi consolidarli in un unico posto: i file di configurazione. Esatto, tutti quei campi sono sparpagliati su dozzine di pagine nella tua mappa CP su un paio di file PHP. Per impostazione predefinita, ExpressionEngine memorizza le informazioni di configurazione di cui dovrai preoccuparti in due file. Questi sono:
Sistema / ExpressionEngine / config / config.php
Sistema / ExpressionEngine / config / database.php
Come puoi immaginare, database.php
memorizza le informazioni di connessione al database MySQL. Suppongo che EllisLab prenda la posizione che è più facile trovare le informazioni del DB se è nel proprio file con nome appropriato, ma ho intenzione di discutere il contrario. Questo è ASCIUTTO, dannazione! Preferirei aprire un file e modificare le mie impostazioni da un posto, non da due, quindi l'ho eliminato database.php
del tutto. Beh, non proprio, ma ho preso tutte le impostazioni del database da esso e spostarle in config.php
con un po 'di PHP.
Rinomina il tuo esistente database.php
file per qualcosa di simile old-database.php
e spostalo sul desktop, poiché avrai bisogno delle impostazioni di connessione più tardi. Sostituirlo con il database.php
incluso in questo tutorial e impostare le autorizzazioni su 400 come indicato.
Congratulazioni. Non avrai mai bisogno di preoccuparti database.php
ancora.
Ora che database.php
sta dicendo a ExpressionEngine di cercare le informazioni sulla connessione del database in config.php
dobbiamo metterlo effettivamente lì, ma c'è un problema. Quando EE passa da un server a un altro, le impostazioni di connessione del database devono essere modificate per riflettere il nuovo ambiente del server. Se vogliamo sviluppare e distribuire EE con un sistema di controllo della versione (e credetemi, lo facciamo), ogni volta che distribuiamo una copia funzionante su un nuovo server, dovremmo scaricare una copia del config.php
, modifica le impostazioni del database in modo che siano corrette per quel server, esegui il backup FTP sul server e assicurati di dire al nostro controllo della versione di ignorarlo quando emettiamo un commit o un aggiornamento. Nella migliore delle ipotesi, avremmo un file di configurazione separato, non controllato da versione per ogni server aggiuntivo su cui risiede il sito. Per me (e sono un one-man show) questo è:
Aggiungi un altro paio di sviluppatori se lavori in un'agenzia e stai guardando molti di questi buggers che corrono in giro. Quindi cosa succede quando è necessario modificare un'altra variabile di configurazione, come il numero di licenza? Scrivi a te stesso e agli altri sviluppatori una copia di questo file e lo carichi su tutti i server uno per uno? ASCIUTTO, amici miei, ASCIUTTO. L'unica risposta logica è una singola versione controllata config.php
file che può ospitare tutti gli ambienti server.
Sciocchezze, si potrebbe dire, ma grazie ad un ingegnoso PHP è davvero possibile. Come puoi vedere nell'esempio seguente, la sintassi del caso PHP cerca un indirizzo IP e serve le impostazioni del database appropriate basate su quell'IP. Ora le uniche cose che devi sapere e modificare quando si distribuiscono su un nuovo server sono l'indirizzo IP e le informazioni di connessione al database, che dovrebbero essere prontamente disponibili.
/ * Variabili ambientali * / switch ($ _SERVER ['SERVER_ADDR']) // local case '127.0.0.1': $ db ['expressionengine'] ['hostname'] = "localhost"; $ db ['expressionengine'] ['username'] = "root"; $ db ['expressionengine'] ['password'] = "password"; $ db ['expressionengine'] ['database'] = "local-db"; rompere; // staging case '72 .10.54.22 ': $ db [' expressionengine '] [' hostname '] = "mysql.exampleserver.com"; $ db ['expressionengine'] ['username'] = "admin"; $ db ['expressionengine'] ['password'] = "password"; $ db ['expressionengine'] ['database'] = "staging-db"; rompere; // live case '82 .335.65.67 ': $ db [' expressionengine '] [' hostname '] = "mysql.exampleserver.com"; $ db ['expressionengine'] ['username'] = "admin"; $ db ['expressionengine'] ['password'] = "password"; $ db ['expressionengine'] ['database'] = "live-db"; rompere;
A questo punto voglio distinguere tra ciò che chiamo variabili ambientali e variabili universali. Le variabili ambientali sono diverse su ciascun ambiente server. Le variabili universali sono le stesse indipendentemente dal server su cui risiede il sito, quindi vanno oltre la sintassi switch / caso IP. Questi sono cose come i percorsi del server e gli URL della cartella temi, della cartella modello, CAPTCHA, il numero di licenza, in pratica qualsiasi cosa oltre alle informazioni di database e all'indirizzo IP menzionati sopra (questi sono tutti commentati nel file incluso come riferimento).
Mi hai sentito dire che i percorsi dei server e gli URL rimangono gli stessi indipendentemente dal server in cui ti trovi? Sì, l'hai fatto. Finché la struttura delle cartelle del tuo sito rimane la stessa in ogni istanza (e se sei sul controllo della versione ovviamente lo sarà), l'abitudine config.php
incluso in questo tutorial usa le variabili PHP per rilevare il percorso e l'URL del root server e riempirli per te. Perché EE non lo fa per cominciare a sconcertarmi, ma sto divagando. Non dovrai più dimenticare di cambiare il percorso del server nella tua cartella dei temi quando esegui la migrazione dei server e impiegando un'ora a capire perché hai una schermata vuota invece di un CP. Qualcuno eccitato ancora?
/ * Universal Variables * / $ config ['app_version'] = "211"; $ config ['license_number'] = "0000-0000-0000-0000"; $ config ['debug'] = "1"; $ config ['install_lock'] = ""; $ config ['system_folder'] = "admin"; $ config ['doc_url'] = "http://expressionengine.com/user_guide/"; $ config ['is_system_on'] = "y"; $ config ['cookie_prefix'] = ""; $ config ['site_name'] = "Flourish Interactive Codebase"; $ config ['allow_extensions'] = "y"; / * Generale ----------------------------------------------- -------------------- * / $ config ['site_index'] = ""; $ config ['site_url'] = "http: //". $ _ SERVER ['HTTP_HOST']; $ config ['server_path'] = $ _SERVER ['DOCUMENT_ROOT']; $ config ['cp_url'] = $ config ['site_url']. "/". $ config ['system_folder']; / * Impostazioni di connessione del database universale -------------------------------------------- ----------------------- * / $ active_group = 'expressionengine'; $ active_record = TRUE; $ db ['expressionengine'] ['dbdriver'] = "mysql"; $ db ['expressionengine'] ['dbprefix'] = "exp_"; $ db ['expressionengine'] ['pconnect'] = FALSE; $ db ['expressionengine'] ['swap_pre'] = "exp_"; $ db ['expressionengine'] ['db_debug'] = FALSE; $ db ['expressionengine'] ['cache_on'] = FALSE; $ db ['expressionengine'] ['autoinit'] = FALSE; $ db ['expressionengine'] ['char_set'] = "utf8"; $ db ['expressionengine'] ['dbcollat'] = "utf8_general_ci"; $ db ['expressionengine'] ['cachedir'] = $ config ['server_path']. $ config ['system_folder']. "/ expressionengine / cache / db_cache /"; / * Percorsi directory e URL dei membri ------------------------------------------- ------------------------ * / $ config ['avatar_url'] = $ config ['site_url']. "/ uploads / system / avatars / "; $ config ['avatar_path'] = $ config ['server_path']. "/ uploads / system / avatars /"; $ config ['photo_url'] = $ config ['site_url']. "/ uploads / system / member_photos /"; $ config ['photo_path'] = $ config ['server_path']. "/ uploads / system / member_photos /"; $ config ['sig_img_url'] = $ config ['site_url']. "/ uploads / system / signature_attachments /"; $ config ['sig_img_path'] = $ config ['server_path']. "/ uploads / system / signature_attachments /"; $ config ['prv_msg_upload_path'] = $ config ['server_path']. "/ uploads / system / pm_attachments /"; / * Percorsi di directory e URL diversi ------------------------------------------- ------------------------ * / $ config ['theme_folder_url'] = $ config ['site_url']. "/ themes /"; $ config ['theme_folder_path'] = $ config ['server_path']. "/ themes /"; / * Preferenze modelli ---------------------------------------------- --------------------- * / $ config ['save_tmpl_files'] = "y"; $ config ['tmpl_file_basepath'] = $ config ['server_path']. "/ templates /"; $ config ['site_404'] = "404 / index"; $ config ['strict_urls'] = "n";
Per installare l'abitudine config.php
file:
config.php
, situato in Sistema / ExpressionEngine / config / config.php
, a qualcosa di simile old-config.php
e spostarlo sul desktop.config.php
incluso in questo tutorial e rilasciarlo in Sistema / ExpressionEngine / config
. Imposta le autorizzazioni su 400.config.php
nel tuo editor di codice, insieme a old-database.php
e old-config.php
Tieni presente che una variabile universale può diventare una variabile ambientale se ne hai bisogno. Supponiamo che tu voglia cambiare automaticamente il nome del tuo sito in base al server su cui si trova, in modo che tu possa capire a colpo d'occhio se stai guardando la versione locale, dev o live del tuo sito. Basta eliminare la variabile dall'area "variabili universali" e copiarla in ogni caso IP, assegnandole il valore desiderato.
Affrontiamolo; l'installazione predefinita di ExpressionEngine include un sacco di file che non ti servono, soprattutto se sei uno sviluppatore professionista che non spunta in giro per la prima volta. Questi includono i file del tema per il sito di esempio di Agile Records, le emoticon, i temi wiki e molto altro. Perché ingrassare inutilmente il tuo sito? Metti a dieta EE e cancella tutte queste cose, puoi sempre prenderne una nuova copia e aggiungerla di nuovo nell'improbabile caso in cui ne hai bisogno per un wiki, forum o altro sito basato sulla comunità. Elimina solo ciò che ha senso per te, ma ho fatto circa una dozzina di siti EE e non ne ho mai usato nessuno.
/ themes / wiki_themes
/ themes / site_themes / agile_records
/ themes / profile_themes / agile_records
/ images / smileys
/ images / avatars
Come molti compiti nello sviluppo web, non c'è un modo giusto per farlo, ma ciò che è importante è scegliere un modo e attenersi ad esso. Ad alcune persone piace mettere i loro file di risorse statiche (immagini, css, js, swf, ecc.) In a / themes / site_themes / examplesite
cartella. Preferisco mettere ogni cartella di asset al primo livello perché sono pigro e non mi piace fare clic su tre livelli di sottocartelle per accedere a questi file durante lo sviluppo, inoltre mi piacciono gli URL corti e piacevoli nel mio HTML e CSS. Ora che mi sono abituato a una struttura standard, non creo file o cartelle di livello superiore aggiuntivi a meno che non sia assolutamente necessario (vedrai perché in un minuto). Ecco come appare la mia struttura di alto livello.
.htaccess
- spiegherò di più in un minutosistema
- rinominalo per favorecss
favicon.ico
fw
- questo è l'abbreviazione di "framework", ad es. le mie immagini di sfondo CSSimmagini
- immagini di contenuti non gestiti da CMSindex.php
js
robots.txt
modelli
temi
- Temi CP e tipo fieldtypeuploads
- dove vanno tutti i documenti e le immagini gestiti da CMSOra vado in giro a parlare .htaccess
. È un mistero per molti sviluppatori e francamente lo è anche per me, ma so abbastanza per usarlo per rimuovere quell'antiquario index.php
dagli URL altrimenti graziosi di EE. Uso una variante del metodo exclude da ExpressionEngine Wiki. Questo non è in alcun modo garantito per funzionare sul tuo host web, ma ha funzionato per me su MAMP Pro, HostGator e MediaTemple, entrambi (gs) e (dv). Si applicano i normali avvertimenti, ad es. mod_rewrite
deve essere abilitato in Apache http.conf
ecc. Se stai usando questo metodo di rimozione index.php
e desidero aggiungere un nuovo file o cartella di primo livello al tuo sito (e intendo un file o una cartella "reale", non una voce EE, un modello o un gruppo di modelli), dovrai aggiungere un'eccezione .htaccess
altrimenti quel file / cartella sarà inaccessibile.
RewriteEngine su RewriteCond $ 1! ^ (Admin | css | fw | images | js | templates | themes | uploads | favicon \ .ico | robots \ .txt | index \ .php) [NC] RewriteRule ^ (. *) $ Index. php? / $ 1 [L] AddHandler php5-script .php
Per installare la mia abitudine .htaccess
, rilascia il file incluso denominato temp.htaccess
nella tua cartella di primo livello. Rimuovere la parte "temp" del nome file (tutto prima del punto). Il tuo sistema operativo potrebbe avvisarti che la rinomina del file distruggerà l'universo. Ignora questo e premi OK. Il file potrebbe scomparire, il che va bene perché .htaccess
è un file nascosto. Ora se vuoi modificarlo, devi avere i file nascosti visibili nelle impostazioni del tuo sistema operativo.
Dopo aver sviluppato diversi siti EE, ci sono componenti aggiuntivi che non sono disposto o non posso vivere senza. Questi sono i migliori che la comunità di sviluppo di EE ha da offrire e hanno l'onore di essere installati nella mia base di codice in modo che ogni nuovo sito li abbia fin dall'inizio. Sono (e questi sono tutti gratuiti):
Non limitarti a installarli, configurali. Ad esempio, ho configurato tutti i miei modelli di notifica e-mail per Freeform, creato campi aggiuntivi per moduli personalizzati basati su ciò che di solito uso per un modulo di contatto standard e ho un modello chiamato contact.html
che contiene il codice del modulo front-end, compresa la convalida JavaScript e un messaggio di successo. Anche se ho bisogno di aggiungere un campo o due, o spostare quel codice modulo in un modello diverso, si tratta di una messa a punto, non la creazione da zero ogni volta. ASCIUTTO. Meno lo stile CSS, quella forma è pronta per essere utilizzata.
State alla ricerca di un altro articolo da parte mia nel momento in cui discuterò questi e un paio di add-on commerciali per EE2 in modo più dettagliato.
Dare accesso illimitato al mio cliente è spaventoso sia per loro che per me.
Questa è una di quelle cose che probabilmente dimenticherete di fare fino a che non avrete quasi finito con il sito, ma non è necessario che sia nella vostra base di codice. L'account amministratore EE predefinito appartiene al gruppo di membri Super Admins, che ha necessariamente accesso a tutto. Dare accesso illimitato al mio cliente è spaventoso sia per loro che per me, quindi creo un secondo gruppo di membri chiamato Admins. Di solito attendo fino a quando non hanno scelto un indirizzo e-mail prima di rendere effettivo il loro account, ma ci vogliono solo pochi secondi dopo aver definito le autorizzazioni del gruppo membro.
In questo gruppo di membri ho disattivato tutti gli accessi ai modelli, all'amministrazione di siti e membri, al modulo di comunicazione e ai componenti aggiuntivi. Tutto ciò che la maggior parte dei clienti deve fare è creare e modificare i contenuti e magari visualizzare le loro presentazioni in forma libera. Questo è tutto. Semplifica la loro vita e la tua e porta via ciò di cui non hanno bisogno. Ancora una volta, ho dovuto modificare questo prima, ma un punto di partenza è meglio che partire da zero.
Congratulazioni, ora dovresti avere un punto di partenza di gran lunga superiore per il tuo prossimo progetto ExpressionEngine. Affinché sia possibile aggiungerlo e riutilizzarlo, creare un nuovo progetto nel controllo della versione e commettere il codice personalizzato ExpressionEngine come versione numero uno. Di seguito sono riportati alcuni esempi di operazioni comuni che probabilmente dovrai eseguire una volta che avrai nuovi progetti nella pipeline (potrebbero variare in base all'impostazione del server o se stai utilizzando Git anziché SVN).
/ templates
/ uploads
(o qualunque sia il nome della tua cartella di caricamento)/ System / ExpressionEngine / cache / db_cache
config.php
. Cambia il nome del sito, i numeri di licenza e qualsiasi altra preferenza che devi modificare.config.php
.config.php
al tuo repository./ templates
/ uploads
(o qualunque sia il nome della tua cartella di caricamento)/ System / ExpressionEngine / cache / db_cache
Mentre svolgi la tua attività di progettazione e sviluppo di siti web ExpressionEngine di spicco, mantieniti mentalmente consapevole di ciò che fai in ogni momento, da una prospettiva di funzionalità generale. Alcune funzionalità del sito web sono quasi identiche su tutti i siti, hanno solo bisogno di alcune piccole modifiche al markup e una "skin" CSS per trasferire facilmente da uno all'altro.
In futuro, i microformati standardizzeranno ulteriormente il markup! Questi sono candidati ideali per l'inclusione nel codice base. Di cui abbiamo già discusso è il modulo di contatto onnipresente. Alcune altre potenziali funzionalità "standard" (ho avuto più client per chiedere queste cose):
Potresti teoricamente avere canali, categorie, gruppi di campi personalizzati e modelli costruiti e pronti a partire (lo so che lo faccio per molti di questi). Il tuo cliente ha ancora lo stesso valore che avrebbe se costruisci questi pezzi per il loro sito (probabilmente più perché saranno raffinati e testati più spesso) e lavori meno, il che significa che puoi valutare te stesso in modo più competitivo , o se vendi una commissione fissa, carica lo stesso prezzo e ottieni maggiori profitti. Ricordati di divertirti e divertiti a sviluppare con ExpressionEngine!