Patuta jaotis php. Failide kaasamine PHP -sse kasutades kaasamist ja nõudmist

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 href= "newpage2.php" title= "menüüelement" >menüüelement < a href= "newpage3.php" title= "menüüelement" >menüüelement

Footer.php sisu

< footer> < p>Meie tehtud

Saidi teiste lehtede sisu

Minisait

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.
Dokumendi sisukord

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 pealkiri

Jaotise sisu ...

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 tekst ...

Kommentaari päis

Kommentaari tekst ...

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).

(sektsiooni nimi = co loop = $ kontaktid) (kui $ smarty.section.co.iteration% 5 == 1) (/ kui) (/ jaotis)
Nimi>KoduKamberE -post
vaade ($ contacts.name) ($ contacts.home) ($ contacts.cell) ($ contacts.email)