Képzeletbeli szakasz php. Fájlok befoglalása PHP-ben az include és a demand használatával. Az include _once és a request _once használata
Egy cikk, amely figyelembe veszi a szakasz HTML elemét a szakaszolási kategóriából.
A szakaszelem célja
A szakasz elem egy olyan szakasz létrehozására szolgál egy dokumentumban, amely néhány aktuális tartalmat csoportosít. A dokumentum minden szakaszánál fel kell tüntetni annak címét (tárgyát). Ez általában címsorokkal történik (h1 - h6 elemek).
A szakasz tartalma...szakasz címe
szakaszelemek általában a következő esetekben használatosak:
- szakaszok megjelölésére egy szakaszon belül. Például egy cikk fejezeteinek, párbeszédpanelek füleinek, szakdolgozat szakaszainak megjelölésére stb.
- több szakaszt egy tematikus csoportba csoportosítani. Például csoportosíthatja a webhely legfrissebb híreit, egy cikkhez fűzött megjegyzéseket stb.
Így a szakaszelemet csak akkor szabad bizonyos tartalomhoz használni, ha van címsora, és valami más része.
A szakaszelem alkalmazása
Vegyünk például egy oldal kódrészletet, amely megjegyzésekkel ellátott cikket tartalmaz. A felhasználó által az oldalon hagyott megjegyzések mindegyike tartalmaz valamilyen befejezett tartalmat, ezért cikkelemnek tekinthető. De ugyanakkor minden hozzászólás valamilyen témacsoportot képvisel, ezért elhelyezhető a szekcióelemben, pl. adott elem csoportosítja az oldalon található összes megjegyzést.
Cikk címe
Hozzászólások
Megjegyzés címe
Megjegyzés címe
A cikk címe Megjegyzések Hozzászólás címe Hozzászólás címe
Fontolja meg például szakaszelemek használatát egy cikkelemen belüli szakaszok létrehozásához:
A könyv neve
Első fejezet
Második fejezet
Harmadik fejezet
A melléklet
B melléklet
A fenti példa a következő struktúrával (vázlattal) rendelkezik:
Könyvcím Első fejezet Második fejezet Harmadik fejezet A függelék B függelék
Korlátozások a szakaszelem használatakor
A HTML 5 szakaszeleme nem általános elem a tartalom csoportosításához; nem használható olyan tartalom becsomagolására, amely tetszik. Fő célja, hogy szemantikát adjon a dokumentumhoz, és létrehozza annak szerkezetét (vázlatát).
Ha egy szerzőnek csak azért kell csoportosítania a tartalmat, hogy stílusa legyen, vagy JavaScriptben dolgozzon vele, akkor a legjobb a div elem használata. A div elem a szekció elemmel ellentétben nem ad szemantikát a dokumentumhoz, és nem vesz részt annak szerkezetének (vázlatának) létrehozásában.
Különbség a szakasz és a cikk elemei között
A szakasz- és cikkelemek, bár látszólag nagyon hasonlóak, eltérő szemantikai jelentéssel bírnak. A cikk elem a teljes, önálló és az oldal többi tartalmától elkülönült tartalom csoportosítására szolgál. A szakaszelemnek pedig más a szemantikai jelentése, olyan tartalmakat hivatott csoportosítani, amelyek valami másnak szerves részét képezik.
De honnan tudja a szerző, hogy milyen tartalom az oldalon? Nézzük meg ezt egy példacikkrészlet segítségével. A töredék egy cikk része, ezért a szakaszelemet kell használni a tartalom csoportosítására. De ugyanaz a töredék, amelyet már kommentárként hagytak, valami egész, teljes lesz. Ezért ebben az összefüggésben a cikk elem használható csoportosítására. De persze az ellenkezőjéről is lehet vitatkozni. Ezért a legtöbb esetben az Ön szubjektív szerzői véleményétől függ, hogy melyik elemet használja a tartalom csoportosításához. De a legfontosabb ebben a megközelítésben a választott pozíció megtartása. Ezért minél következetesebb a szerző a szerkezet megalkotásában, annál több értelmet tud belefektetni.
Amikor saját készítésű oldalakat hozunk létre (keretrendszerek, CMS és egyéb divatos dolgok használata nélkül, amelyek megkönnyítik a webfejlesztők életét), azzal a problémával szembesülünk, hogy sok oldal esetén módosítani kell az oldalon.
Annak érdekében, hogy ne kelljen ugyanazokat az oldalrészeket módosítanunk az egyes oldalfájlokban, használhatunk kényelmes PHP-utasításokat, amelyek lehetővé teszik, hogy egyetlen kódsorral minden oldalra felvegyük a szükséges kódot tartalmazó fájlokat. Ezután a mellékelt fájl tartalmának megváltoztatásával megváltoztatjuk a kódot az oldal összes oldalán. Kényelmes, akárhogyan is nézzük.
Most nézzük meg részletesebben a fájlok összekapcsolásának módjait:
Az include és a követelmény használata
Nem fog tudni alapvető különbséget találni e két utasítás között minden vágyával, de vannak árnyalatok:
Ha hiba történik a request parancs végrehajtása során, az elemző végzetes hibaválaszt kap, és az oldalkód végrehajtása leáll, míg az include csak figyelmeztetést ad, és a fájl fut tovább (a fájl egyszerűen nem szerepeljen).
Vegyünk egy egyszerű példát a téma jobb megértéséhez.
Megvan a mini-webhelyünk, ahol a fejléc és a lábléc minden oldalon azonos, de a dokumentum törzse megváltozik.
Elkészítjük a header.php és a footer.php fájlokat, amelyekben elhelyezzük azt 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> < a href= "newpage2.php" title= "menü tétel" >menü tétel a> < a href= "newpage3.php" title= "menü tétel" >menü tétel a> nav> header>
lábléc.php tartalom
< footer> < p>Mi készítettük p> footer>
Az oldal egyéb oldalainak tartalma
Sok hasznos információ
Oldalunk betöltése eredményeként a következő képet kapjuk:
Amint látjuk, minden remekül működik.
Kérjük, vegye figyelembe, hogy a példát a helyi Denwer szerveren futtattuk, mivel a PHP működéséhez támogatással rendelkező szerverre van szükség. Ha létrehoz egy webhelyet egy egyszerű mappában a számítógépen, semmi sem fog működni.
A vizsgált példában a szükséges fejlécet használtuk a csatlakozáshoz, és az include láblécet. Ön dönti el, hogy mit használ a webhelyein. Mint már említettük, nincs sok különbség köztük. Kivéve, ha a követelmény valamivel szigorúbb utasításnak minősül.
Valójában a vonal egyszerűen bemásolja a fájl teljes tartalmát, az általunk megadott elérési utat, abba a dokumentumba, amelyben található.
Az include _once és a request _once használata
A webhelyen végzett munka során problémák adódhatnak abból a tényből, hogy ugyanaz a kód többször szerepel egy fájlban.
Tegyük fel, hogy ez annak köszönhető, hogy többen dolgoztak az oldalon, és amikor a kódokat kombinálták, akkor egy ilyen incidens jött ki ...
Az ilyen problémák lehetőségének kiküszöbölése érdekében a fejlesztők gyakran használják az include _once and request _once utasításokat. Működési elvük pontosan ugyanaz, mint az include és a require-é, de ha az ilyen utasításban szereplő fájl már össze van kapcsolva a miénkkel, akkor az újracsatlakozás nem történik meg.
Ennek a módszernek a hátrányai közé tartozik, hogy lassabb és számításilag drágább, mint az elődjei, amelyek tartalmazzák és megkövetelik, mivel szükségessé válik az összes beépített fájl emlékezése és összehasonlítása a kódduplikáció elkerülése érdekében.
Egy megjegyzésre
- Annak érdekében, hogy kényelmesebben meg lehessen különböztetni a webhelyoldal fájljait és a töredékeik fájljait, amelyeket belefoglalunk, általában a mellékelt fájlok egy inc részt adnak a névhez. Példánkban ezt a megközelítést figyelembe véve a header.inc.php fájlt a header.php fájlból kapjuk, és így tovább. Ez a megközelítés nagyban leegyszerűsítheti a webhely szerkezetének megértését a jövőben.
- Az általunk felvett fájl kódja örökli annak a sornak a hatókörét, amelyben szerepel. A Tobish csak az oldalon belül globális hatókörrel rendelkezik, a függvényen belül pedig helyi hatókörrel.
- Bárhol használhatjuk az include-ot a request-el. Még a szkripteken belül is.
1. config_load függvény
Szintaxis:(config_load file="file_name")
Ez a funkció a konfigurációs fájlok változóinak sablonba való betöltésére szolgál. Ennek a függvénynek a betöltendő fájl nevén kívül több további paramétere is lehet. Például a szakasz paraméter, amely megadja a betöltendő szakasz nevét. Ezekről és más lehetőségekről további információkat a Smarty dokumentációjában talál.
Példa:
(config_load file="task.conf")
2. Capture funkció
Szintaxis:(capture name="blokk_neve"
assign="változónév") ...
(/elfog)
Ennek a funkciónak az a célja, hogy a sablon kimenetét egy változóba gyűjtse a képernyőn való megjelenítés helyett.
Bármi, ami (capture name="varname") és (/capture) között van, egy varname nevű változóba lesz írva. Az így rögzített tartalom a $smarty.capture.varname speciális változó használatával használható sablonban, ahol a varname a rögzítési függvény name attribútuma számára átadott érték. Ha nincs megadva változónév, akkor a rendszer az alapértelmezett értéket használja.
A második hozzárendelés paraméter adja meg annak a változónak a nevét, amelyhez a rögzített kimeneti érték hozzá lesz rendelve. Ez a paraméter, akárcsak a név, nem kötelező.
3. szakasz funkció
Szintaxis:(szakasz neve="szakasz_neve"
loop="változó_kiszámítandó_az_iterációk_száma"
[,start="start_pozícióindex"]
[, step="step"] [,max="max_iterations"]
[,show="show_section"] )...
(/ szakasz)
A szakasz egy hurok egy tömb elemeinek bejárására. A szükséges paraméterek a name, amely a szakasz nevét adja meg, és a ciklus, amely egy változó, amely meghatározza a ciklus iterációinak számát.
A ciklus általában egy tömbváltozó, és egy szakasz iterációinak száma megegyezik a tömb elemeinek számával. A cikluson belüli változó megjelenítéséhez meg kell adnia a szakasz nevét szögletes zárójelben a változó neve után.
(szakasz neve=művészeti hurok=$cím)
Cím: ($title)
(/ szakasz)
15.8. példa. Hurok a tömb elemei közötti iterációhoz
4. foreach funkció
Szintaxis:(foreach from="tömb_neve"
item="jelenlegi_elem_neve")
... (/az egyes)
Ezenkívül használhat további attribútumkulcsot - a kulcs neve a tömb aktuális eleméhez és neve - a ciklus neve, amellyel hozzáférhet a tulajdonságaihoz. A from és item attribútumok kötelezőek.
A foreach hurkok a szakaszhurkok alternatívája. A foreach függvény nagyon hasonlít a PHP foreach ciklusához.
(foreach from=$articles item=art)
Cím: ($art)
(/az egyes)
Példa 15.9. foreach hurok
A foreach ciklusoknak megvannak a saját tulajdonságai. Ezeket a következőképpen érhetjük el: ($smarty.foreach.foreachname.varname), ahol a foreachname a hurok name paramétere által adott neve, a varname pedig a tulajdonság neve.
5. If, elseif, else kijelentés
Szintaxis:(ha kifejezés) action_block
(elseif kifejezés1) action_block1
(egyéb) action_block2
(/ha)
Az operátor működése szinte hasonló a PHP nyelv if...elseif...else operátorához.
A következő összehasonlító operátorok használhatók a 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, páros által, páratlan, ==, !=, >,<, <=, >=. Mindegyiket szóközzel kell elválasztani a környező értékektől. A kifejezésekben zárójelek használhatók, és PHP függvények hívhatók meg.
(ha $name eq "Vasya")
Üdvözöljük Vasya.
(elseif $name eq "Petya")
Isten hozott, Petya.
(más)
Üdvözöljük. És te ki vagy?
(/ha)
15.10. példa. if, elseif, else állítások
(* ez a példa nem működik, mert nincsenek szóközök az összehasonlító operátorok körül *)
(ha $name=="Vasya" || $name=="Péter")
...
(/ha)
Példa 15.11. Törött példa
). Mindegyik címke (szakasz) kell egy pár (/ szakasz). A szükséges paraméterek névés hurok. A ciklusnév (szakasz) bármi lehet, betűkből, számokból és aláhúzásjelekből állhat. Ciklusok (szakasz) beágyazhatók, és a beágyazott (szakasz) neveknek egyedinek kell lenniük egymás között. Változó hurok(általában értéktömb) határozza meg a ciklus iterációinak számát. Ha változókat nyomtat egy szakaszon belül, a szakasz nevének meg kell jelennie a változó neve mellett szögletes zárójelben. (másik szakasz) végrehajtva, ha a paraméter hurok nem tartalmaz értékeket.
Attribútum neve | Típusú | Kötelező | Alapértelmezett | Leírás |
---|---|---|---|---|
név | húr | Igen | n/a | Szakasz neve |
hurok | vegyes | Igen | n/a | A ciklus iterációinak számát meghatározó érték. |
Rajt | egész szám | Nem | 0 | Annak a pozíciónak az indexe, ahonnan a hurok indul. Ha az érték negatív, akkor a kezdőpozíciót a tömb végétől számítjuk. Például, ha a ciklusváltozónak 7 eleme van, és a start attribútum értéke -2, akkor a kezdőindex 5 lesz. Az érvénytelen értékeket (a tömbön kívüli értékeket) a rendszer automatikusan a legközelebbi érvényes értékre csonkolja. |
lépés | egész szám | Nem | 1 | A lépésérték, amely a tömbön keresztül történő iterációhoz használatos. Például a step=2 megadja a tömb bejárását a 0,2,4 elemekkel... Ha a lépés negatív, akkor a tömb az ellenkező irányba halad. |
max | egész szám | Nem | 1 | A ciklusiterációk maximális száma. |
előadás | logikai érték | Nem | igaz | Meghatározza, hogy ez a szakasz megjelenjen-e vagy sem |
jegyzet
A Smarty 1.5.0 óta a munkamenettulajdonság-változó szintaxisa (%szakasznév.varnév%) értékről ($smarty.section.sectionname.varname) módosult. A régi szintaxis továbbra is támogatott, de csak példákat fog látni az új szintaxisra.
Az index a tömb aktuális indexének megjelenítésére szolgál, nullától kezdődően (vagy a start attribútumtól, ha meg van adva), és eggyel növekszik (vagy a step attribútum értékével, ha volt megadva).
Műszaki megjegyzés
Ha a step és start attribútumok nincsenek megadva, akkor az index megegyezik az iterációs szakasz attribútumával, azzal a különbséggel, hogy 1 helyett 0-val kezdődik.
Az 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 a start, step és max tulajdonságoktól, ellentétben az index tulajdonsággal. Ezenkívül az iterációk egytől kezdődnek, nem nullától, mint az indexek. A rownum az iterációs tulajdonság szinonimája, ugyanúgy működnek.
7.38. példa. tulajdonság (szakasz) iterációja
assign("custid",$id); ?> (szakasznév=cu loop=$custid start=5 step=2) iteration=($smarty.section.cu.iteration) index=($smarty.section.cu.index) id=($custid)
(/ szakasz)
A példa futtatásának eredménye:
Iteráció=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 fejlécének minden ötödik sorban történő megjelenítéséhez (az (if)-t mod operátorral használja - modulo).
Név> | itthon | sejt | ||
---|---|---|---|---|
Kilátás | ($contacts.name) | ($contacts.home) | ($contacts.cell) | ($contacts.email) |