Sekce bez hříchu php. Zahrnutí souborů v PHP pomocí include a require

Při vytváření webů pomocí automatického psaní (bez použití rámců, CMS a dalších módních věcí, které usnadňují vývojářům webů život) stojíme před problémem provádět úpravy webu, když je mnoho stránek.

Abychom nemuseli měnit stejné části webu v každém ze souborů stránek, můžeme použít praktické instrukce PHP, které nám umožňují zahrnout soubory s potřebným kódem na všechny stránky doslova s ​​jedním řádkem kódu. Poté změnou obsahu zahrnutého souboru změníme kód na všech stránkách webu. Pohodlné, bez ohledu na to, jak vypadáte.

Nyní se podívejme blíže na to, jak propojit soubory:

Použití zahrnout a vyžadovat

Se vší touhou nebudete schopni najít zásadní rozdíl mezi těmito dvěma pokyny, ale existují nuance:

Pokud během provádění příkazu require dojde k chybě, analyzátor obdrží závažnou chybovou odpověď a provádění kódu stránky se zastaví, zatímco zahrnutí vydá pouze varování a provádění souboru bude pokračovat (soubor prostě nebude připojen).

Vezměme si jednoduchý příklad pro lepší pochopení tématu.

Máme náš minisite, ve kterém jsou záhlaví a zápatí na všech stránkách stejné a tělo dokumentu se změní.

Vytváříme soubory header.php a footer.php, do kterých umístíme kód, který bude stejný na všech stránkách, a v souborech index.php a newpage.php spojíme statické části. V důsledku toho získáme:

Obsah Header.php

< header> < nav> < a href= "newpage1.php" title= "položka nabídky" >položka nabídky < a href= "newpage2.php" title= "položka nabídky" >položka nabídky < a href= "newpage3.php" title= "položka nabídky" >položka nabídky

Obsah Footer.php

< footer> < p>Vyrobeno námi

Obsah ostatních stránek webu

Minisite

Spousta užitečných informací

V důsledku načtení naší stránky se nám zobrazí následující obrázek:

Jak vidíme, vše funguje skvěle.

Chtěl bych vás upozornit na skutečnost, že jsme příklad spustili na místním serveru Denwer, protože PHP ke svému fungování vyžaduje server s podporou PHP. Pokud vytvoříte web v jednoduché složce na PC, nic nebude fungovat.

Ve výše uvedeném příkladu jsme použili hlavičku require a zápatí include. Je jen na vás, co na svých webech použijete. Jak již bylo zmíněno, není mezi nimi velký rozdíl. Pokud není požadavek považován za poněkud přísnější prohlášení.

Ve skutečnosti linka jednoduše zkopíruje celý obsah souboru, cestu, ke které označujeme, do dokumentu, ve kterém se nachází.

Použití include _once a require _once

Při práci na webu mohou nastat problémy související se skutečností, že stejný kus kódu je opakovaně obsažen ve stejném souboru.

Předpokládejme, že se to stalo kvůli tomu, že na místě pracovalo několik lidí, a když byly kódy sloučeny, vyšel takový incident ...

Vývojáři často používají příkazy include_once a require_once k eliminaci možnosti takových problémů. Princip fungování je pro ně přesně stejný jako pro include with require, ale pokud soubor v takové instrukci již byl připojen k našemu, pak k opětovnému připojení nedojde.

Mezi nevýhody této metody patří skutečnost, že pracuje pomaleji a výpočetně náročněji, než její předchůdci zahrnují s požadavkem, protože je nutné pamatovat si všechny zahrnuté soubory a porovnávat je, aby se zabránilo duplikaci kódu.

Na poznámku

  • Aby bylo pohodlnější rozlišovat mezi soubory stránek a soubory jejich fragmentů, které do nich zahrnujeme, obvykle přidávané soubory přidávají do názvu částici inc. Vzhledem k tomuto přístupu v našem příkladu bychom získali soubor header.inc.php ze souboru header.php a tak dále. Tento přístup může v budoucnu usnadnit pochopení struktury webu.
  • Kód ze souboru, který připojujeme, dědí rozsah řádku, ve kterém je připojen. Tobish jen uvnitř stránky bude mít globální rozsah a uvnitř funkce bude mít místní.
  • Můžeme použít include with require, kdekoli chceme. Dokonce i uvnitř skriptů.
Obsah dokumentu

1. funkce config_load

Syntax:
(config_load file = "název_souboru")

Tato funkce slouží k načtení proměnných z konfiguračních souborů do šablony. Kromě názvu načteného souboru může mít tato funkce několik dalších parametrů. Například parametr section, který určuje název oddílu, který se má načíst. Další informace o těchto a dalších parametrech lze získat z dokumentace Smarty.

Příklad:
(config_load file = "task.conf")

2. Funkce Capture

Syntax:

(capture name = "block_name"
přiřadit = "název_proměnné") ...
(/ zachycení)

Tato funkce je navržena tak, aby shromažďovala výstup šablony do proměnné, místo aby ji zobrazovala na obrazovce.

Cokoli mezi (název zachycení = "název varu") a (/ zachycení) bude zapsáno do proměnné s názvem název var. Takto zachycený obsah lze použít v šabloně pomocí speciální proměnné $ smarty.capture.varname, kde varname je hodnota předaná atributu name funkce digitalizace. Pokud není zadán název proměnné, použije se výchozí název.

Druhé přiřazení parametru určuje název proměnné, ke které bude přiřazena výstupní hodnota. Tento parametr, stejně jako název, je volitelný.

3. Funkce sekce

Syntax:

(název sekce = "název_sekce"
loop = "variable_for_out_number_iterations"
[, start = "start_position_index"]
[, step = "step"] [, max = "maximum_iterations"]
[, show = "show_or_section"]) ...
(/ sekce)

Sekce Sekce je smyčka pro procházení prvků pole. Požadované parametry jsou name, který se používá k nastavení názvu sekce, a loop, což je proměnná, která určuje počet iterací smyčky.

Smyčka je zpravidla proměnná typu pole a počet iterací sekcí se rovná počtu prvků této matice. Chcete -li zobrazit proměnnou ve smyčce, musíte za názvem proměnné uvést název sekce v hranatých závorkách.

(název sekce = umělecká smyčka = $ titul)

Název: ($ title)

(/ sekce)

Příklad 15.8. Smyčkou iterujte prvky pole

4. Funkce foreach

Syntax:

(foreach from = "název_pole"
item = "current_item_name")
... (/ pro každého)

Kromě toho můžete použít klíč dalších atributů - název klíče pro aktuální prvek pole a název - název smyčky, pomocí které můžete přistupovat k jeho vlastnostem. Atributy from a item jsou povinné.

Foreach smyčky jsou alternativou k smyčkám sekcí. Funkce foreach je velmi podobná smyčce PHP foreach.
(foreach from = $ articles item = art)
Název: ($ art)

(/ pro každého)

Příklad 15.9. Foreach smyčka

Foreach smyčky mají své vlastní vlastnosti. Můžete k nim přistupovat tímto způsobem: ($ smarty.foreach.foreachname.varname), kde foreachname je název smyčky určený parametrem name a varname je název vlastnosti.

5. Operátor if, elseif, else

Syntax:

(if expression) action_block
(elseif expression1) action_block1
(else) action_block2
(/ pokud)

Akce operátora je téměř stejná jako PHP, pokud ... elseif ... else operátor.

Ve výrazech lze použít následující srovnávací operátory: eq, ne, neq, gt, lt, lte, le, gte, ge, je sudý, lichý, není sudý, není lichý, ne, mod, div by, even od, lichý, == ,! =,>,<, <=, >=. Každý z nich musí být od okolních hodnot oddělen mezerami. Ve výrazech a volání funkcí php můžete použít závorky.

(if $ name eq "Vasya")
Vítejte, Vasya.
(elseif $ name ekv. "Petya")
Vítejte, Petyo.
(jiný)
Vítejte. Kdo jsi?
(/ pokud)

Příklad 15.10. Pokud, elseif, else prohlášení

( * tento příklad nebude fungovat, protože kolem operátorů porovnání nejsou mezery *)
(pokud $ name == "Vasya" || $ name == "Petya")
...
(/ pokud)
Příklad 15.11. Zlomený příklad

Článek, který zkoumá prvek oddílu HTML z kategorie dělení.

Účel prvku oddílu

Prvek oddílu se používá k vytvoření oddílu v dokumentu, který seskupuje určitý obsah předmětu dohromady. U každé části dokumentu by měl být uveden jeho název (téma). To se obvykle provádí pomocí záhlaví (prvky h1-h6).

Nadpis sekce

Obsah sekce ...

Prvky oddílu se běžně používají v následujících situacích:

  • označit sekce v sekci. Například pro označení kapitol v článku, karet v dialogovém okně, sekcí v disertační práci atd.
  • seskupit několik sekcí do jedné tematické skupiny. Například seskupit nejnovější zprávy na webu, komentáře k článku atd.

Prvek oddílu by tedy měl být u určitého obsahu použit pouze v případě, že má nadpis a je součástí něčeho jiného.

Pomocí elementu section

Zvažte například úryvek kódu stránky, který obsahuje článek s komentáři. Každý z komentářů zveřejněných uživatelem na stránce obsahuje nějaký úplný obsah, a proto může být považován za prvek článku. Všechny komentáře však současně představují určitou tematickou skupinu, a proto je lze umístit do prvku oddílu, tj. tento prvek seskupí všechny tyto komentáře na stránce dohromady.

Název článku

Komentáře (1)

Záhlaví komentáře

Text komentáře ...

Záhlaví komentáře

Text komentáře ...

Název článku Komentáře Komentář Název Komentář Název

Zvažte například použití prvků oddílu k vytvoření oddílů v rámci prvku článku:

Název knihy

První kapitola

Kapitola dvě

Kapitola třetí

Příloha A

Dodatek B

Výše uvedený příklad bude mít následující obrys:

Název knihy Kapitola jedna Kapitola dvě Kapitola tři Příloha A Příloha B

Omezení při použití prvku oddílu

Prvek oddílu v HTML 5 není obecným prvkem pro seskupování obsahu, tj. neměl by být používán k zabalení jakéhokoli obsahu, který se vám líbí. Jeho hlavním účelem je přidat do dokumentu sémantiku a vytvořit jeho obrys.

Když autor potřebuje seskupit obsah, aby ho mohl stylovat nebo s ním manipulovat v JavaScriptu, je pro něj nejlepší použít prvek div. Prvek div, na rozdíl od prvku oddílu, nepřidává do dokumentu sémantiku a nepodílí se na vytváření jeho obrysu (osnovy).

Rozdíl mezi prvky oddílu a článku

Prvky oddílu a článku, i když se na první pohled zdají velmi podobné, mají různé sémantické významy. Prvek článku je určen ke seskupení obsahu, který je úplný, samostatný a lze jej zobrazit odděleně od zbytku obsahu stránky. A prvek oddílu má jiný sémantický význam, je určen ke seskupení obsahu, který je nedílnou součástí něčeho jiného.

Jak ale může autor vědět, jaký je nějaký obsah na stránce? Podívejme se na to s ukázkou úryvku článku. Fragment je součástí článku, a proto pro seskupení jeho obsahu je nutné použít prvek oddílu. Ale stejný fragment, již ponechaný jako komentář, bude představovat něco celého, úplného. Proto v tomto kontextu lze použít prvek článku k jeho seskupení. Ale samozřejmě lze uvažovat a naopak. Který prvek použít ke seskupení obsahu proto ve většině případů závisí na vašem subjektivním názoru jako autora. Ale nejdůležitější věcí v tomto přístupu je udržet zvolenou pozici. Čím více je tedy autor při vytváření struktury důslednější, tím větší smysl do ní může vkládat.

). Každá značka (sekce) musí mít pár (/ sekce)... Požadované parametry jsou název a smyčka... Název smyčky (sekce) může být libovolný název skládající se z písmen, číslic a podtržítek. Cykly (sekce) mohou být vnořeny a vnořené názvy (sekce) musí být mezi sebou jedinečné. Variabilní smyčka(obvykle pole hodnot) určuje počet iterací smyčky. Při tisku proměnných uvnitř sekce musí být název sekce uveden vedle názvu proměnné v hranatých závorkách. (sectionelse) se provede, pokud je parametr smyčka neobsahuje žádné hodnoty.

Název atributu Typ Povinné Výchozí Popis
název tětiva Ano není k dispozici Název sekce
smyčka smíšený Ano není k dispozici Hodnota, která určuje počet iterací smyčky.
Start celé číslo Ne 0 Index pozice, na které smyčka začne. Pokud je hodnota záporná, počáteční pozice se vypočítá z konce pole. Pokud je například v proměnné smyčky 7 prvků a hodnota atributu start je -2, pak počáteční index bude 5. Neplatné hodnoty (hodnoty mimo pole) se automaticky zkrátí na nejbližší platnou hodnotu.
krok celé číslo Ne 1 Hodnota kroku, která se používá k procházení pole. Například krok = 2 označuje procházení pole prvky 0,2,4 ... Pokud je krok záporný, bude pole procházeno v opačném směru.
max celé číslo Ne 1 Maximální počet iterací smyčky.
ukázat booleovský Ne skutečný Udává, zda se má tato sekce zobrazit nebo ne

Poznámka

Počínaje verzí Smarty 1.5.0 byla syntaxe proměnných vlastností relace změněna z (% sectionname.varname%) na ($ smarty.section.sectionname.varname). Stará syntaxe je stále podporována, ale uvidíte pouze příklady nové syntaxe.

index se používá k zobrazení aktuálního indexu pole, počínaje nulou (nebo atributem start, je -li zadán) a zvyšujícím se o jeden (nebo hodnotou atributu step, je -li zadán).

Technická poznámka

Pokud nejsou zadány atributy step a start, pak je index stejný jako atribut části iterace, kromě toho, že začíná na 0 místo 1.

iterace slouží k zobrazení aktuálního iteračního čísla smyčky.

Poznámka

Tato hodnota je na rozdíl od vlastnosti index nezávislá na vlastnostech start, step a max. Iterace také začínají na jedné, nikoli na nulové hodnotě jako indexy. rownum je synonymem pro vlastnost iterace, fungují stejným způsobem.

Příklad 7.38. iterace vlastnosti (sekce)

přiřadit ("custid", $ id); ?> (název sekce = cu loop = $ custid start = 5 kroků = 2) iterace = ($ smarty.section.cu.iteration) index = ($ smarty.section.cu.index) id = ($ custid)
(/ sekce)

Výsledek tohoto příkladu:

Iterace = 1 index = 5 id = 3005
iterace = 2 index = 7 id = 3007
iterace = 3 index = 9 id = 3009
iterace = 4 index = 11 id = 3011
iterace = 5 index = 13 id = 3013
iterace = 6 index = 15 id = 3015

Tento příklad používá vlastnost iterace k tisku názvu tabulky každých pět řádků (používá (pokud) s operátorem mod).

(název sekce = co smyčka = $ kontakty) (pokud $ smarty.section.co.iteration% 5 == 1) (/ pokud) (/ sekce)
Jméno>DomovBuňkaE-mailem
Pohled ($ kontakty.název) ($ kontakty.home) ($ contact.cell) ($ contacts.email)