Անմեղ հատված php. PHP- ում ֆայլերի ներառումը ներառում և պահանջում է

Ինքնագրով կայքեր ստեղծելիս (առանց շրջանակներ, CMS և այլ նորաձև բաներ, որոնք հեշտացնում են վեբ ծրագրավորողների կյանքը), մենք բախվում ենք կայքի խմբագրումներ կատարելու խնդրի հետ, երբ կան բազմաթիվ էջեր:

Որպեսզի էջի ֆայլերից յուրաքանչյուրում չպիտի փոխենք կայքի նույն հատվածները, կարող ենք օգտագործել հարմար PHP հրահանգներ, որոնք թույլ են տալիս բոլոր էջերում ներառել անհրաժեշտ կոդով ֆայլեր բառացիորեն մեկ տող կոդով: Այնուհետեւ, փոխելով ներառված ֆայլի բովանդակությունը, մենք փոխում ենք կայքի բոլոր էջերի ծածկագիրը: Հարմար է, անկախ նրանից, թե ինչ տեսք ունեք:

Այժմ եկեք ավելի մանրամասն նայենք ֆայլերը միացնելու եղանակներին.

Օգտագործելով ներառել և պահանջել

Ձեր բոլոր ցանկությամբ դուք չեք կարողանա սկզբունքային տարբերություն գտնել այս երկու հրահանգների միջև, բայց կան նրբերանգներ.

Եթե ​​սխալ առաջանա պահանջվող հրամանի կատարման ընթացքում, վերլուծիչը կստանա մահացու սխալի պատասխանը, և էջի ծածկագրի կատարումը կդադարի, մինչդեռ ներառում է միայն նախազգուշացում, և ֆայլի կատարումը կշարունակվի (ֆայլը պարզապես չի լինի կապված):

Եկեք պարզ օրինակ վերցնենք ՝ թեման ավելի լավ հասկանալու համար:

Մենք ունենք մեր մինիսիտը, որի վերնագիրն ու տողատակը նույնն են բոլոր էջերում, և փաստաթղթի տեքստը փոխվում է:

Մենք ստեղծում ենք header.php և footer.php ֆայլեր, որոնցում բոլոր էջերում տեղադրում ենք նույն ծածկագիրը, իսկ index.php և newpage.php ֆայլերում մենք կկապենք ստատիկ մասերը: Արդյունքում մենք ստանում ենք.

Header.php բովանդակություն

< header> < nav> < a href= "newpage1.php" title= "ընտրացանկի տարր" >ընտրացանկի տարր < a href= "newpage2.php" title= "ընտրացանկի տարր" >ընտրացանկի տարր < a href= "newpage3.php" title= "ընտրացանկի տարր" >ընտրացանկի տարր

Footer.php բովանդակությունը

< footer> < p>Պատրաստված է մեր կողմից

Կայքի այլ էջերի բովանդակություն

Մինիսիտ

Շատ օգտակար տեղեկություններ

Մեր էջը բեռնելու արդյունքում մենք ստանում ենք հետևյալ պատկերը.

Ինչպես տեսնում ենք, ամեն ինչ հիանալի է աշխատում:

Ես կցանկանայի ձեր ուշադրությունը հրավիրել այն փաստի վրա, որ մենք օրինակը վարեցինք տեղական Denwer սերվերի վրա, քանի որ PHP- ն պահանջում է սերվեր ՝ իր աջակցությամբ PHP- ի համար: Եթե ​​դուք ստեղծեք կայք համակարգչի վրա պարզ թղթապանակում, ոչինչ չի աշխատի:

Վերոնշյալ օրինակում մենք օգտագործել ենք պահանջվող վերնագիրը, իսկ ստորոգյալը ներառում է: Ինչ օգտագործել ձեր կայքերում, ձեր խնդիրն է: Ինչպես արդեն նշվեց, նրանց միջև մեծ տարբերություն չկա: Եթե ​​պահանջը որոշ չափով ավելի խիստ հայտարարություն չի համարվում:

Փաստորեն, գիծը պարզապես պատճենում է ֆայլի ամբողջ բովանդակությունը, այն ուղին, որին մենք ցույց ենք տալիս, այն փաստաթղթում, որում այն ​​գտնվում է:

Օգտագործելով ներառում է `մեկ անգամ և պահանջել` մեկ անգամ

Կայքում աշխատելիս խնդիրներ կարող են ծագել այն պատճառով, որ նույն կոդի կտորը մի քանի անգամ ներառված է նույն ֆայլում:

Ենթադրենք, դա տեղի ունեցավ այն պատճառով, որ կայքում աշխատում էին մի քանի մարդ, և երբ կոդերը միաձուլվեցին, նման միջադեպ հայտնվեց ...

Մշակողները հաճախ օգտագործում են include_once և care_once հայտարարություններ `նման խնդիրների հնարավորությունը վերացնելու համար: Գործողության սկզբունքը նրանց համար ճիշտ նույնն է, ինչ ներառում է Require- ը, բայց եթե նման հրահանգի ֆայլը արդեն միացված է մերին, ապա նորից կապը չի առաջանա:

Այս մեթոդի թերությունները ներառում են այն փաստը, որ այն ավելի դանդաղ և հաշվարկային առումով ավելի ինտենսիվ է, քան պահանջում են իր նախորդները, քանի որ անհրաժեշտ է հիշել ներառված բոլոր ֆայլերը և դրանք համեմատել ՝ ծածկագրի կրկնօրինակումից խուսափելու համար:

Գրառման վրա

  • Կայքի էջերի ֆայլերը և դրանց բեկորների ֆայլերը տարբերակելն ավելի հարմարավետ դարձնելու համար, որոնք մենք ներառում ենք դրանց մեջ, սովորաբար ներառված ֆայլերը անվան մեջ ավելացնում են ներառական մասնիկ: Հաշվի առնելով այս մոտեցումը մեր օրինակում ՝ մենք header.inc.php ֆայլը կստանանք header.php ֆայլից և այլն: Այս մոտեցումը հետագայում կարող է ավելի հեշտությամբ հասկանալ կայքի կառուցվածքը:
  • Այն ֆայլը, որը մենք միացնում ենք, ժառանգում է այն տողի շրջանակը, որին այն կապված է: Tobish- ը հենց էջի ներսում այն ​​կունենա գլոբալ շրջանակ, իսկ գործառույթի ներսում `տեղական:
  • Մենք կարող ենք ներառել պահանջով, որտեղ էլ ցանկանանք: Նույնիսկ սցենարների ներսում:
Փաստաթղթի բովանդակությունը

1. config_load գործառույթը

Շարահյուսություն:
(config_load file = "ֆայլի անունը")

Այս գործառույթը օգտագործվում է կազմաձևման ֆայլերից փոփոխականները ձևանմուշ բեռնելու համար: Բեռնված ֆայլի անունից բացի, այս գործառույթը կարող է ունենալ մի քանի լրացուցիչ պարամետր: Օրինակ ՝ բաժնի պարամետրը, որը նշում է բեռնվող հատվածի անունը: Այս և այլ պարամետրերի մասին լրացուցիչ տեղեկություններ կարելի է ստանալ Smarty փաստաթղթերից:

Օրինակ:
(config_load file = "task.conf")

2. Սևեռման գործառույթ

Շարահյուսություն:

(գրավել անունը = "block_name"
նշանակել = "փոփոխական_անուն") ...
(/ գրավում)

Այս գործառույթը նախատեսված է կաղապարի ելքը փոփոխականի մեջ հավաքելու փոխարեն այն էկրանին ցուցադրելու փոխարեն:

(Անկացած բան (գրավման անունը = "varname") և (/ capture) միջև կգրվի varname անունով փոփոխականի վրա: Այս կերպ գրված բովանդակությունը կարող է օգտագործվել ձևանմուշում ՝ օգտագործելով $ smarty.capture.varname հատուկ փոփոխականը, որտեղ varname- ը գրավման գործառույթի անվան հատկանիշին փոխանցված արժեքն է: Եթե ​​փոփոխականի անուն նշված չէ, ապա այն կկիրառվի կանխադրված:

Երկրորդ պարամետրի նշանակումը սահմանում է այն փոփոխականի անունը, որին կհատկացվի գրավված ելքային արժեքը: Այս պարամետրը, ինչպես անունը, պարտադիր չէ:

3. Բաժնի գործառույթը

Շարահյուսություն:

(հատվածի անունը = "section_name"
հանգույց = "variable_for_out_number_iterations"
[, սկսել = "start_position_index"]
[, քայլ = "քայլ"] [, առավելագույն = "առավելագույն_գրումներ"]
[, ցույց տալ = "շոու_կամ_բաժին"]) ...
(/ Բաժին)

Բաժին Բաժինը զանգված է տարրերի տարրերն անցնելու համար: Պահանջվող պարամետրերն են անունը, որն օգտագործվում է հատվածի անունը սահմանելու համար և օղակը, որը փոփոխական է, որը որոշում է օղակի կրկնությունների քանակը:

Որպես կանոն, loop- ը զանգվածի փոփոխական է, և հատվածի կրկնությունների թիվը հավասար է այս զանգվածի տարրերի թվին: Օղակի ներսում փոփոխական ցուցադրելու համար փոփոխականի անունից հետո պետք է նշել հատվածի անվանումը քառակուսի փակագծերում:

(հատվածի անունը = արվեստի հանգույց = $ վերնագիր)

Վերնագիր: ($ title)

(/ Բաժին)

Օրինակ 15.8. Օղակ ՝ զանգվածի տարրերի վրա կրկնելու համար

4. Քարոզչական գործառույթը

Շարահյուսություն:

(foreach from = "array_name"
նյութ = "ընթացիկ_էջի անունը")
... (/ քարոզել)

Բացի այդ, կարող եք օգտագործել լրացուցիչ հատկանիշների բանալին `զանգվածի և անվան ընթացիկ տարրի բանալու անունը` հանգույցի անվանումը, որով կարող եք մուտք գործել դրա հատկությունները: From և item հատկանիշները պարտադիր են:

Foreach loops- ը այլընտրանք է հատվածի loops- ին: Foreach գործառույթը շատ նման է PHP foreach օղակին:
(քարոզել = $ հոդվածների նյութից = արվեստից)
Վերնագիր: ($ art)

(/ քարոզել)

Օրինակ 15.9. Foreach հանգույց

Foreach loops- ն ունի իր սեփական հատկությունները: Նրանց կարող եք մուտք գործել հետևյալ կերպ.

5. Օպերատոր, եթե, elseif, else

Շարահյուսություն:

(եթե արտահայտություն) action_block
(elseif արտահայտություն 1) action_block1
(այլ) action_block2
(/ եթե)

Օպերատորի գործողությունը գրեթե նույնն է, ինչ PHP- ն, եթե ... elseif ... else օպերատորը:

Հետևյալ համեմատական ​​օպերատորները կարող են օգտագործվել արտահայտություններում. ըստ, կենտ կողմից, ==,! =,>,<, <=, >= Նրանցից յուրաքանչյուրը պետք է առանձնացված լինի շրջակա արժեքներից բացատներով: Դուք կարող եք օգտագործել փակագծեր արտահայտություններում և զանգահարել php գործառույթներին:

(եթե $ name eq «Վասյա»)
Բարի գալուստ, Վասյա:
(elseif $ name eq «Պետյա»)
Բարի գալուստ, Պետյա:
(ուրիշ)
Բարի գալուստ: Ով ես դու?
(/ եթե)

Օրինակ 15.10. If, elseif, else հայտարարություններ

( * այս օրինակը չի աշխատի, քանի որ համեմատական ​​օպերատորների շուրջ բացատներ չկան *)
(եթե $ name == "Վասյա" || $ name == "Պետյա")
...
(/ եթե)
Օրինակ 15.11. Կոտրված օրինակ

Հոդված, որը ուսումնասիրում է հատվածի կատեգորիայի HTML հատվածի տարրը:

Բաժնի տարրի նպատակը

Բաժնի տարրը օգտագործվում է փաստաթղթում այնպիսի հատված ստեղծելու համար, որը միավորում է որոշ առարկայական բովանդակություն միասին: Փաստաթղթի յուրաքանչյուր բաժնի համար պետք է նշվի դրա անվանումը (թեման): Սովորաբար դա կատարվում է վերնագրերով (h1-h6 տարրեր):

Բաժնի վերնագիր

Բաժնի բովանդակությունը ...

Բաժնի տարրերը սովորաբար օգտագործվում են հետևյալ իրավիճակներում.

  • բաժնի ներսում հատվածներ նշելու համար: Օրինակ ՝ հոդվածում գլուխներ նշելու, երկխոսության տուփի ներդիրներ, ատենախոսության բաժիններ և այլն:
  • խմբավորել մի քանի բաժին մեկ թեմատիկ խմբի մեջ: Օրինակ ՝ կայքի վերջին նորությունները խմբավորելու, հոդվածի վերաբերյալ մեկնաբանություններ և այլն:

Այսպիսով, հատվածի տարրը պետք է օգտագործվի միայն որոշ բովանդակության համար, եթե այն ունի վերնագիր և այլ բանի մաս է:

Օգտագործելով հատվածի տարրը

Օրինակ, հաշվի առեք էջի կոդի մի հատված, որը պարունակում է հոդված մեկնաբանություններով: Օգտատիրոջ կողմից էջում տեղադրված մեկնաբանություններից յուրաքանչյուրը պարունակում է որոշակի ամբողջական բովանդակություն և, հետևաբար, կարող է համարվել հոդվածի տարր: Բայց, միևնույն ժամանակ, բոլոր մեկնաբանությունները ներկայացնում են որոշակի թեմատիկ խումբ, և, հետևաբար, դրանք կարող են տեղադրվել բաժնի տարրում, այսինքն. այս տարրը խմբավորելու է էջի այս բոլոր մեկնաբանությունները միասին:

Հոդվածի վերնագիրը

Մեկնաբանություններ (1)

Մեկնաբանության վերնագիր

Մեկնաբանության տեքստ ...

Մեկնաբանության վերնագիր

Մեկնաբանության տեքստ ...

Հոդվածի վերնագիրը Մեկնաբանությունների մեկնաբանության վերնագիրը Մեկնաբանության վերնագիրը

Օրինակ, հաշվի առեք հոդվածի տարրի մեջ բաժիններ ստեղծելու համար բաժնի տարրերի օգտագործումը.

Գրքի վերնագիր

Առաջին գլուխ

Գլուխ երկրորդ

Գլուխ երրորդ

Հավելված Ա

Հավելված Բ

Վերոնշյալ օրինակը կունենա հետևյալ ուրվագիծը.

Գրքի վերնագիր Գլուխ մեկ Գլուխ երկրորդ Գլուխ երեք Հավելված Ա Հավելված Բ

Բաժնի տարր օգտագործելիս սահմանափակումներ

HTML 5 -ի հատվածի տարրը բովանդակության խմբավորման ընդհանուր տարր չէ, այսինքն. այն չպետք է օգտագործվի ձեզ դուր եկած ցանկացած բովանդակություն փաթաթելու համար: Դրա հիմնական նպատակը փաստաթղթի իմաստաբանությունն ավելացնելն ու դրա ուրվագծի ստեղծումն է:

Երբ հեղինակը պետք է բովանդակություն խմբավորի միայն JavaScript- ում ոճավորելու կամ շահարկելու համար, ամենալավ տեղը նրանց համար div տարրն օգտագործելն է: Div տարրը, ի տարբերություն բաժնի տարրի, իմաստաբանություն չի ավելացնում փաստաթղթում և չի մասնակցում դրա ուրվագծի (ուրվագծի) ստեղծմանը:

Տարբերությունը բաժնի և հոդվածի տարրերի միջև

Բաժնի և հոդվածի տարրերը, մինչդեռ առաջին հայացքից թվում են շատ նման, ունեն տարբեր իմաստային իմաստներ: Հոդվածի տարրը նախատեսված է խմբավորելու ամբողջական, ինքնուրույն և կարող է դիտվել էջի մնացած բովանդակությունից առանձին: Իսկ հատվածի տարրը կրում է այլ իմաստաբանական նշանակություն, այն նախատեսված է խմբավորել բովանդակությունը, որն այլ բանի անբաժանելի մասն է:

Բայց ինչպե՞ս կարող է հեղինակը իմանալ, թե ինչ է որոշակի էջի բովանդակությունը: Եկեք սա նայենք հոդվածի մի հատվածի օրինակով: Հատվածը հոդվածի մի մասն է, ուստի դրա բովանդակությունը խմբավորելու համար հատվածի տարրը պետք է օգտագործվի: Բայց նույն հատվածը, որն արդեն մնացել է որպես մեկնաբանություն, կներկայացնի ամբողջական, ամբողջական մի բան: Հետևաբար, այս համատեքստում հոդվածի տարրը կարող է օգտագործվել այն խմբավորելու համար: Բայց, իհարկե, կարելի է տրամաբանել, և հակառակը: Հետևաբար, բովանդակությունը խմբավորելու համար որ տարրը շատ դեպքերում կախված է ձեր ՝ որպես հեղինակի, սուբյեկտիվ կարծիքից: Բայց այս մոտեցման մեջ ամենակարևորը ընտրված դիրքի պահպանումն է: Հետևաբար, որքան ավելի հետևողական է հեղինակը կառույցը ստեղծելու հարցում, այնքան ավելի իմաստալից կարող է լինել դրա մեջ:

): Յուրաքանչյուր պիտակ (Բաժին)պետք է ունենա զույգ (/ Բաժին)... Պահանջվող պարամետրերն են Անունեւ հանգույց... Օղակի (բաժնի) անվանումը կարող է լինել ցանկացած անուն, որը բաղկացած է տառերից, թվերից և ընդգծումներից: Ցիկլեր (Բաժին)կարող են բնադրված լինել և բնադրված անունները (հատվածը) պետք է յուրահատուկ լինեն միմյանց մեջ: Փոփոխական հանգույց(սովորաբար արժեքների զանգված) որոշում է հանգույցի կրկնությունների թիվը: Բաժնի ներսում փոփոխականներ տպելիս հատվածի անունը պետք է նշվի քառակուսի փակագծերում գտնվող փոփոխականի անվան կողքին: (այլ հատվածներ)կատարվում է, եթե պարամետրը հանգույցարժեքներ չի պարունակում:

Հատկանիշի անունը Տեսակ Պարտադիր է Լռելյայն Նկարագրություն
Անուն լարային Այո n / a Բաժնի անվանումը
հանգույց խառը Այո n / a Արժեք, որը որոշում է հանգույցի կրկնությունների քանակը:
սկսել ամբողջ թիվ Ոչ 0 Դիրքի ինդեքսը, որտեղից կսկսվի օղակը: Եթե ​​արժեքը բացասական է, ապա մեկնարկային դիրքը հաշվարկվում է զանգվածի վերջից: Օրինակ, եթե օղակի փոփոխականում կա 7 տարր, իսկ մեկնարկային հատկանիշը -2 է, ապա մեկնարկի ինդեքսը կլինի 5. Սխալ արժեքները (զանգվածից դուրս արժեքները) ինքնաբերաբար կրճատվում են մոտակա վավեր արժեքին:
քայլ ամբողջ թիվ Ոչ 1 Քայլերի արժեքը, որն օգտագործվում է զանգվածը հատելու համար: Օրինակ, քայլ = 2 -ը ցույց է տալիս զանգվածի անցում 0,2,4 տարրերով ... Եթե քայլը բացասական է, ապա զանգվածը կանցնի հակառակ ուղղությամբ:
առավելագույնը ամբողջ թիվ Ոչ 1 Օղակի կրկնությունների առավելագույն թիվը:
ցուցադրում բուլյան Ոչ ճիշտ Ույց է տալիս ցուցադրել այս բաժինը, թե ոչ

Նշում

Smarty 1.5.0 -ից սկսած ՝ նստաշրջանի հատկությունների փոփոխականների շարահյուսությունը փոխվել է (% sectionname.varname%) - ից ($ smarty.section.sectionname.varname): Հին շարահյուսությունը դեռ աջակցվում է, բայց դուք կտեսնեք միայն նոր շարահյուսության օրինակներ:

ինդեքսը օգտագործվում է զանգվածի ընթացիկ ինդեքսը ցուցադրելու համար ՝ սկսած զրոյից (կամ սկզբնական հատկանիշից, եթե նշված է) և աճելով մեկով (կամ քայլի հատկանիշի արժեքով, եթե նշված է):

Տեխնիկական նշում

Եթե ​​քայլ և սկիզբ հատկանիշները նշված չեն, ապա ինդեքսը նույնն է, ինչ կրկնում է բաժինը, բացառությամբ, որ այն սկսվում է 0 -ից ՝ 1 -ի փոխարեն:

կրկնությունը օգտագործվում է օղակի ընթացիկ կրկնության համարը ցուցադրելու համար:

Նշում

Այս արժեքը անկախ սկզբի, քայլի և առավելագույն հատկություններից, ի տարբերություն ինդեքսի հատկության: Բացի այդ, կրկնությունները սկսվում են մեկից, այլ ոչ թե զրոյից, ինչպես ինդեքսները: rownum- ը կրկնվող հատկության հոմանիշն է, նրանք աշխատում են նույն կերպ:

Օրինակ 7.38. գույքի (հատվածի) կրկնություն

նշանակել («custid», $ id); ?> (հատվածի անունը = cu loop = $ custid start = 5 քայլ = 2) iteration = ($ smarty.section.cu.iteration) index = ($ smarty.section.cu.index) id = ($ custid)
(/ Բաժին)

Այս օրինակի արդյունքը.

Iteration = 1 ցուցանիշ = 5 id = 3005
կրկնություն = 2 ինդեքս = 7 id = 3007
կրկնություն = 3 ինդեքս = 9 id = 3009
կրկնություն = 4 ինդեքս = 11 id = 3011
կրկնություն = 5 ինդեքս = 13 id = 3013
կրկնություն = 6 ինդեքս = 15 id = 3015

Այս օրինակը օգտագործում է կրկնում հատկությունը ՝ աղյուսակի վերնագիրը յուրաքանչյուր հինգ տող դուրս բերելու համար (օգտագործում է (եթե) ռեժիմի օպերատորի հետ):

(հատվածի անունը = co loop = $ կոնտակտներ) (եթե $ smarty.section.co.iteration% 5 == 1) (/ եթե) (/ Բաժին)
Անուն>տունԲջջԷլ
դիտել ($ contacts.name) ($ contacts.home) ($ contacts.cell) ($ contacts.email)