Isekirjutavate saitide loomisel (ilma raamistike, CMS-i ja muude moodsate asjade kasutamiseta, mis muudavad veebiarendajate elu lihtsamaks) seisame silmitsi probleemiga, kuidas saiti redigeerida, kui lehti on palju.
Et me ei peaks igas lehefailis muutma saidi samu osi, saame kasutada mugavaid PHP juhiseid, mis võimaldavad meil vajaliku koodiga faile lisada kõikidele lehtedele sõna otseses mõttes ühe koodiridaga. Seejärel muudame kaasatud faili sisu muutes koodi kõigil saidi lehtedel. Mugav, ükskõik kuidas sa välja näed.
Nüüd vaatame lähemalt, kuidas faile ühendada:
Kasutamine sisaldab ja nõuab
Te ei leia kõigi soovidega nende kahe juhise vahel põhimõttelist erinevust, kuid on nüansse:
Kui nõude käsu täitmisel ilmneb tõrge, saab parser surmaga lõppeva veateate ja lehekoodi täitmine peatub, samas kui include annab ainult hoiatuse ja faili täitmine jätkub (faili lihtsalt ei ühendatud).
Võtame lihtsa näite teema paremaks mõistmiseks.
Meil on oma minisait, mille päis ja jalus on kõigil lehtedel ühesugused ning dokumendi sisu muutub.
Loome failid header.php ja footer.php, kuhu paigutame kõigil lehtedel sama koodi ning failides index.php ja newpage.php ühendame staatilised osad. Selle tulemusena saame:
Header.php sisu
< header> < nav> < a href= "newpage1.php" title= "menüüelement" >menüüelement a> < a href= "newpage2.php" title= "menüüelement" >menüüelement a> < a href= "newpage3.php" title= "menüüelement" >menüüelement a> nav> header>
Footer.php sisu
< footer> < p>Meie tehtud p> footer>
Saidi teiste lehtede sisu
Palju kasulikku teavet
Meie lehe laadimise tulemusena saame järgmise pildi:
Nagu näeme, töötab kõik suurepäraselt.
Tahaksin juhtida teie tähelepanu asjaolule, et tegime näite kohalikus Denweri serveris, kuna PHP nõuab, et PHP toega server töötaks. Kui loote veebisaidi arvutis lihtsasse kausta, ei tööta midagi.
Ülaltoodud näites kasutasime nõutavat päist ja jalust. See, mida oma saitidel kasutada, on teie otsustada. Nagu juba mainitud, pole nende vahel suurt vahet. Kui ei nõuta, peetakse seda mõnevõrra rangemaks avalduseks.
Tegelikult joon lihtsalt kopeerib kogu faili sisu, kuhu me märgime, dokumenti, milles see asub.
Kasutamine sisaldab _once ja nõuab _once
Saidiga töötades võivad tekkida probleemid, mis on seotud sellega, et sama kooditükk lisatakse samasse faili korduvalt.
Oletame, et see juhtus seetõttu, et saidil töötas mitu inimest ja koodide ühendamisel tuli selline juhtum välja ...
Arendajad kasutavad selliste probleemide vältimiseks sageli avaldusi include_once ja Require_once. Nende tööpõhimõte on täpselt sama, mis Include puhul, kuid kui sellise juhise fail on meiega juba ühendatud, siis uuesti ühendust ei teki.
Selle meetodi puudused hõlmavad asjaolu, et see töötab aeglasemalt ja arvutusmahukamalt, kui eelkäijad seda nõuavad, kuna koodi dubleerimise vältimiseks on vaja kõiki kaasatud faile meeles pidada ja võrrelda.
Märkme peale
- Et hõlbustada saidi lehtede failide ja nende fragmentide failide eristamist, mida me nendesse lisame, lisavad tavaliselt lisatud failid nimele inc -osakese. Arvestades seda lähenemist meie näites, saaksime faili header.inc.php failist header.php ja nii edasi. See lähenemisviis võib muuta saidi struktuuri mõistmise tulevikus suurusjärgu võrra lihtsamaks.
- Ühendatava faili kood pärib selle rea ulatuse, milles see on ühendatud. Tobish just lehe sees on globaalne ulatus ja funktsiooni sees on kohalik.
- Saame kasutada koos nõudmisega kõikjal, kus tahame. Isegi skriptide sees.
1. config_load funktsioon
Süntaks:(config_load file = "failinimi")
Seda funktsiooni kasutatakse muutujate laadimiseks konfiguratsioonifailidest malli. Lisaks laaditud faili nimele võib sellel funktsioonil olla mitmeid täiendavaid parameetreid. Näiteks jao parameeter, mis määrab laaditava sektsiooni nime. Lisateavet nende ja muude parameetrite kohta saate Smarty dokumentatsioonist.
Näide:
(config_load file = "task.conf")
2. Pildistusfunktsioon
Süntaks:(püüdmisnimi = "ploki_nimi"
määra = "muutuja_nimi") ...
(/ jäädvustamine)
Selle funktsiooni eesmärk on koguda malli väljund muutujaks selle asemel, et seda ekraanil kuvada.
Kõik, mis jääb vahemikku (püüdmisnimi = "varname") ja (/ capture), kirjutatakse muutujale nimega varname. Selliselt jäädvustatud sisu saab mallis kasutada spetsiaalse muutuja $ smarty.capture.varname abil, kus varname on väärtus, mis edastatakse jäädvustusfunktsiooni atribuudile name. Kui muutuja nime pole määratud, kasutatakse vaikenime.
Teine parameetri määramine määrab muutuja nime, millele jäädvustatud väljundväärtus määratakse. See parameeter, nagu ka nimi, on valikuline.
3. Sektsiooni funktsioon
Süntaks:(jao nimi = "sektsiooni_nimi"
loop = "variable_for_out_number_iterations"
[, start = "start_position_index"]
[, step = "step"] [, max = "maximum_iterations"]
[, show = "show_or_section"]) ...
(/ jaotis)
Sektsioon Sektsioon on silmus massiivielementide läbimiseks. Nõutavad parameetrid on nimi, mida kasutatakse sektsiooni nime määramiseks, ja tsükkel, mis on muutuja, mis määrab silmuste korduste arvu.
Reeglina on silmus massiivi tüüpi muutuja ja sektsioonide korduste arv võrdub selle massiivi elementide arvuga. Muutuja kuvamiseks silmuse sees peate muutuja nime järel nurksulgudes märkima sektsiooni nime.
(jao nimi = kunsti silmus = $ pealkiri)
Pealkiri: ($ title)
(/ jaotis)
Näide 15.8. Tehke tsükkel massiivielementide üle kordamiseks
4. Jutlustamisfunktsioon
Süntaks:(foreach from = "massiivi_nimi"
item = "praegune_üksuse_nimi")
... (/ igaühele)
Lisaks saate kasutada täiendavate atribuutide võtit - massiivi praeguse elemendi võtme nime ja nime - silmuse nime, millega saate selle atribuutidele juurde pääseda. Atribuudid alates ja üksus on kohustuslikud.
Foreachi silmused on alternatiiv lõigusilmustele. Foreach funktsioon on väga sarnane PHP foreach loopiga.
(foreach from = $ items item = art)
Pealkiri: ($ art)
(/ igaühele)
Näide 15.9. Foreach loop
Foreachi silmustel on oma omadused. Juurdepääs neile on järgmine: ($ smarty.foreach.foreachname.varname), kus eesnimi on selle nimeparameetriga määratud ahela nimi ja varname on atribuudi nimi.
5. Operaator if, elseif, else
Süntaks:(kui väljend) action_block
(elseif avaldis1) action_block1
(muidu) action_block2
(/ kui)
Operaatori tegevus on peaaegu sama kui PHP, kui ... elseif ... else operaator.
Väljendites saab kasutada järgmisi võrdlusoperaatoreid: eq, ne, neq, gt, lt, lte, le, gte, ge, on paaris, on paaritu, pole paaris, pole paaritu, ei, mod, div by, isegi poolt, paaritu, == ,! =,>,<, <=, >=. Igaüks neist tuleb ümbritsevatest väärtustest tühikutega eraldada. Sulgudes saate kasutada avaldisi ja helistada php -funktsioonidele.
(kui $ name ekv "Vasya")
Tere tulemast, Vasya.
(elseif $ nimi ekv "Petya")
Tere tulemast, Petya.
(muidu)
Tere tulemast. Kes sa oled?
(/ kui)
Näide 15.10. If, elseif, else avaldused
( * see näide ei tööta, kuna võrdlusoperaatorite ümber pole tühikuid *)
(kui $ name == "Vasya" || $ name == "Petya")
...
(/ kui)
Näide 15.11. Katkine näide
Artikkel, mis uurib jaotise kategooria HTML -jaotise elementi.
Sektsiooni elemendi eesmärk
Jaotiselementi kasutatakse dokumendis jaotise loomiseks, mis koondab teatud teema sisu kokku. Dokumendi iga jao jaoks tuleb märkida selle nimi (teema). Tavaliselt tehakse seda päistega (elemendid h1-h6).
Jaotise sisu ...Jaotise pealkiri
Sektsiooni elemente kasutatakse tavaliselt järgmistes olukordades:
- jaotises olevate sektsioonide märkimiseks. Näiteks artikli peatükkide, dialoogiboksi vahelehtede, lõputöö lõigete jms märkimiseks.
- rühmitada mitu sektsiooni ühte temaatilisse rühma. Näiteks saidi viimaste uudiste, artikli kommentaaride jne rühmitamiseks.
Seega tuleks sektsiooni elementi kasutada ainult mõne sisu jaoks, kui sellel on pealkiri ja see on osa millestki muust.
Sektsiooni elemendi kasutamine
Näiteks kaaluge lehe koodilõiku, mis sisaldab kommentaaridega artiklit. Kõik kasutaja poolt lehele postitatud kommentaarid sisaldavad täielikku sisu ja seetõttu võib neid lugeda artikli elemendiks. Kuid samal ajal esindavad kõik kommentaarid teatud temaatilist rühma ja seetõttu saab neid paigutada sektsiooni elementi, s.t. see element rühmitab kõik need kommentaarid lehel kokku.
Artikli pealkiri
Kommentaarid (1)
Kommentaari päis
Kommentaari päis
Artikli pealkiri Kommentaarid Kommentaar Pealkiri Kommentaar Pealkiri
Näiteks kaaluge jaotiselementide kasutamist artiklielemendi sektsioonide loomiseks.
Raamatu pealkiri
Esimene peatükk
Teine peatükk
Kolmas peatükk
Lisa A
Lisa B
Ülaltoodud näitel on järgmine ülevaade:
Raamatu pealkiri Peatükk Esimene Peatükk Teine peatükk Kolmas Lisa A Lisa B
Piirangud sektsiooni elemendi kasutamisel
Jaotiselement HTML 5 -s ei ole sisu rühmitamiseks üldine element, s.t. seda ei tohiks kasutada meelepärase sisu pakkimiseks. Selle peamine eesmärk on lisada dokumendile semantika ja luua selle kontuur.
Kui autoril on vaja sisu rühmitada ainult JavaScripti stiilimiseks või sellega manipuleerimiseks, on parim koht kasutada elementi div. Erinevalt lõigu elemendist div ei lisa dokumendile semantikat ega osale selle kontuuri (kontuuri) loomisel.
Jaotise ja artikli elementide erinevus
Jaotise ja artikli elementidel, kuigi esmapilgul tunduvad nad väga sarnased, on erinev semantiline tähendus. Artikli element on mõeldud täieliku, iseseisva sisu rühmitamiseks ja seda saab vaadata lehe ülejäänud sisust eraldi. Jaotiselemendil on teistsugune semantiline tähendus, see on mõeldud sisu koondamiseks, mis on millegi muu lahutamatu osa.
Aga kuidas saab autor teada, mis on lehe sisu? Vaatame seda artikli katkendi näitega. Katkend on osa artiklist ja seetõttu tuleb selle sisu rühmitamiseks kasutada sektsiooni elementi. Kuid sama fragment, mis on juba kommentaariks jäetud, kujutab endast midagi terviklikku, terviklikku. Seetõttu saab antud kontekstis artikli elementi selle rühmitamiseks kasutada. Aga muidugi võib põhjendada ja vastupidi. Seetõttu sõltub see, millist elementi sisu rühmitamiseks kasutada, enamikul juhtudel teie kui autori subjektiivsest arvamusest. Kuid selle lähenemisviisi kõige tähtsam on valitud positsiooni säilitamine. Seega, mida järjepidevam on autor struktuuri loomisel, seda rohkem mõistust saab ta sellesse panna.
). Iga silt (jaotis) peab olema paar (/ jaotis)... Nõutavad parameetrid on nimi ja silmus... Silmuse (sektsiooni) nimi võib olla mis tahes nimi, mis koosneb tähtedest, numbritest ja alakriipsudest. Tsüklid (jaotis) saab pesastada ja pesastatud nimed (jaotis) peavad olema omavahel unikaalsed. Muutuja silmus(tavaliselt väärtuste massiiv) määrab silmuste korduste arvu. Muutujate printimisel sektsiooni sisse tuleb sektsiooni nimi märkida muutuja nime kõrval nurksulgudes. (jaotis) täidetakse, kui parameeter silmus ei sisalda väärtusi.
Atribuudi nimi | Tüüp | Nõutud | Vaikimisi | Kirjeldus |
---|---|---|---|---|
nimi | string | Jah | ei ole | Sektsiooni nimi |
silmus | segatud | Jah | ei ole | Väärtus, mis määrab silmuste korduste arvu. |
alustada | täisarv | Ei | 0 | Asendi indeks, millest silmus algab. Kui väärtus on negatiivne, arvutatakse lähtepositsioon massiivi lõpust. Näiteks kui silmusmuutjas on 7 elementi ja algustribuudi väärtus on -2, siis on algusindeks 5. Kehtetud väärtused (väärtused väljaspool massiivi) kärbitakse automaatselt lähima kehtiva väärtuseni. |
samm | täisarv | Ei | 1 | Asteväärtus, mida kasutatakse massiivi läbimiseks. Näiteks samm = 2 näitab massiivi läbimist elementidega 0,2,4 ... Kui samm on negatiivne, läbitakse massiiv vastupidises suunas. |
max | täisarv | Ei | 1 | Tsükli korduste maksimaalne arv. |
näitama | loogiline | Ei | tõsi | Näitab, kas seda jaotist näidata või mitte |
Märge
Alates Smarty 1.5.0 -st on seansi atribuutide muutujate süntaks muudetud väärtusest (% sectionname.varname%) väärtuseks ($ smarty.section.sectionname.varname). Vana süntaks on endiselt toetatud, kuid näete ainult näiteid uuest süntaksist.
indeksit kasutatakse massiivi praeguse indeksi kuvamiseks, alustades nullist (või atribuudi algusest, kui see on määratud) ja suurendades seda ühe võrra (või sammu atribuudi väärtuse võrra, kui see on määratud).
Tehniline märkus
Kui sammu ja alguse atribuute pole määratud, on indeks sama mis iteratsiooni sektsiooni atribuut, välja arvatud see, et see algab 0 asemel 1.
iteratsiooni kasutatakse silmuse praeguse iteratsiooninumbri kuvamiseks.
Märge
See väärtus ei sõltu algus-, astme- ja maksimumomadustest, erinevalt indeksi omadusest. Samuti algavad iteratsioonid ühest, mitte nullist nagu indeksid. rownum on iteratsiooniomaduse sünonüüm, nad töötavad samamoodi.
Näide 7.38. vara (sektsiooni) iteratsioon
assign ("custid", $ id); ?> (sektsiooni nimi = cu loop = $ custid start = 5 samm = 2) iteratsioon = ($ smarty.section.cu.iteration) index = ($ smarty.section.cu.index) id = ($ custid)
(/ jaotis)
Selle näite tulemus:
Kordamine = 1 indeks = 5 id = 3005
iteratsioon = 2 indeks = 7 id = 3007
iteratsioon = 3 indeks = 9 id = 3009
iteratsioon = 4 indeks = 11 id = 3011
iteratsioon = 5 indeks = 13 id = 3013
iteratsioon = 6 indeks = 15 id = 3015
See näide kasutab atribuudi iteratsioon tabeli pealkirja printimiseks iga viie rea järel (kasutab (kui) koos mod operaatoriga).
Nimi> | Kodu | Kamber | E -post | |
---|---|---|---|---|
vaade | ($ contacts.name) | ($ contacts.home) | ($ contacts.cell) | ($ contacts.email) |