Smarty is niet echt een "Template Engine", het zou beter worden omschreven als een "Template / Presentatie Framework." Dat wil zeggen, het biedt de programmeur en de template designer met een schat aan tools om taken vaak behandeld op de presentatie laag van een aanvraag te automatiseren. Ik benadruk het woord Framework omdat Smarty is geen eenvoudige-tag vervangen template engine. Hoewel het kan worden gebruikt voor een eenvoudige doel, de focus ligt op het snel en pijnloos ontwikkeling en implementatie van uw applicatie, met behoud van high-performance, schaalbaarheid, veiligheid en toekomstige groei.
Dus is Smarty geschikt voor u? Waar het op neer komt is het gebruik van de juiste tool voor de job. Als u wilt eenvoudige variabele vervangen, wil je misschien kijken naar iets eenvoudiger of zelfs rollen uw eigen. Als u wilt dat een robuust templating kader met vele tools om je te helpen als uw sollicitatie evolueert in de toekomst, Smarty is waarschijnlijk een goede keuze.
Waarom gebruiken?
Eén van Smarty primaire ontwerpdoelen is om de scheiding van toepassingscode en presentatie vergemakkelijken. Typisch, de toepassing code bevat de business logica van uw aanvraag, geschreven en onderhouden in PHP code. Deze code wordt onderhouden door programmeurs. De presentatie is de manier waarop uw inhoud wordt gepresenteerd aan de eindgebruiker, die wordt geschreven en onderhouden in template bestanden. De sjablonen worden onderhouden door template ontwerpers.
Op zijn meest elementaire functie, de toepassing code verzamelt de inhoud, wijst deze toe aan de template engine en geeft deze weer. De inhoud kan iets als de kop, tagline, auteur en het lichaam van een krantenartikel zijn. De applicatie code heeft geen belang hoe de inhoud in de template zal worden gepresenteerd. De sjabloonontwerper is verantwoordelijk voor de presentatie. Zij bewerken de template bestanden, het toevoegen van markup en brengen het tot voltooiing. Dit houdt meestal dingen zoals HTML-tags, cascading style sheets en andere hulpmiddelen die door de template engine.
Dit paradigma dient meerdere doelen:
) Ontwerpers kunnen niet breken applicatie code. Ze kunnen knoeien met de sjablonen alles wat ze willen, maar de code blijft intact. De code wordt strakker, veiliger en makkelijker te onderhouden zijn.
) Fouten in de templates zijn gemaakt door Smarty error handling routines, waardoor ze zo eenvoudig en intuïtief mogelijk te maken voor de ontwerper.
) Met de presentatie op zijn eigen laag, kunnen ontwerpers te wijzigen of volledig herontwerp het van de grond af, allemaal zonder tussenkomst van de programmeur.
) Programmeurs zijn niet knoeien met sjablonen. Ze kunnen gaan over het behoud van de applicatie code, de manier waarop inhoud wordt verworven veranderen, het maken van nieuwe business rules, etc. zonder de presentatie laag.
) Sjablonen zijn een nauwe weergave van wat de uiteindelijke uitvoer zal zijn, dat is een intuïtieve benadering. Designers niet schelen hoe de inhoud moet de sjabloon. Als je vreemde gegevens in de sjabloon, zoals een SQL-instructie, dit opent het risico van het breken van de applicatie code door het per ongeluk verwijderen of wijziging door de ontwerper.
) Je bent niet openen van uw server om het uitvoeren van willekeurige PHP-code. Smarty heeft vele beveiligingsfuncties ingebouwd, zodat ontwerpers zullen geen inbreuk veiligheid, opzet of per ongeluk. Ze kunnen alleen doen wat ze zijn beperkt in de sjablonen.
Hoewel de applicatie code is gescheiden van de presentatie, dit betekent niet noodzakelijkerwijs dat de logica is gescheiden. De applicatie code heeft natuurlijk logica, maar de templates kunnen logica gebaseerd op de voorwaarde dat het is alleen de presentatie. Bijvoorbeeld, als de ontwerper wil tabelrijen kleuren of hoofdletters aantal toegewezen inhoud, zij kunnen wisselen. Dit is de presentatie logica, iets waar de programmeur moet niet worden betrokken bij. Hoe vaak heb je had een aantal presentatie weergegeven in een enkele kolom en dan je wilde in twee of drie kolommen, zodat de toepassing code moet aanpassen om deze geschikt? Een betere aanpak is om de inhoud in één enkele array toewijzen en laat de template omgaan met de presentatie. Dit zal uw aanvraag te vereenvoudigen en houd je templates flexibel. Smarty levert de tools om dit soort situaties te behandelen.
Dit betekent niet dat Smarty voorkomt dat u zetten applicatie logica in de sjabloon, moet je een beetje zelfdiscipline hebben. Hier is een voorbeeld van het inbedden van business logica in de sjabloon (dat klopt, vermijd dit te doen indien mogelijk):
{If $ smarty.session.user en ($ user_type eq "editor" of $ user_type eq "admin")}
bewerken
{/ If}
De logica controleert of de gebruiker is ingelogd en ze zijn ofwel een redacteur of beheerder, dan mogen ze te bewerken, zodat deze het selectievakje bewerken verschijnt. Dat is de logica die behoort in de applicatie code. De template niet schelen wat referenties deze gebruiker heeft, het moet gewoon weten of de edit box niet wordt weergegeven of! Dus laten we eens kijken naar een meer geschikte aanpak:
{If $ edit_flag}
bewerken
{/ If}
Het is aan de toepassingsprogrammeur de $ edit_flag, een eenvoudige en gemakkelijk te begrijpen variabele in de sjabloon selecteren. Op deze manier het sjabloon wordt niet langer te vertrouwen op uw onderliggende data structuur. Indien de indeling van de sessie datastructuur steeds verandert, hoeft er niets te worden aangepast in de template.
Laten we nu eens kijken naar een paar dingen die je kunt doen met Smarty. Een ding kan doen, is aangepaste functies. Dit zijn labels in de template die een bepaalde taak uit te voeren. Voorbeeld:
{Html_image file = "masthead.gif"}
Hier hebben we een functie genaamd "html_image". Deze functie neemt de afbeelding gegeven in het attribuut "file" en doet al het werk dat nodig is om te komen met de volgende HTML-code:
Het beeld functie deed het karwei van het uitzoeken van de hoogte en breedte en het leveren van de standaard grens vlag. Natuurlijk kan je gewoon gebruik maken van de statische HTML-tag in de template plaats, maar dit demonstreert hoe een aangepaste functie kan worden gebruikt om een gemeenschappelijke taak te vereenvoudigen. De ontwerper kan zich richten op het ontwerp en minder op de technische zaken. Bovendien, als de ontwerper besluit te laten vallen een afbeelding verschillende grootte mast in de sjabloon geen aanpassing nodig.
html_image is een functie die wordt geleverd met Smarty. U kunt ook uw eigen aangepaste functies maken. Hier is een ander voorbeeld van wat men zou kunnen uitzien:
{Soort html_link = "artikel" id = "abc123" text = "Fire neemt een kijkje bij Hotel"}
Dit wordt met behulp van een aangepaste functie genaamd "html_link". Het komt met de volgende HTML-code:
Fire neemt een kijkje bij Hotel
Wat heeft dit te bereiken? Ten eerste, is de ontwerper niet hoeft bezig te houden met het formaat van een URL naar een artikel. Met hard-coded URL's, wat gebeurt er als op een dag de programmeur besluit om dingen te ruimen, en verandert de URL-syntaxis van /display_article.php?id=abc123 tot / ART / ABC123? We zouden moeten elke sjabloon te bewerken met een artikel URL. Dit is slechts een voorbeeld van hoe een template functie templates makkelijker te onderhouden kan maken.
Nu een beetje aan programmeurs en templates. Eerder werd vermeld dat de programmeur heeft geen zorg voor wat de sjablonen maken met de inhoud. Op conceptueel niveau is dit waar, maar in de echte wereld gaat u niet te verwachten dat de template designer te hebben om alle sjablonen te bouwen uit de lucht. Immers, de business logica doet bepalen wat de inhoud is toegewezen aan de sjablonen. Dus, de programmeur zal typisch opstart skeleton templates voor de ontwerper om mee te beginnen. Deze bevat meestal de ruwe elementen zoals inhoud variabelen en sectie loops, en misschien een paar simpele opmaak-tags zodat ze niet beginnen met de inhoud in een grote puinhoop. Hier is een voorbeeld van een skeleton template dat lussen door een lijst van artikelen en geeft deze weer in een tabel:
{$ artikel [art] .headline} | {$ artikel [art] .date} | {$ artikel [art] .author} |
De uitvoer kan er ongeveer zo uitzien:
Hoe het westen werd gewonnen | 2 december 1999 | John Wayne | |||
Team verliest, Coach stopt | 2 februari 2002 | John Smith | |||
Gourmet Cooking | 23 januari 1954 | Betty Crocker |
Nu voor een aantal veelgestelde vragen:
Waarom gebruik maken van templates op alle? Wat is er zo moeilijk over het schrijven van echo $ titel; ? > In plaats van $ {title}?
Het maken van dingen makkelijker te lezen was niet een ontwerp doel, maar meer van een bijwerking. Sjablonen gebruiken heeft grote voordelen, waarvan vele zijn hierboven toegelicht. Omdat we in een sjabloon omgeving anyways, {$ title} is minder vreemd dan Php echo $ title?; ? >, Vooral als je gaan kijken naar het op lange pagina's van de inhoud, dus het is vrij duidelijk dat een eenvoudiger syntax helpt om templates gemakkelijker te lezen en te handhaven.
Template tijd nemen om te ontleden, waardoor applicaties veel langzamer.
Dat kan waar zijn in sommige gevallen, maar met Smarty is het niet trager dan het uitvoeren van een PHP-script. Op de eerste uitvoering van een template, Smarty zet de template bestanden in PHP-scripts (genoemd template compileren.) Daarna wordt de PHP-script net inbegrepen. Koppel dit aan een PHP accelerator en je hebt echt een snelle templating omgeving met minimale overhead.
Smarty te ingewikkeld is, hoe kan het zijn dat snel?
Smarty kern is vrij mager gezien wat het in staat is. Het grootste deel van de functionaliteit ligt in de plugins. De plugin architectuur is zo ontworpen dat alleen de benodigde plugins op afroep worden geladen. Met dit kader, zal het toevoegen van nog honderden nieuwe plugins niet van invloed op de prestaties. Dit maakt Smarty snel, schaalbaar en flexibel.
Smarty heeft ook caching functies die dynamisch kunnen verfrissen en houden delen van de pagina Buiten cache op uw wens. Caching slaat de uitvoer van het gecompileerde templates opslaan van de noodzaak om ze uit te voeren op elke aanroep.
Al dat gepraat over versnellers, hoe Smarty draaien zonder één?
Eigenlijk loopt vrij goed zonder. Smarty niet een versneller nodig, maar de template bestanden zelf zal profiteren van een, iets dat uniek is voor Smarty (AFAIK). Als u niet een versneller hebben, uitvoering template is niet zo snel, maar niet traag met alle middelen omdat ze niet worden ontleed! U behoudt ook alle andere voordelen en kenmerken van Smarty. Ook, omdat versnellers zijn vrij beschikbaar is er niet echt een excuus om niet te worden via een. Ze zullen de prestaties te helpen met alle PHP apps, met behulp van Smarty of niet.
Hoe kan het makkelijker te onderhouden?
Sommige dingen kunnen niet worden verklaard, maar alleen ervaren. Het voordeel van het scheiden van de applicatie logica van de presentatie kan niet genoeg worden benadrukt. Smarty heeft ook een aantal leuke foutafhandeling features en een ingebouwde debuggen console zodat je de template hiërarchie kunnen zien en toegewezen variabelen in een oogopslag. Het toevoegen van aangepaste functies aan Smarty is zo eenvoudig neer te zetten in de plugin map en noemen ze in de template.
De template tags zijn niet gebaseerd op XML, mijn uitgever het niet leuk vindt.
De {} scheidingstekens zijn slechts een standaard, ze zijn makkelijk te onderscheiden tussen de HTML-tags. Als je niet van hen, verander je afbakeningen of misschien iets meer XMLish zoals Er zijn ook tal van bijdragen van gebruikers voor Dreamweaver en dergelijke, geef ze een kijkje in de bijdragen gebied.
Dat is Smarty in een notendop, hopelijk kunt u deze toevoegen aan uw arsenaal van tools voor het web applicatie bouwen. Om echt meer informatie, lees de handleiding van boven naar beneden, toetreden tot de forums en zien wat mensen bespreken
Eigenschappen .
- Caching: Smarty biedt fijnkorrelig caching functies voor het cachen van het geheel of delen van een gerenderde webpagina, of verlaten onderdelen Buiten cache. Programmeurs kunnen template functies als cacheable of niet-cachebaar, groep cache pagina's in logische eenheden voor eenvoudiger beheer, etc te registreren.
- Configuratie Files: Smarty kunt variabelen getrokken uit configuratiebestanden toewijzen. Template ontwerpers kunnen gemeenschappelijke waarden van verschillende sjablonen op één locatie te behouden zonder tussenkomst van de programmeur en config variabelen kunnen gemakkelijk worden gedeeld tussen de programmering en de presentatie delen van de applicatie.
- Beveiliging: Templates geen PHP code bevatten. Daarom is een template designer niet ontketende met de volledige kracht van PHP, maar alleen de subset van de functionaliteit voor hen beschikbaar gemaakt van de programmeur (applicatiecode.)
- Gemakkelijk te gebruiken en te onderhouden: webpagina ontwerpers zijn niet te maken met PHP-code syntax, maar in plaats daarvan een eenvoudig te gebruiken template syntax niet veel anders dan gewone HTML. De templates zijn een zeer nauwe weergave van de uiteindelijke output, drastisch verkorten van de ontwerp-cyclus.
- Variabele Modifiers: De inhoud van de toegewezen variabelen kunnen eenvoudig worden aangepast aan weergave-tijd met modifiers, zoals het weergeven in alle hoofdletters, html ontsnapt, het formatteren van de data, afkappen tekstblokken, het toevoegen van spaties tussen tekens, etc. Nogmaals Dit wordt bereikt zonder tussenkomst van de programmeur.
- Template Functies: Veel functies zijn beschikbaar om de template designer om taken zoals het genereren van HTML-code segmenten (dropdowns, tafels, pop-ups, enz.), Het weergeven van de inhoud van andere templates in-line, looping dan arrays van inhoud verwerken , tekst opmaak voor e-mail-uitgang, fietsen al kleuren, etc.
- Filters:. De programmeur heeft de volledige controle van de template output en gecompileerd template tevreden met pre-filters, post-filters en output-filters
- Bronnen:. Templates kunnen uit een aantal bronnen worden getrokken door het creëren van nieuwe bron handlers, dan ze te gebruiken in de sjablonen
- Plugins: Bijna elk aspect van Smarty wordt gecontroleerd door het gebruik van plugins. Ze zijn over het algemeen net zo eenvoudig als vallen ze in de plugin directory en dan noemen ze in de sjabloon of het gebruik ervan in de applicatie code. Veel gebruiksvriendelijke gemeenschap bijdragen zijn ook beschikbaar. (Zie de paragraaf plugins van het forum en wiki.)
- Add-ons: Veel gebruiksvriendelijke gemeenschap bijgedragen Add-ons zijn beschikbaar, zoals Pagination, formulier validatie, dropdown menu's, Calander Date Pickers, etc. Deze tools helpen bij het versnellen van de ontwikkeling cyclus, is er geen noodzaak om opnieuw het wiel of de debug code die al stabiel en klaar voor implementatie. (Zie de Add-ons deel van het forum en wiki.)
- Debugging:. Smarty wordt geleverd met een ingebouwde debuggen console zodat de template ontwerper alle toegewezen variabelen kunnen zien en de programmeur kan template renderen snelheden te onderzoeken
- Het compileren:. Smarty compileert templates in PHP code achter de schermen, waardoor run-time parsing van templates
- Prestaties: Smarty presteert zeer goed, ondanks zijn grote feature set. De meeste van Smarty de mogelijkheden liggen in plugins die on-demand worden geladen. Smarty wordt geleverd met tal van presentatie gereedschappen, het minimaliseren van uw applicatie code en dat resulteert in snellere, minder foutgevoelig applicatie ontwikkeling / implementatie. Smarty templates krijgen gecompileerd PHP-bestanden intern (eenmalig), waardoor kostbare sjabloonbestand scans en gebruik te maken van de snelheid van de PHP-code op versnellers.
Wat is nieuw in deze release:
- terugkeren super wereldwijde toegang veranderingen, en in plaats daarvan vertrouwen op USE_SUPER_GLOBALS voor beveiliging
Wat is nieuw in versie 2.6.23:
- strip backticks van {wiskunde} vergelijkingen (mohrt)
- throw fout wanneer template bestaat, maar niet leesbaar (mohrt)
Wat is nieuw in versie 2.6.22:
- Deze versie lost een probleem ondervonden met de Smarty 2.6 .21 vrijlating en een PCRE motor bug in PHP 5.2. Method chaining is verwijderd om de fout te vermijden. Methode chaining zal opnieuw verschijnen in Smarty 3.
Reacties niet gevonden