Odsek bez grešaka php. Uključivanje datoteka u PHP pomoću include i require

Prilikom stvaranja web stranica na vlastitom pisanju (bez korištenja okvira, CMS-a i drugih modernih stvari koje pojednostavljuju život web programerima), suočeni smo s problemom uređivanja web stranice kada ima puno stranica.

Kako ne bismo morali mijenjati iste dijelove web stranice u svakoj datoteci stranice, možemo koristiti prikladne PHP upute koje nam omogućuju da datoteke sa potrebnim kodom uvrstimo u sve stranice s doslovno jednim redom koda. Zatim, promjenom sadržaja uključene datoteke, mijenjamo kôd na svim stranicama web stranice. Zgodno, bez obzira na to kako izgledate.

Sada pogledajmo pobliže kako spojiti datoteke:

Korištenje include i require

Nećete moći sa svom svojom željom pronaći fundamentalnu razliku između ova dva uputstva, ali postoje nijanse:

Ako dođe do greške tokom izvršavanja naredbe require, parser će primiti fatalni odgovor na grešku i izvršenje koda stranice će se zaustaviti, dok će include samo izdati upozorenje i izvršenje datoteke će se nastaviti (datoteka jednostavno neće biti povezana ).

Uzmimo jednostavan primjer za bolje razumijevanje teme.

Imamo svoju mini stranicu na kojoj su zaglavlje i podnožje isti na svim stranicama, a tijelo dokumenta se mijenja.

Kreiramo datoteke header.php i footer.php u koje stavljamo kôd koji će biti isti na svim stranicama, a u datotekama index.php i newpage.php povezujemo statičke dijelove. Kao rezultat toga, dobijamo:

Header.php sadržaj

< header> < nav> < a href= "newpage1.php" title= "stavku menija" >stavku menija < a href= "newpage2.php" title= "stavku menija" >stavku menija < a href= "newpage3.php" title= "stavku menija" >stavku menija

Footer.php sadržaj

< footer> < p>Proizvedeno od nas

Sadržaj drugih stranica web stranice

Minisite

Puno korisnih informacija

Kao rezultat učitavanja naše stranice, dobivamo sljedeću sliku:

Kao što vidimo, sve funkcionira odlično.

Želio bih vam skrenuti pažnju na činjenicu da smo primjer pokrenuli na lokalnom Denwer serveru, jer PHP -u ​​je potreban server sa podrškom za PHP. Ako kreirate web stranicu u jednostavnoj mapi na računaru, ništa neće funkcionirati.

U gornjem primjeru koristili smo zaglavlje require i footer include. Na vama je da odlučite šta ćete koristiti na svojim web stranicama. Kao što je već spomenuto, nema velike razlike među njima. Osim ako se zahtjev ne smatra nešto strožim iskazom.

Zapravo, linija jednostavno kopira cijeli sadržaj datoteke, putanju na koju smo naveli, u dokument u kojem se nalazi.

Korištenje include _once i require _once

Prilikom rada na web mjestu mogu nastati problemi zbog činjenice da je isti dio koda više puta uključen u istu datoteku.

Pretpostavimo da se to dogodilo zbog činjenice da je nekoliko ljudi radilo na web mjestu, a kada su kodovi spojeni, izašao je takav incident ...

Programeri često koriste naredbe include_once i require_once kako bi uklonili mogućnost takvih problema. Princip rada za njih je potpuno isti kao i za include with require, ali ako je datoteka u takvoj uputi već povezana s našom, tada se ponovno povezivanje neće dogoditi.

Nedostaci ove metode uključuju činjenicu da radi sporije i intenzivnije na računanju nego što su to uključivali prethodnici sa zahtjevom, jer postaje potrebno zapamtiti sve uključene datoteke i uporediti ih kako bi se izbjeglo dupliranje koda.

Na napomenu

  • Da bismo olakšali razlikovanje datoteka stranica web stranica i datoteka njihovih fragmenata, koje u njih uvrštavamo, obično uključene datoteke imenu dodaju česticu inc. Uzimajući u obzir ovaj pristup u našem primjeru, dobili bismo datoteku header.inc.php iz datoteke header.php itd. Ovaj pristup može olakšati razumijevanje strukture web stranice u budućnosti.
  • Kod iz datoteke koju povezujemo nasljeđuje opseg linije u koju je povezan. Tobish samo unutar stranice imat će globalni opseg, a unutar funkcije imat će lokalni.
  • Možemo koristiti include with require gdje god želimo. Čak i unutar skripti.
Sadržaj dokumenta

1. funkcija config_load

Sintaksa:
(config_load file = "naziv datoteke")

Ova funkcija se koristi za učitavanje varijabli iz konfiguracijskih datoteka u predložak. Osim naziva učitane datoteke, ova funkcija može imati i nekoliko dodatnih parametara. Na primjer, parametar odjeljka koji navodi naziv odjeljka za učitavanje. Više informacija o ovim i drugim parametrima možete dobiti iz Smarty dokumentacije.

Primjer:
(config_load file = "task.conf")

2. Funkcija snimanja

Sintaksa:

(naziv snimanja = "naziv_bloka"
assign = "variable_name") ...
(/ snimanje)

Ova funkcija je dizajnirana za prikupljanje rezultata predloška u varijablu umjesto prikazivanja na ekranu.

Sve između (naziv hvatanja = "varname") i (/ hvatanje) bit će zapisano u varijablu pod imenom varname. Sadržaj snimljen na ovaj način može se koristiti u predlošku pomoću posebne varijable $ smarty.capture.varname, gdje je varname vrijednost proslijeđena atributu name funkcije hvatanja. Ako naziv varijable nije naveden, koristit će se naziv default.

Drugi parametar dodjeljuje naziv varijable kojoj će biti dodijeljena snimljena izlazna vrijednost. Ovaj parametar, kao i naziv, nije obavezan.

3. Funkcija presjeka

Sintaksa:

(naziv odjeljka = "naziv_odjela"
loop = "varijabla_za_izvan_broj_iteracija"
[, start = "start_position_index"]
[, step = "step"] [, max = "maximum_iterations"]
[, show = "show_or_section"]) ...
(/ odjeljak)

Odsek Odsek je petlja za kretanje po elementima niza. Traženi parametri su name, koji se koristi za postavljanje naziva odjeljka, i petlja, koja je varijabla koja određuje broj iteracija petlje.

U pravilu, petlja je varijabla tipa niza, a broj iteracija odjeljaka jednak je broju elemenata ovog niza. Da biste prikazali promenljivu unutar petlje, morate da navedete naziv odeljka u uglastim zagradama iza imena promenljive.

(naziv odjeljka = umjetnička petlja = $ naslov)

Naslov: ($ naslov)

(/ odjeljak)

Primjer 15.8. Petlja za ponavljanje po elementima niza

4. Foreach funkcija

Sintaksa:

(foreach from = "array_name"
item = "current_item_name"))
... (/ za svaki)

Osim toga, možete koristiti dodatni ključ atributa - naziv ključa za trenutni element niza i naziv - naziv petlje, s kojim možete pristupiti njegovim svojstvima. Atributi from i item su potrebni.

Foreach petlje su alternativa petljama presjeka. Funkcija foreach funkcionira vrlo slično kao PHP petlja foreach.
(foreach from = $ articles item = art)
Naslov: ($ art)

(/ za svaki)

Primjer 15.9. Foreach petlja

Foreach petlje imaju svoja svojstva. Možete im pristupiti na ovaj način: ($ smarty.foreach.foreachname.varname), gdje je foreachname naziv petlje specificiran parametrom imena, a varname ime svojstva.

5. Operater if, elseif, else

Sintaksa:

(ako je izraz) action_block
(elseif izraz1) akcija_blok1
(else) action_block2
(/ ako)

Radnja operatora je gotovo ista kao i PHP ako ... elseif ... else operator.

Sljedeći operatori usporedbe mogu se koristiti u izrazima: eq, ne, neq, gt, lt, lte, le, gte, ge, paran je, neparan, nije paran, nije neparan, ne, mod, div by, paran po, neparno po, == ,! =,>,<, <=, >=. Svaki od njih mora biti odvojen razmacima od okolnih vrijednosti. U izrazima možete koristiti zagrade i pozivati ​​php funkcije.

(ako je $ name eq "Vasya")
Dobrodošao, Vasya.
(inače $ name eq "Petya")
Dobrodošao, Petya.
(drugo)
Dobrodošli. Ko si ti?
(/ ako)

Primjer 15.10. Ako, elseif, else izjave

( * ovaj primjer neće raditi jer nema razmaka oko operatora usporedbe *)
(ako je $ name == "Vasya" || $ name == "Petya")
...
(/ ako)
Primjer 15.11. Slomljeni primjer

Članak koji istražuje element HTML odjeljka iz kategorije odjeljka.

Svrha elementa sekcije

Element odjeljka koristi se za stvaranje odjeljka u dokumentu koji zajedno grupira neke sadržaje. Za svaki odjeljak u dokumentu treba navesti njegov naziv (temu). To se obično radi sa zaglavljima (elementi h1-h6).

Naslov odeljka

Sadržaj odeljka ...

Elementi presjeka obično se koriste u sljedećim situacijama:

  • za označavanje odjeljaka u odjeljku. Na primjer, za označavanje poglavlja u članku, tabova u dijaloškom okviru, odjeljaka u disertaciji itd.
  • grupirati nekoliko odjeljaka u jednu tematsku grupu. Na primjer, za grupiranje najnovijih vijesti na web mjestu, komentara na članak itd.

Dakle, element odjeljak treba koristiti samo za neki sadržaj ako ima naslov i dio je nečeg drugog.

Korištenje elementa odjeljak

Na primjer, razmislite o isječku koda stranice koji sadrži članak s komentarima. Svaki od komentara koje je korisnik objavio na stranici sadrži neki potpuni sadržaj i stoga se može smatrati elementom članka. Ali, istovremeno, svi komentari predstavljaju određenu tematsku grupu, pa se stoga mogu smjestiti u element odjeljka, tj. ovaj element će grupirati sve ove komentare na stranici zajedno.

Naslov članka

Komentari (1)

Zaglavlje komentara

Tekst komentara ...

Zaglavlje komentara

Tekst komentara ...

Naslov članka Komentari Komentar Naslov Komentar Naslov

Na primjer, razmislite o upotrebi elemenata odjeljka za kreiranje odjeljaka unutar elementa članka:

Naslov knjige

Prvo poglavlje

Poglavlje drugo

Treće poglavlje

Dodatak A

Dodatak B

Gornji primjer imat će sljedeći prikaz:

Naslov knjige Poglavlje jedno Poglavlje Drugo Poglavlje Treće Dodatak A Dodatak B

Ograničenja pri korištenju elementa odjeljka

Element odjeljka u HTML 5 nije generički element za grupiranje sadržaja, tj. ne smije se koristiti za umotavanje bilo kojeg sadržaja koji vam se sviđa. Njegova glavna svrha je dodavanje semantike dokumentu i stvaranje njegove skice.

Kada autor treba grupirati sadržaj samo da bi ga stilizirao ili manipulirao u JavaScript -u, najbolje mjesto za njih je korištenje elementa div. Element div, za razliku od elementa odjeljka, ne dodaje semantiku dokumentu i ne sudjeluje u stvaranju njegove skice (strukture).

Razlika između elemenata odjeljka i članka

Elementi odjeljka i članka, iako se na prvi pogled čine vrlo sličnima, imaju različita semantička značenja. Element članka namijenjen je grupiranju cjelovitog, samostalnog sadržaja i može se gledati odvojeno od ostatka sadržaja stranice. Element odjeljka ima drugačije semantičko značenje, namijenjen je grupiranju sadržaja koji je sastavni dio nečega drugog.

Ali kako autor može znati šta je neki sadržaj na stranici? Pogledajmo ovo s primjerom isječka članka. Isječak je dio članka, pa se stoga element odjeljka mora koristiti za grupiranje njegovog sadržaja. Ali isti fragment, koji je već ostavljen kao komentar, predstavljat će nešto potpuno, cjelovito. Stoga se u ovom kontekstu element članka može koristiti za njegovo grupiranje. Ali, naravno, može se zaključiti, i obrnuto. Stoga, koji element koristiti za grupiranje sadržaja u većini slučajeva ovisi o vašem subjektivnom mišljenju kao autora. No, najvažnija stvar u ovom pristupu je zadržati odabranu poziciju. Stoga, što je autor dosljedniji u stvaranju strukture, to ima više smisla.

). Svaka oznaka (odjeljak) mora imati par (/ odjeljak)... Traženi parametri su ime i petlja... Naziv petlje (sekcije) može biti bilo koji naziv koji se sastoji od slova, brojeva i donjih crta. Ciklusi (odjeljak) mogu biti ugniježđeni, a ugniježđena imena (odjeljak) moraju biti jedinstvena među sobom. Variable petlja(obično niz vrijednosti) određuje broj iteracija petlje. Prilikom ispisivanja varijabli unutar odjeljka, naziv odjeljka mora biti naveden pored naziva varijable unutar uglatih zagrada. (drugo) se izvršava ako je parametar petlja ne sadrži vrijednosti.

Naziv atributa Vrstu Obavezno Zadano Opis
ime string Da N / A Naziv odjeljka
petlja mješovito Da N / A Vrijednost koja određuje broj iteracija petlje.
start cijeli broj Ne 0 Indeks pozicije na kojoj će petlja započeti. Ako je vrijednost negativna, početna pozicija se računa od kraja niza. Na primjer, ako u varijabli petlje ima 7 elemenata i vrijednost početnog atributa je -2, tada će početni indeks biti 5. Nevažeće vrijednosti (vrijednosti izvan niza) automatski se skraćuju na najbližu važeću vrijednost.
korak cijeli broj Ne 1 Vrijednost koraka koja se koristi za kretanje po nizu. Na primjer, korak = 2 označava obilazak niza elementima 0,2,4 ... Ako je korak negativan, tada će se niz prelaziti u suprotnom smjeru.
max cijeli broj Ne 1 Maksimalan broj iteracija petlje.
show boolean Ne istinito Pokazuje treba li prikazati ovaj odjeljak ili ne

Bilješka

Počevši od Smarty 1.5.0, sintaksa varijabli svojstava sesije je promijenjena iz (% sectionname.varname%) u ($ smarty.section.sectionname.varname). Stara sintaksa je i dalje podržana, ali vidjet ćete samo primjere nove sintakse.

index se koristi za prikaz trenutnog indeksa niza, počevši od nule (ili atributa start, ako je naveden) i povećan za jedan (ili za vrijednost atributa step, ako je naveden).

Tehnička napomena

Ako atributi step i start nisu navedeni, tada je indeks isti kao atribut odjeljka za iteraciju, osim što počinje s 0 umjesto 1.

iteracija se koristi za prikaz trenutnog broja iteracije petlje.

Bilješka

Ova vrijednost je neovisna o svojstvima start, step i max, za razliku od svojstva indeksa. Takođe, iteracije započinju na jedan, a ne na nuli sličnih indeksa. rownum je sinonim za svojstvo iteracije, rade na isti način.

Primjer 7.38. iteracija svojstva (sekcije)

assign ("custid", $ id); ?> (naziv odjeljka = cu petlja = $ custid start = 5 korak = 2) iteracija = ($ smarty.section.cu.iteration) index = ($ smarty.section.cu.index) id = ($ custid)
(/ odjeljak)

Rezultat ovog primjera:

Iteracija = 1 indeks = 5 id = 3005
iteracija = 2 indeks = 7 id = 3007
iteracija = 3 indeks = 9 id = 3009
iteracija = 4 indeks = 11 id = 3011
iteracija = 5 indeks = 13 id = 3013
iteracija = 6 indeks = 15 id = 3015

Ovaj primjer koristi svojstvo iteracije za ispis naslova tablice svakih pet redaka (koristi (ako) s operatorom mod).

(naziv odjeljka = co petlja = $ kontakti) (ako je $ smarty.section.co.iteration% 5 == 1) (/ ako) (/ odjeljak)
Ime>DomCellEmail
pogled ($ contacts.name) ($ contacts.home) ($ contacts.cell) ($ contacts.email)