Bűntelen rész php. Fájlok beillesztése a PHP -be az include és a required használatával

Amikor önállóan író webhelyeket hozunk létre (keretek, CMS és egyéb divatos dolgok használata nélkül, amelyek megkönnyítik a webfejlesztők életét), akkor azzal a problémával szembesülünk, hogy szerkeszteni kell az oldalt, ha sok oldal van.

Annak érdekében, hogy ne kelljen ugyanazokat a részeket megváltoztatnunk az oldalfájlokban, kényelmes PHP utasításokat használhatunk, amelyek lehetővé teszik számunkra, hogy a szükséges kódú fájlokat minden oldalra felvegyük, szó szerint egy sornyi kóddal. Ezután a mellékelt fájl tartalmának megváltoztatásával megváltoztatjuk a kódot a webhely minden oldalán. Kényelmes, akárhogy is nézel ki.

Most nézzük meg közelebbről a fájlok csatlakoztatásának módját:

Használata tartalmazza és igényli

Minden vágyaddal nem fogsz tudni alapvető különbséget találni e két utasítás között, de vannak árnyalatok:

Ha a requ parancs végrehajtása közben hiba lép fel, az elemző végzetes hibaüzenetet kap, és az oldalkód végrehajtása leáll, míg az include csak figyelmeztetést ad, és a fájl végrehajtása folytatódik (a fájl egyszerűen nem lesz csatlakoztatva).

Vegyünk egy egyszerű példát a téma jobb megértése érdekében.

Megvan a minisorozatunk, amelyben a fejléc és a lábléc ugyanaz minden oldalon, és a dokumentum törzse megváltozik.

Létrehozunk header.php és footer.php fájlokat, amelyekbe behelyezzük a kódot, amely minden oldalon azonos lesz, az index.php és newpage.php fájlokban pedig összekapcsoljuk a statikus részeket. Ennek eredményeként a következőket kapjuk:

Header.php tartalom

< header> < nav> < a href= "newpage1.php" title= "menü tétel" >menü tétel < a href= "newpage2.php" title= "menü tétel" >menü tétel < a href= "newpage3.php" title= "menü tétel" >menü tétel

Footer.php tartalom

< footer> < p>Mi készítettük

A webhely más oldalainak tartalma

Minisite

Sok hasznos információ

Az oldal betöltése eredményeként a következő képet kapjuk:

Mint látjuk, minden remekül működik.

Szeretném felhívni a figyelmét arra a tényre, hogy a példát a helyi Denwer -kiszolgálón futtattuk, mivel a PHP működéséhez szükség van egy kiszolgálóra, amely támogatja a PHP -t. Ha webhelyet hoz létre a számítógép egyszerű mappájában, semmi sem fog működni.

A fenti példában az igényelt fejlécet és a láblécet is használtuk. Rajtad múlik, hogy mit használsz webhelyein. Mint már említettük, nincs sok különbség közöttük. Hacsak nem igénylik, valamivel szigorúbb nyilatkozatnak tekintik.

Valójában a vonal egyszerűen bemásolja a fájl teljes tartalmát, az elérési utat, amelyre mutatunk, a dokumentumba, amelyben található.

A include _once és a _once használatához szükség van

A webhelyen végzett munka során problémák merülhetnek fel azzal kapcsolatban, hogy ugyanaz a kódrészlet ismételten szerepel ugyanabban a fájlban.

Tegyük fel, hogy ez annak köszönhető, hogy többen dolgoztak az oldalon, és amikor a kódokat egyesítették, egy ilyen incidens jött ki ...

A fejlesztők gyakran az include_once és a Require_once utasításokat használják az ilyen problémák lehetőségének kiküszöbölésére. A működési elv számukra pontosan ugyanaz, mint az include with required esetében, de ha az ilyen utasításban szereplő fájl már csatlakozott a miénkhez, akkor az újracsatlakozás nem következik be.

Ennek a módszernek a hátrányai közé tartozik az a tény, hogy lassabban és számításigényesebben működik, mint elődei, mivel szükség van arra, hogy emlékezzen az összes fájlra, és hasonlítsa össze őket, hogy elkerülje a kódok ismétlődését.

Egy jegyzetre

  • Annak érdekében, hogy kényelmesebb legyen megkülönböztetni a webhely oldalai fájljait és azok töredékeinek fájljait, amelyeket ezekbe foglalunk, az általában mellékelt fájlok inc részecskét adnak a névhez. Figyelembe véve ezt a megközelítést példánkban, megkapnánk a header.inc.php fájlt a header.php fájlból és így tovább. Ez a megközelítés nagyságrenddel könnyebbé teheti a webhely szerkezetének megértését a jövőben.
  • Az összekapcsolt fájlból származó kód örökli annak a sornak a hatókörét, amelyhez kapcsolódik. Tobish csak az oldalon belül globális hatókörű lesz, a függvényen belül pedig helyi.
  • Használhatjuk az include with Request -et, ahol csak akarjuk. Még a szkripteken belül is.
Dokumentum tartalomjegyzék

1. config_load függvény

Szintaxis:
(config_load file = "fájlnév")

Ez a funkció a változók betöltésére szolgál a konfigurációs fájlokból egy sablonba. Ez a funkció a betöltött fájl nevén kívül több további paraméterrel is rendelkezhet. Például a szakasz paraméter, amely megadja a betöltendő szakasz nevét. Ezekről és más paraméterekről további információkat a Smarty dokumentációjában szerezhet be.

Példa:
(config_load file = "task.conf")

2. Felvétel funkció

Szintaxis:

(rögzítési név = "blokknév"
hozzárendelés = "változó_neve") ...
(/ rögzítés)

Ezt a funkciót úgy tervezték, hogy a sablon kimenetét egy változóba gyűjtse, ahelyett, hogy megjelenítené a képernyőn.

A (capture name = "varname") és a (/ capture) közötti minden a varname nevű változóba kerül. Az így rögzített tartalom felhasználható a sablonban a $ smarty.capture.varname speciális változó használatával, ahol a varname a rögzítési függvény name attribútumának átadott érték. Ha nincs megadva változónév, akkor az alapértelmezett név lesz használatban.

A második paraméter hozzárendelés annak a változónak a nevét adja meg, amelyhez a rögzített kimeneti érték hozzárendelésre kerül. Ez a paraméter a névhez hasonlóan nem kötelező.

3. Szekciófüggvény

Szintaxis:

(szakasz neve = "szakasz_neve"
loop = "variable_for_out_number_iterations"
[, start = "start_position_index"]
[, step = "step"] [, max = "maximum_iterations"]
[, show = "show_or_section"]) ...
(/ szakasz)

A Section Section egy ciklus tömb elemek bejárására. A szükséges paraméterek a név, amely a szakasz nevének beállítására szolgál, és a ciklus, amely egy változó, amely meghatározza a ciklus iterációk számát.

Általában a hurok tömb típusú változó, és a szakasz ismétlések száma megegyezik a tömb elemeinek számával. Ha egy ciklusban egy változót szeretne megjeleníteni, akkor a szakasz nevét szögletes zárójelben kell megadnia a változó neve után.

(szakasz neve = művészeti hurok = $ cím)

Cím: ($ title)

(/ szakasz)

Példa 15.8. Ismétlés a tömb elemei között

4. A foreach funkció

Szintaxis:

(foreach from = "tömb_neve"
item = "current_item_name")
... (/ az egyes)

Ezenkívül használhatja a további attribútumok kulcsát - a kulcs nevét a tömb aktuális eleméhez és a nevet - a ciklus nevét, amellyel elérheti a tulajdonságait. A from és item attribútumok megadása kötelező.

A Foreach ciklusok alternatívái a szakasz hurkoknak. A foreach függvény nagyon hasonlít a PHP foreach hurokhoz.
(foreach from = $ items item = art)
Cím: ($ art)

(/ az egyes)

Példa 15.9. Foreach hurok

A Foreach hurkok saját tulajdonságokkal rendelkeznek. Ezeket a következőképpen érheti el: ($ smarty.foreach.foreachname.varname), ahol a foreachname a névparaméter által meghatározott ciklus neve, a varname pedig a tulajdonság neve.

5. Üzemeltető if, elseif, else

Szintaxis:

(ha kifejezés) action_block
(elseif kifejezés1) action_block1
(else) action_block2
(/ ha)

Az operátor művelete majdnem ugyanaz, mint a PHP, ha ... elseif ... else operátor.

A következő összehasonlító operátorok használhatók kifejezésekben: eq, ne, neq, gt, lt, lte, le, gte, ge, páros, páratlan, nem páros, nem páratlan, nem, mod, div by, even által, páratlan, == ,! =,>,<, <=, >=. Mindegyiket szóközökkel kell elválasztani a környező értékektől. Zárójeleket használhat kifejezésekben és hívhatja a php függvényeket.

(ha $ név eq "Vasya")
Isten hozott, Vasya.
(elseif $ name eq "Petya")
Isten hozott, Petya.
(más)
Üdvözöljük. Ki vagy te?
(/ ha)

Példa 15.10. If, elseif, else állítások

( * ez a példa nem fog működni, mivel nincsenek szóközök az összehasonlító operátorok körül *)
(ha $ name == "Vasya" || $ name == "Petya")
...
(/ ha)
Példa 15.11. Törött példa

Cikk, amely a szakaszok kategóriájának HTML szakasz elemét tárja fel.

A szakasz elem célja

A szakasz elem segítségével létrehozhat egy szakaszt a dokumentumban, amely egyes tárgytartalmakat csoportosít. A dokumentum minden szakaszához meg kell adni a nevét (témáját). Ez általában fejlécekkel történik (h1-h6 elemek).

Szakasz címsor

Szakasz tartalma ...

A szakasz elemeket általában a következő helyzetekben használják:

  • szakaszon belüli szakaszok jelölésére. Például egy cikk fejezeteinek, egy párbeszédpanel lapjainak, egy értekezés szakaszainak megjelöléséhez stb.
  • több szakaszt egyetlen tematikus csoportba csoportosítani. Például a webhely legfrissebb híreinek, egy cikkhez fűzött megjegyzéseknek a csoportosításához.

Így a szakasz elemet csak akkor szabad használni bizonyos tartalmakhoz, ha van címe és valami más része.

A szakasz elem használata

Vegyünk például egy oldalkódrészletet, amely megjegyzéseket tartalmazó cikket tartalmaz. A felhasználó által az oldalon közzétett megjegyzések mindegyike teljes tartalmat tartalmaz, ezért cikk elemnek tekinthető. De ugyanakkor minden megjegyzés egy bizonyos tematikus csoportot képvisel, és ezért elhelyezhetők a szakasz elemben, azaz ez az elem csoportosítja az oldalon található megjegyzéseket.

Cikk címe

Megjegyzések (1)

Megjegyzés fejléce

Megjegyzés szövege ...

Megjegyzés fejléce

Megjegyzés szövege ...

Cikk Cím Megjegyzések Megjegyzés Cím Megjegyzés Cím

Például fontolja meg a szakasz elemek használatát szakaszok létrehozásához egy cikkelemen belül:

Könyvcím

Első fejezet

Második fejezet

Harmadik fejezet

A Függelék

B. függelék

A fenti példa a következő vázlatot tartalmazza:

Könyv címe Első fejezet Második fejezet Harmadik fejezet Függelék A Függelék B. függelék

Korlátozások a szakasz elem használatakor

A HTML 5 szakasz eleme nem általános elem a tartalom csoportosításához, azaz nem szabad tetszőleges tartalom csomagolására használni. Fő célja, hogy szemantikát adjon a dokumentumhoz és létrehozza annak vázlatát.

Amikor a szerzőnek csak azért kell csoportosítania a tartalmat, hogy stílusos legyen vagy manipulálja azt a JavaScriptben, akkor a legjobb hely a div elem használata. A div elem a szakasz elemmel ellentétben nem ad szemantikát a dokumentumhoz, és nem vesz részt a vázlat (vázlat) létrehozásában.

A szakasz és a cikk elemei közötti különbség

A szakasz és a cikk elemei, bár első pillantásra nagyon hasonlónak tűnnek, különböző szemantikai jelentéssel bírnak. A cikk elem a teljes, önálló tartalom csoportosítására szolgál, és külön tekinthető meg az oldal többi tartalmától. A szakasz elem pedig más szemantikai jelentéssel bír, azt a tartalmat kívánja csoportosítani, amely más szerves része.

De honnan tudhatja a szerző, hogy mi az oldal bizonyos tartalma? Nézzük ezt egy cikkrészlet példájával. A kódrészlet egy cikk része, ezért a szakasz elemeit kell használni a tartalom csoportosításához. De ugyanaz a töredék, amelyet már kommentárként hagytak, valami egészet, teljességet képvisel. Ezért ebben az összefüggésben a cikk elem csoportosítható. De persze lehet okoskodni, és fordítva. Ezért a tartalom csoportosításához használt elem a legtöbb esetben a szerző szubjektív véleményétől függ. De a legfontosabb ebben a megközelítésben a kiválasztott pozíció megőrzése. Ezért minél következetesebb a szerző a struktúra megalkotásában, annál több értelmet tud beleadni.

). Minden címke (szakasz) kell egy pár (/ szakasz)... A szükséges paraméterek névés hurok... A ciklus (szakasz) neve bármilyen betűből, számból és aláhúzásból álló név lehet. Ciklusok (szakasz) egymásba ágyazhatók, és a beágyazott neveknek (szakasznak) egyedinek kell lenniük egymás között. Változó hurok(általában értékek tömbje) határozza meg a ciklus iterációk számát. Ha változókat nyomtat egy szakaszon belül, a szakasz nevét a szögletes zárójelben lévő változó neve mellett kell feltüntetni. (szakasz) akkor hajtódik végre, ha a paraméter hurok nem tartalmaz értékeket.

Attribútum neve Típusú Kívánt Alapértelmezett Leírás
név húr Igen nincs Szakasz neve
hurok vegyes Igen nincs Egy érték, amely meghatározza a ciklus iterációk számát.
Rajt egész szám Nem 0 Annak a pozíciónak az indexe, amelynél a ciklus elindul. Ha az érték negatív, akkor a kiindulási pozíciót a tömb végéről számítják ki. Például, ha 7 elem van egy ciklusváltozóban, és a start attribútum értéke -2, akkor a startindex 5 lesz. Az érvénytelen értékek (a tömbön kívüli értékek) automatikusan lecsökkennek a legközelebbi érvényes értékre.
lépés egész szám Nem 1 A tömb áthaladására használt lépésérték. Például a = 2 lépés a tömb bejárását jelzi 0,2,4 elemekkel ... Ha a lépés negatív, akkor a tömb az ellenkező irányba kerül.
max egész szám Nem 1 A ciklus iterációk maximális száma.
előadás boolean Nem igaz Azt jelzi, hogy meg kell -e jeleníteni ezt a részt

jegyzet

A Smarty 1.5.0 -tól kezdve a munkamenettulajdonság -változók szintaxisa megváltozott. Régi érték: [% sectionname.varname%], [$ smarty.section.sectionname.varname]. A régi szintaxis továbbra is támogatott, de csak példákat fog látni az új szintaxisra.

index a tömb aktuális indexének megjelenítésére szolgál, nullától kezdve (vagy a start attribútumnál, ha van megadva), és eggyel (vagy a step attribútum értékével növekszik, ha van megadva).

Műszaki megjegyzés

Ha a step és start attribútumok nincsenek megadva, akkor az index megegyezik az iterációs szakasz attribútummal, azzal a különbséggel, hogy 1 helyett 0 -val kezdődik.

iteráció a ciklus aktuális iterációs számának megjelenítésére szolgál.

jegyzet

Ez az érték független az indítási, lépési és maximális tulajdonságoktól, ellentétben az index tulajdonsággal. Ezenkívül az iterációk egynél kezdődnek, nem pedig nulláról, mint az indexek. A rownum az iterációs tulajdonság szinonimája, ugyanúgy működnek.

Példa 7.38. tulajdonság (szakasz) iteráció

assign ("custid", $ id); ?> (szakasz neve = cu ciklus = $ custid start = 5 lépés = 2) iteráció = ($ smarty.section.cu.iteration) index = ($ smarty.section.cu.index) id = ($ custid)
(/ szakasz)

Ennek a példának az eredménye:

Ismétlés = 1 index = 5 id = 3005
iteráció = 2 index = 7 id = 3007
iteráció = 3 index = 9 id = 3009
iteráció = 4 index = 11 id = 3011
iteráció = 5 index = 13 id = 3013
iteráció = 6 index = 15 id = 3015

Ez a példa az iterációs tulajdonságot használja a táblázat címének minden öt sorban történő kinyomtatására (használja (ha) a mod operátorral).

(szakasz neve = co loop = $ névjegyek) (ha $ smarty.section.co.iteration% 5 == 1) (/ ha) (/ szakasz)
Név>itthonSejtEmail
Kilátás ($ contacts.name) ($ contacts.home) ($ contacts.cell) ($ contacts.email)