Smarty är egentligen inte en "Template Engine", skulle det vara mer korrekt beskrivas som en "mall / Presentation Framework." Det vill säga, det ger programmerare och malldesigner med en mängd verktyg för att automatisera uppgifter som vanligtvis behandlas med vid presentationen skikt av en ansökan. Jag betonar ramdirektivet ordet eftersom Smarty är inte en enkel tagg-byte mall motor. Även om det kan användas för en sådan enkel syfte, är dess fokus på snabb och smärtfri utveckling och användning av din ansökan, medan hög prestanda, skalbarhet, säkerhet och framtida tillväxt bibehålls.
Så är Smarty rätt för dig? Vad det handlar om är att använda rätt verktyg för jobbet. Om du vill ha enkel variabel ersättning, kanske du vill titta på något enklare eller ens rulla din egen. Om du vill ha en robust mall ram med många verktyg för att hjälpa dig som din ansökan utvecklas in i framtiden, är Smarty sannolikt ett bra val.
Varför använda det?
En av Smartys primära design mål är att underlätta separation av programkoden från presentation. Typiskt, programkoden innehåller affärslogik för din ansökan, skriven och underhålls i PHP-kod. Denna kod underhålls av programmerare. Presentationen är hur ditt innehåll presenteras för slutanvändaren, som är skriven och underhålls i mallfiler. Mallarna är underhålls av mall designers.
Vid sin mest grundläggande funktion, samlar programkoden innehållet, tilldelar det till mall motor och visar det. Innehållet kan vara något som rubriken, tagline, författare och kroppen av en tidningsartikel. Den programkoden har ingen oro hur detta innehåll kommer att presenteras i mallen. Mallen designer är ansvarig för presentationen. De redigera mallfilerna, lägga uppmärkning och föra den till slut. Detta innebär vanligtvis saker som HTML-taggar, CSS och andra verktyg som tillhandahålls av mall motor.
Detta paradigm tjänar flera syften:
) Designers kan inte bryta programkoden. De kan bråka med mallarna allt de vill, men koden förblir intakt. Koden kommer att bli stramare, säkrare och lättare att underhålla.
) Fel i mallarna är begränsade till Smartys felhantering rutiner, vilket gör dem så enkla och intuitiva som möjligt för designern.
) Med presentation på ett eget lager, kan formgivare ändra eller helt omforma det från början, allt utan ingripande från programmeraren.
) Programmerare inte jävlas med mallar. De kan gå om att upprätthålla programkoden, ändra hur innehållet förvärvas, göra nya affärsregler, etc. utan att störa presentationslagret.
) Mallar är en nära representation av vad slutresultatet kommer att bli, vilket är ett intuitivt förhållningssätt. Designers bryr sig inte hur innehållet kom till mallen. Om du har ovidkommande uppgifter i mallen som en SQL-sats, öppnar detta risken för att bryta programkoden av oavsiktlig radering eller ändring av formgivaren.
) Du är inte öppna servern till exekvering av godtycklig PHP-kod. Smarty har många säkerhetsfunktioner inbyggda i så designers kommer inte bryta mot säkerheten, vare sig avsiktligt eller oavsiktligt. De kan bara göra vad de är begränsade i mallarna.
Även programkoden är separerad från presentationen, det betyder inte nödvändigtvis att logiken separeras. Den programkoden har uppenbarligen logik, men mallar kan ha logik bygger på villkoret att det endast är avsett för presentation. Till exempel, om formgivaren vill växla tabellrad färger eller versaler några tilldelade innehåll, de kan. Detta är presentation logik, något som programmerare bör inte befatta sig med. Hur ofta har du haft någon presentation visas i en enda kolumn och sedan du ville ha den i två eller tre kolumner, så programkoden behöver justeras för att tillgodose detta? En bättre metod är att tilldela innehållet i en enda matris och låt mallen hantera presentationen. Detta kommer att förenkla din ansökan och hålla dina mallar flexibel. Smarty levererar verktyg för att hantera denna typ av situation.
Detta betyder inte att Smarty hindrar dig från att sätta applikationslogiken i mallen, måste du ha en bit av självdisciplin. Här är ett exempel på att bädda in affärslogik i mallen (som är rätt, undvika att göra detta om det alls är möjligt):
{Om $ smarty.session.user och ($ user_type eq "editor" eller $ user_type eq "admin")}
redigera
{/ If}
De logiska kontrollerar om användaren är inloggad och de är antingen en redaktör eller administratör, då de tillåts att redigera denna så redigeringsrutan dyker upp. Det är logiskt som hör hemma i programkoden. Mallen bryr sig inte om vad referenser här användaren har, behöver bara veta om redigeringsrutan visas eller inte! Så låt oss titta på en mer lämplig metod:
{Om $ edit_flag}
redigera
{/ If}
Det är upp till applikationsprogrammeraren att tilldela $ edit_flag, en enkel och lätt att förstå variabel i mallen. På så sätt mallen inte längre förlita sig på den underliggande datastruktur. Om formatet av sessionen datastruktur någonsin förändras, behöver inget att justeras i mallen.
Nu ska vi titta på några saker du kan göra med Smarty. En sak man kan göra är anpassade funktioner. Dessa är taggar i mallen som utför en viss uppgift. Exempel:
{Html_image file = "masthead.gif"}
Här har vi en funktion som kallas "html_image". Denna funktion tar bilden ges i "fil" attribut och gör allt det arbete som krävs för att komma upp med följande HTML-kod:
Den bildfunktionen gjorde knepig att räkna ut höjden och bredden och levererar standardgräns flaggan. Naturligtvis kan du bara använda den statiska HTML-tagg i mallen i stället, men detta visar hur en anpassad funktion kan användas för att förenkla en mycket vanlig uppgift. Designern kan fokusera på design och mindre på tekniska saker. Dessutom, om formgivaren bestämmer sig för att släppa in en annan storlek topp bild, mallen inte behöva justeras.
html_image är en funktion som kommer med Smarty. Du kan också göra dina egna anpassade funktioner. Här är ett annat exempel på vad man skulle kunna se ut:
{Html_link type = "artikeln" id = "ABC123" text = "Fire tar ut Hotel"}
Detta med hjälp av en anpassad funktion som kallas "html_link". Det kommer upp med följande HTML-kod:
Fire tar ut Hotel
Vad betyder detta åstadkomma? För det första behöver konstruktören behöver inte befatta sig med formatet på en webbadress till en artikel. Med hårdkodade URL: er, vad som händer om en dag programmeraren bestämmer sig för att städa upp saker, och ändrar URL-syntaxen från /display_article.php?id=abc123 till / ART / abc123? Vi skulle behöva redigera varje mall med en artikel URL. Detta är bara ytterligare ett exempel på hur en mall funktion kan göra mallar lättare att underhålla.
Nu för lite på programmerare och mallar. Tidigare nämndes att programmeraren har ingen vård för vad mallarna göra med innehållet. På en konceptuell nivå detta är sant, men i den verkliga världen du inte kommer att förvänta sig att mallen formgivare att behöva bygga alla mallar ur luften. När allt kommer omkring, gör affärslogik avgöra vilket innehåll som ska tilldelas mallarna. Så kommer programmeraren vanligtvis installations skelett mallar för designern att börja med. Den innehåller vanligtvis rå element såsom innehållsvariabler och sektions loopar, och kanske några enkla märk taggar så att de inte börja med innehållet i en stor röra. Här är ett exempel på ett skelett mall som loopar igenom en lista med artiklar och visar dem i en tabell:
{$ artikel [konst] .headline} | {$ artikel [konst] .date} | {$ artikel [konst] .author} |
Utgången kan se ut så här:
Hur väst vanns | Dec 2, 1999 | John Wayne | |||
Team förlorar, avslutas Coach | Feb 2, 2002 | John Smith | |||
Gourmet Cooking | Jan 23, 1954 | Betty Crocker |
Nu för några vanliga frågor:
Varför använda mallar alls? Vad är så tuff om att skriva echo $ titel; ? > I stället för {$ title}?
Göra det enklare att läsa var inte en konstruktion mål, men mer av en bieffekt. Använda mallar har enorma fördelar, av vilka många har förklarats ovan. Eftersom vi är i en mall miljö ändå är {$ title} mindre främmande än Php echo $ titel; ? >, Speciellt när du börjar titta på det i långa sidor med innehåll, så det var ganska uppenbart att en enklare syntax bidrar till att göra mallar lättare att läsa och underhålla.
Mall tar tid att tolka, vilket gör applikationer mycket långsammare.
Det kan vara sant i vissa fall, men med Smarty det inte långsammare än att exekvera ett PHP-skript. På den första avrättningen av en mall, Smarty omvandlar mallfilerna till PHP-skript (kallas mall sammanställningen.) Därefter PHP-skript bara ingår. Par detta med en PHP-accelerator och du har verkligen en snabb mall miljö med minimal overhead.
Smarty är alltför komplicerat, hur kan det vara så att snabbt?
Smarty kärna är ganska magert med tanke på vad det är kapabel till. De flesta av dess funktionalitet ligger i plugins. Insticksprogrammet arkitekturen är utformad så att endast de nödvändiga plugins lastas på efterfrågan. Med denna ram kommer att lägga hundratals nya plugins inte påverka prestanda. Detta gör Smarty snabb, skalbar och flexibel.
Smarty har också caching funktioner som dynamiskt kan uppdatera och hålla delar av sidan uncached på dina önskemål. Caching lagrar utsignalen från de kompilerade mallar, vilket sparar på behovet att utföra dem på varje anrop.
Allt detta prat om acceleratorer, hur Smarty kör utan en?
Egentligen går ganska bra utan en. Smarty kräver inte en accelerator, men mallen filer själva kommer att dra fördel av en, något som är unikt för Smarty (AFAIK). Om du inte har en accelerator, är avrättning mallen inte lika snabbt men inte långsam på något sätt, eftersom de inte tolkas! Du behåller också alla andra fördelar och funktioner i Smarty. Eftersom acceleratorer är fritt tillgängliga finns det egentligen inte en ursäkt för att inte använda någon. De hjälper prestanda med alla PHP apps, använder Smarty eller inte.
Hur kan det vara lättare att underhålla?
Vissa saker kan inte förklaras, men bara upplevt. Fördelen med separation av programlogiken från presentationen kan inte nog betonas. Smarty har också felhantering några trevliga funktioner och en inbyggd felsökning konsolen så att du kan se mallen hierarki och tilldelade variabler en överblick. Lägga till anpassade funktioner för att Smarty är lika enkelt som att släppa dem i plugin katalogen och nämna dem i mallen.
mall-taggar är inte XML-baserade, Min redaktör gillar inte det.
De {} avgränsare är bara en standard, de är lätta att urskilja bland HTML-taggar. Om du inte gillar dem, ändra avgränsare eller kanske något mer XMLish som Det finns också massor av användaravgifter för Dreamweaver och liknande, ge dem en titt i bidrag området.
Det är Smarty i ett nötskal, förhoppningsvis kan du lägga till den i din arsenal av verktyg för webbapplikation byggnad. För att verkligen ta reda på mer, läs manualen uppifrån och ned, gå med forum och se vad folk diskuterar
Egenskaper .
- Cachning: Smarty erbjuder finkorniga caching funktionerna för cachning hela eller delar av en återgiven webbsida eller lämnar delar uncached. Programmerare kan registrera mall fungerar som cachebar eller icke-cacha grupp cachade sidor i logiska enheter för enklare hantering, etc.
- konfigurationsfiler: Smarty kan tilldela variabler dras från konfigurationsfiler. Mall designers kan upprätthålla värden som är gemensamma för flera mallar i ett läge utan ingripande från programmeraren, och config variabler kan enkelt delas mellan programmering och presentations delar av programmet.
- Säkerhet: Mallar inte innehåller PHP-kod. Därför är en mall designern inte loss med den fulla kraften i PHP, men endast delmängd av funktionaliteten görs tillgänglig för dem från programmeraren (programkoden.)
- lätt att använda och underhålla: Web sidkonstruktörer inte har att göra med PHP-kod syntax, utan i stället en enkel att använda mallsyntax inte mycket annorlunda än vanlig HTML. Mallarna är en mycket nära representation av slutresultatet, dramatiskt förkorta produktutvecklingen.
- Variabel Modifiers: Halten av tilldelade variabler kan enkelt justeras vid bildskärms tid med medel, såsom visas i alla versaler, html-rymt, formatering datum, trunketextblock, lägga mellanrum mellan tecken, etc. Återigen , uppnås detta utan inblandning från programmeraren.
- Mall Funktioner: Många funktioner är tillgängliga för mallen formgivare att hantera uppgifter som genere HTML-kod segment (menyerna, tabeller, pop-ups, etc.), visar innehåll från andra mallar in-line, kretsa över rader av innehåll , formatera text för e-post utgång, cykling men färger, etc.
- Filter. Programmeraren har fullständig kontroll över mall produktion och sammanställt innehåll mall med pre-filter, postfilter och output-filter
- Resurser. Mallar kan dras från ett antal källor genom att skapa nya lastare resurs sedan använda dem i mallarna
- Insticksprogram: Nästan varje aspekt av Smarty styrs genom användning av insticksprogram. De är i allmänhet lika enkelt som att släppa dem i plugin katalogen och sedan nämna dem i mallen eller använda dem i programkoden. Många användar gemenskapens bidrag finns också. (Se avsnittet av forumet och wikin plugins.)
- Add-ons: Många användar gemenskap bidrog Add-ons finns såsom Pagination, Form Validation, rullgardinsmenyer, Calander Datum Plockare, etc. Dessa verktyg hjälper påskynda utvecklingen cykeln, det finns ingen anledning att åter uppfinna hjulet eller felsöka kod som redan är stabil och klar för distribution. (Se Add-ons delen av forumet och wikin.)
- Debugging. Smarty kommer med en inbyggd felsökning konsolen så malldesigner kan se alla de tilldelade variabler och programmeraren kan undersöka mall rendering hastigheter
- Kompilera. Smarty samman mallar i PHP-kod bakom kulisserna, vilket eliminerar run-time tolkning av mallar
- Prestanda: Smarty presterar mycket bra, trots sin stora uppsättning funktioner. De flesta av Smarty kapacitet ligger i plugins som laddas on-demand. Smarty kommer med många presentationsverktyg, minimera din ansökan kod och leder till snabbare, mindre felbenägen applikationsutveckling / driftsättning. Smarty mallar få kompileras till PHP-filer internt (en gång), vilket eliminerar kostsamma mall fil skannar och utnyttja hastigheten på PHP op-kod acceleratorer.
Vad är nytt i den här versionen:
- återgå super Global Access förändringar, och i stället förlita sig på USE_SUPER_GLOBALS för säkerhet
Vad är nytt i version 2.6.23:
- band baklängescitationstecken från {matematik} ekvationer (mohrt)
- kasta fel när mall finns men inte läsbar (mohrt)
Vad är nytt i version 2.6.22:
- Den här versionen åtgärdar ett problem som påträffas med Smarty 2.6 .21 utsläpp och en PCRE motor bugg i PHP 5.2. Metod kedja har tagits bort för att undvika felet. Metod kedja kommer dyka upp igen i Smarty 3.
Kommentarer hittades inte