ExpressionEngine 2 este un sistem minunat de gestionare a conținutului și, fără îndoială, cel mai prietenos designer CMS, utilizat de numeroase nume cunoscute, cum ar fi A List Apart, Andy Clarke și Veerle Pieters. Cu toate acestea, în mod ironic, configurația implicită nu este potrivită pentru a fi utilizată într-un flux de lucru profesionist de dezvoltare web, care de obicei implică mai multe site-uri, servere și dezvoltatori.
Acest tutorial vă va arăta cum să personalizați ExpressionEngine 2 astfel încât să puteți atinge terenul care rulează cu un punct de pornire rigid, dar flexibil, care se poate desfășura cu ușurință în mai multe medii în câteva minute.
Nu sunt programator. Cu toate acestea, mantra de programare nu te repeta, sau principiul DRY pentru acei iubitori de acronime printre noi, a început să rezoneze cu adevărat în interiorul meu, deoarece mă implic mai mult atât cu dezvoltarea web-ului, cât și cu propria mea afacere. De fapt, DRY este un sfat bun pentru a-ți trăi viața în general. Repetați-vă costurile mai mult timp în față și, eventual, mult mai mult pe drum, dacă trebuie să vă întoarceți și să faceți aceeași schimbare în mai multe locuri.
În plus, este un obstacol în calea dezvoltării personale, deoarece dacă faceți ceva ce ați făcut deja, nu învățați ceva nou. Ce este mai bine este să identificați acele locuri în care vă repetați și să veniți cu un sistem care să standardizeze acea sarcină sau o bucată de date.
Când am început să lucrez cu ExpressionEngine cu un an și jumătate în urmă, a fost un proiect unic și eram un designer novice. Inutil să spun că mentalitatea DRY a fost cel mai îndepărtat lucru din mintea mea. Am fost fericit plâns de-a lungul timpului, mușcat cu setări ca situația dictat, nu documentarea nimic și având o explozie cu domenii personalizate și grupuri de șablon, acele lucruri care fac din EE un vis de designer devenit realitate. Era cam la fel ca primul meu contact cu software-ul. În cele din urmă, mi-a plăcut EE atât de mult încât am decis să obțin exclusivitate și să "mărturisesc" acest lucru ca și CMS de alegere pentru toate proiectele viitoare.
După aproximativ al treilea sau al patrulea site, însă, am început să văd defectele în relația noastră (așa cum este posibil să se întâmple atunci când într-adevăr vă familiarizați cu ceva) și a fost frustrat în a face sarcinile meniale și repetitive legate de implementarea și gestionarea EE. Acest lucru a fost evident în special în cazul unor proiecte în curs de desfășurare, care au necesitat actualizări de două ori trei ori pe săptămână, de la dezvoltare până la servere live. A ajuns la punctul în care am petrecut aproape același timp cu gestionarea implementărilor, așa cum am codificat de fapt.
Nu e mulțumit să pierd bani și să scape la o nebunie plictisitoare, am căutat să ordonez mizeria.
Ceea ce urmează este rodul muncii mele și al altora, un ghid pentru aplicarea principiului DRY în dezvoltarea și desfășurarea de situri cu EE.
Vă umblu prin modul în care am modificat și personalizat configurația falsă, nonsensicală a ExpressionEngine 2, într-un cărucior de lucru eficient, care necesită aproape toată repetarea de a lucra cu EE. În mod specific, aceste modificări vor:
Acesta a fost un efort destul de mare și nu aș fi putut să o fac singură. Multe mulțumiri se îndreaptă către următorii oameni care m-au ajutat dacă știau sau nu:
Din motive de sănătate, primești o copie nouă a celei mai recente versiuni a EE 2 înainte să faci asta. Descărcați și instalați ca de obicei, de preferință pe un server local, deoarece veți face multe schimbări în fișiere. Lăsați șabloanele Agile Records când vi se solicită.
Luați fișierele de exemplu care sunt incluse în acest tutorial. Încă nu trebuie să faceți nimic cu ei, ci să-i păstrați la îndemână.
Dacă ați avut vreodată să migrați ExpressionEngine de la un server la altul, știți că această sarcină nu este o operație ușoară; de fapt, este un coșmar complet dacă nu sunteți pregătiți. O mulțime de acest lucru rezultă din faptul că ExpressionEngine stochează variabilele de configurare și căile serverului de-a lungul creației, până la punctul în care este dificil să le urmăriți toate în jos și să le ajustați atunci când mutați serverele.
Kenn Wilson de la Corvid Works îl însumează în engleză mai bună decât a mea:
"Aceasta este ceea ce face Expression Engine atât de neimprovizibil - se deplasează de la un server la altul, de la dezvoltare la producție, necesită actualizarea acestei adrese URL și a informațiilor despre cale în aproape aproximativ zece locuri. Este greoi, consumatoare de timp și greșită. "
E pe drumul cel bun. Din fericire, există o altă cale. În loc să editați toate aceste variabile într-o duzină de locuri din panoul de control și, probabil, să uitați unele, le puteți consolida într-un singur loc - fișierele de configurare. Așa este, toate acele domenii împrăștiate pe zeci de pagini din harta dvs. CP la câteva fișiere PHP. În mod implicit, ExpressionEngine stochează informațiile de configurare pe care va trebui să vă faceți griji în două fișiere. Acestea sunt:
Sistem / ExpressionEngine / config / config.php
Sistem / ExpressionEngine / config / database.php
Așa cum vă puteți imagina, database.php
stochează informațiile despre conexiunea bazei de date MySQL. Presupun că EllisLab consideră că este mai ușor să găsești informațiile despre DB, dacă e în fișierul propriu numit, dar voi argumenta contrariul. Acesta este DRY, naibii! Prefer să deschid un fișier și să-mi editez setările dintr-un loc, nu două, așa că am făcut-o database.php
cu totul. Ei bine, nu chiar, dar am luat toate setările bazei de date de la ea și le mutați config.php
cu un pic PHP.
Redenumiți-vă existența database.php
fișier la ceva de genul în vârstă de database.php
și mutați-o pe desktop, deoarece veți avea nevoie de setările de conectare mai târziu. Înlocuiți-l cu database.php
inclus în acest tutorial și setați permisiunile la 400 așa cum este indicat.
Felicitări. Nu va trebui niciodată să vă faceți griji database.php
din nou.
Acum că database.php
îi spune ExpressionEngine să caute informații despre conexiunea bazei de date în config.php
trebuie să-l punem acolo, dar există o problemă. Când EE se deplasează de la un server la altul, setările de conexiune la baza de date trebuie să se schimbe pentru a reflecta noul mediu de servere. Dacă vrem să dezvoltăm și să implementăm EE cu un sistem de control al versiunii (și să aibă încredere în mine, o facem), atunci de fiecare dată când implementăm o copie de lucru pe un nou server, trebuie să descărcăm o copie a config.php
, modificați setările bazei de date, astfel încât acestea să fie corecte pentru acel server, să-l returnați pe serverul FTP și asigurați-vă că spuneți controlului versiunii noastre să îl ignorați când emitem o comitere sau o actualizare. În cel mai bun scenariu, vom avea un fișier de configurare separat, care nu este controlat de versiune pentru fiecare server suplimentar pe care se află site-ul. Pentru mine (și eu sunt un show un om), care este:
Adăugați un alt cuplu de dezvoltatori dacă lucrați la o agenție și căutați la mulți dintre acești bugeri care rulează în jur. Deci, ce se întâmplă când trebuie să modificați o altă variabilă config, cum ar fi numărul licenței? Trimiteți-vă e-mail-ului și altor dezvoltatori o copie a acestui fișier și încărcați-l pe toate serverele unul câte unul? DRY, prietenii mei, DRY. Singurul răspuns logic este o singură versiune controlată config.php
fișier care poate găzdui toate mediile serverului.
Prostii, ai putea spune, dar datorită unor PHP inteligenți este cu adevărat posibil. După cum puteți vedea în exemplul de mai jos, sintaxa cazului PHP caută o adresă IP și servește setările corespunzătoare ale bazei de date pe baza acelei IP. Acum, singurele lucruri pe care trebuie să le cunoașteți și să le modificați atunci când implementați la un nou server sunt adresa IP și informațiile despre conexiunea bazei de date, care ar trebui să vă fie disponibile imediat.
/ * Variabile de mediu * / comutator ($ _SERVER ['SERVER_ADDR']) // caz local '127.0.0.1': $ db ['expressionengine'] ['hostname'] = "localhost"; $ db ['expressionengine'] ['nume de utilizator'] = "root"; $ db ['expressionengine'] ['parola'] = "parola"; $ db ['expressionengine'] ['baza de date'] = "local-db"; pauză; // staging case '72 .10.54.22 ': $ db [' expressionengine '] [' hostname '] = "mysql.exampleserver.com"; $ db ['expressionengine'] ['nume utilizator'] = "admin"; $ db ['expressionengine'] ['parola'] = "parola"; $ db ['expressionengine'] ['baza de date'] = "staging-db"; pauză; // caseta live '82 .335.65.67 ': $ db [' expressionengine '] [' hostname '] = "mysql.exampleserver.com"; $ db ['expressionengine'] ['nume utilizator'] = "admin"; $ db ['expressionengine'] ['parola'] = "parola"; $ db ['expressionengine'] ['baza de date'] = "live-db"; pauză;
În acest moment vreau să disting între ceea ce eu numesc variabilele de mediu și variabilele universale. Variabilele de mediu sunt diferite pentru fiecare mediu de server. Variabilele universale sunt aceleași indiferent de serverul pe care se află site-ul, astfel încât acestea se află în afara sintaxei switch / case IP. Acestea sunt lucruri precum căile serverului și adresele URL la dosarul temelor, dosarul șablonului, CAPTCHA, numărul licenței, în esență, în afară de informațiile despre baza de date menționate mai sus și de adresa IP (acestea sunt toate comentate în fișierul inclus pentru referință).
M-ai auzit spunând că căile serverului și adresele URL rămân aceleași, indiferent de serverul pe care te ocupi? Da ai făcut. Atâta timp cât structura de directoare a site-ului dvs. rămâne aceeași în fiecare instanță (și dacă aveți controlul versiunii, va fi evident), personalizarea config.php
inclus în acest tutorial folosește variabilele PHP pentru a detecta calea serverului rădăcină și URL-ul și pentru a le completa pentru tine. De ce EE nu face acest lucru pentru a începe cu baffles mine, dar eu devin. Nu mai uitați să schimbați calea serverului în folderul temelor când migrați serverele și petreceți o oră estimând de ce aveți un ecran gol în locul unui CP. Oricine a excitat încă?
/ * Variabilele universale * / $ 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'] = "Dezvoltarea unei baze de date interactive"; $ config ['permis_extensii'] = "y"; / * Generalități ----------------------------------------------- -------------------- * / $ 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']; / * Setări pentru conexiunea bazei de date universale -------------------------------------------- ----------------------- * / $ active_group = 'Expresie motorină'; $ 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 /"; / * Căi și url-uri ale directorilor de membri ------------------------------------------- ------------------------ * / $ config ['avatar_url'] = $ config ['site_url']. "/ uploads / system / avatare / „; $ config ['avatar_path'] = $ config ['server_path']. "/ uploads / system / avatare /"; $ 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 /"; / * Căi și urluri de directoare diferite ------------------------------------------- ------------------------ * / $ config ['theme_folder_url'] = $ config ['site_url']. "/ teme /"; $ config ['theme_folder_path'] = $ config ['server_path']. "/ teme /"; / * Preferințe șabloane ---------------------------------------------- --------------------- * / $ config ['save_tmpl_files'] = "y"; $ config ['tmpl_file_basepath'] = $ config ['server_path']. "/ șabloane /"; $ config ['site_404'] = "404 / index"; $ config ['strict_urls'] = "n";
Pentru a instala personalizat config.php
fişier:
config.php
, situat la Sistem / ExpressionEngine / config / config.php
, la ceva asemănător vechi-config.php
și mutați-l pe desktop.config.php
incluse în acest tutorial și aruncați-o în Sistem / ExpressionEngine / config
. Setați permisiunile la 400.config.php
în editorul de cod, împreună cu în vârstă de database.php
și vechi-config.php
Rețineți că o variabilă universală poate deveni o variabilă de mediu dacă aveți nevoie de ea. Să presupunem că doriți să schimbați numele site-ului în mod automat pe baza serverului pe care îl utilizați, astfel încât să puteți afla dintr-o privire dacă vă uitați la versiunea locală, dev sau live a site-ului dvs. Ștergeți doar variabila din zona "variabilelor universale" și copiați-o în fiecare caz IP, atribuindu-i valoarea dorită.
Hai sa recunoastem; instalarea implicită a programului ExpressionEngine include o mulțime de fișiere de care nu aveți nevoie, mai ales dacă sunteți un dezvoltator profesionist care nu se străduiește pentru prima dată. Acestea includ fișierele tematice pentru site-ul exemplu Agile Records, smileys, teme wiki și multe altele. De ce să îngrășați site-ul în mod inutil? Puneți EE pe o dietă și ștergeți toate aceste lucruri, puteți oricând să luați o copie proaspătă și să o adăugați înapoi în cazul puțin probabil de care aveți nevoie pentru un wiki, un forum sau alt site bazat pe comunitate. Ștergeți numai ceea ce are sens pentru dvs., dar am făcut aproximativ o duzină de site-uri EE și nu am folosit niciodată.
/ teme / wiki_themes
/ teme / site_themes / agile_records
/ teme / profile_themes / agile_records
/ images / Emoticoane
/ imagini / avatare
Ca multe sarcini în dezvoltarea web-ului, nu există nici o cale corectă de a face acest lucru, dar ceea ce este important este să alegeți un mod și să vă lipiți de el. Unii oameni preferă să-și pună fișierele de materiale statice (imagini, css, js, swf etc.) într-un / teme / site_themes / examplesite
pliant. Prefer sa plasez fiecare dosar de activ pe nivel superior pentru ca sunt lenes si nu imi place sa fac clic pe trei niveluri de subfoldere pentru a accesa aceste fisiere in timpul dezvoltarii, plus imi plac URL-urile frumoase in HTML si CSS. Acum, când m-am obișnuit cu o structură standard, nu creez fișiere sau dosare suplimentare la nivel superior decât dacă este absolut necesar (veți vedea de ce într-un minut). Aceasta este structura mea de nivel superior.
.htaccess
- va explica mai mult într-un minutsistem
- redenumiți acest lucru, vă rogcss
favicon.ico
fw
- acest lucru este scurt pentru "cadru" de ex. imaginile de fundal CSSimagini
- non-CMS-imagini de conținut gestionateindex.php
js
robots.txt
template-uri
tematică
- CP și teme de tip campîncărcări
- unde toate documentele și imaginile gestionate de CMS mergAcum mă înțeleg .htaccess
. Este un mister pentru mulți dezvoltatori și sincer este și pentru mine, dar știu suficient ca să-l folosească pentru a elimina acel inger index.php
de la alte URL-uri destul de frumoase ale EE. Folosesc o variantă a metodei exclude din Wiki-ul ExpressionEngine. Acest lucru nu este în nici un fel garantat pentru a lucra la gazda dvs. web, dar a lucrat pentru mine pe MAMP Pro, HostGator și MediaTemple, ambele (gs) și (dv). Se aplică restricțiile obișnuite, de ex. mod_rewrite
trebuie să fie activată în Apache http.conf
etc Dacă utilizați această metodă de eliminare index.php
și doriți să adăugați un nou fișier sau un dosar de nivel superior la site-ul dvs. (și vreau să spun un fișier sau un dosar "real", nu o intrare EE, un șablon sau un grup de șabloane), va trebui să adăugați o excepție în .htaccess
altfel acest fișier / dosar va fi inaccesibil.
RewriteEngine pe RewriteCond $ 1! ^ (Admin | css | fw | imagini | js | tematici | teme | încărcări | favicon \ .ico | roboți \ .txt | index \ .php) [NC] RewriteRule ^ (. *) $ Index. php? / $ 1 [L] AddHandler php5-script .php
Pentru a instala personalizarea mea .htaccess
, abandonați fișierul inclus temp.htaccess
în dosarul dvs. de nivel superior. Eliminați partea "temp" a numelui fișierului (totul înainte de perioada). Sistemul dvs. de operare vă poate avertiza că redenumirea fișierului va distruge universul. Ignorați acest lucru și apăsați OK. Fișierul ar putea să dispară, ceea ce este bine pentru că .htaccess
este un fișier ascuns. Acum, dacă doriți să o editați, va fi necesar ca fișierele ascunse să fie vizibile în setările sistemului dvs. de operare.
După ce am dezvoltat mai multe site-uri pentru EE, există programe de completare pe care nu vreau sau nu le pot trăi fără. Acestea sunt cele mai bune comunități de dezvoltare a EE și au onoarea de a fi instalate în baza mea de cod, astfel încât fiecare site nou să le aibă de la început. Ei sunt (și toți aceștia sunt liberi):
Nu instalați doar acestea, configurați-le. De exemplu, am creat toate șabloanele de notificare prin e-mail pentru Freeform, am creat câmpuri personalizate de formular personalizat pe baza celor pe care le folosesc de obicei pentru un formular standard de contact și am un șablon numit contact.html
care are codul din capătul din față, inclusiv validarea JavaScript și un mesaj de succes. Chiar dacă trebuie să adaug un câmp sau două sau să muiesc acel cod într-un alt șablon, este o chestiune de tweaking, nu de a crea de la zero de fiecare dată. USCAT. Minus CSS stil, acest formular este gata să iasă din cutie.
Fiți în căutarea unui alt articol de către mine cât de curând discutăm aceste și câteva extensii comerciale pentru EE2 în detaliu.
Acordarea unui acces nelimitat la clientul meu este înfricoșător atât pentru mine, cât și pentru mine.
Acesta este unul dintre acele lucruri pe care probabil uitați să le faceți până când ați terminat aproape cu site-ul, dar nu trebuie să fie dacă este în codul dvs. de bază. Contul de administrator EE implicit aparține grupului de membri Super Admins, care are în mod necesar acces la toate. Acordarea unui acces nelimitat la clientul meu este înfricoșătoare atât pentru mine, cât și pentru mine, așa că am creat un al doilea grup de membri numit Admins. De obicei, aștept până când am selectat o adresă de e-mail înainte de a-mi face efectiv contul, dar acest lucru durează doar câteva secunde după ce ați definit permisiunile grupului de membri.
În acest grup de membri am oprit toate accesul la șabloane, site-ul și administrarea membrilor, modulul de comunicații și suplimentele. Tot ceea ce majoritatea clienților trebuie să facă este să creeze și să editeze conținut și poate să vizualizeze prezentările lor gratuite. Asta e. Simplificați-le viața și a voastră și luați ceea ce nu au nevoie. Din nou, a trebuit să modific acest lucru înainte, dar un punct de plecare este mai bun decât pornirea de la zero.
Felicitări, acum ar trebui să aveți un punct de plecare superior pentru următorul proiect ExpressionEngine. Ca să puteți adăuga și să o reutilizați, creați un nou proiect în controlul versiunii dvs. și comiteți codul de expresie personalizat ExpressionEngine ca versiunea numărul unu. Mai jos sunt exemple de operații comune pe care probabil că trebuie să le faceți după ce ați primit noi proiecte în curs (pot varia în funcție de configurarea serverului sau dacă utilizați Git în loc de SVN).
/ template-uri
/ încărcări
(sau oricare ar fi numele dosarului de încărcare)/ Sistem / ExpressionEngine / cache / db_cache
config.php
. Modificați numele site-ului, numerele de licență și orice alte preferințe pe care trebuie să le modificați.config.php
.config.php
la depozit./ template-uri
/ încărcări
(sau oricare ar fi numele dosarului de încărcare)/ Sistem / ExpressionEngine / cache / db_cache
Pe măsură ce lucrați în legătură cu proiectarea afacerii dvs. și cu dezvoltarea site-urilor web de tip ExpressionEngine, păstrați-vă conștiința mentală despre ceea ce faceți în orice moment, dintr-o perspectivă de ansamblu asupra funcționalității. Unele fragmente de funcționalități ale site-ului web sunt aproape identice pe site-uri, au nevoie doar de mici modificări ale marcajelor și de "piele" CSS pentru a transfera cu ușurință de la unul la altul.
În viitor, microformatele vor standardiza marcarea chiar mai mult! Acestea sunt candidați ideali pentru includerea în codul dumneavoastră. Unul despre care am discutat deja este forma de contact omniprezentă. Alte funcționalități potențiale "standard" (le-am cerut mai multor clienți pentru aceste lucruri):
Ar putea teoretic să aveți canale, categorii, grupuri de câmpuri personalizate și șabloane construite și gata de plecare (știu că fac pentru multe dintre acestea). Clientul dvs. obține în continuare aceeași valoare pe care o va avea dacă ați construit manual aceste piese pentru site-ul lor (probabil mai mult, deoarece acestea vor fi rafinate și testate mai des) și faceți mai puțină muncă, ceea ce înseamnă că vă puteți prețui mai competitiv , sau dacă vindeți o taxă fixă, percepeți același preț și transformați mai mult un profit. Amintiți-vă să vă distrați și să vă bucurați de dezvoltarea cu ExpressionEngine!